現(xiàn)紅外與可見(jiàn)光圖像配準(zhǔn):SIFT+RANSAC算法詳解與實(shí)戰(zhàn))
簡(jiǎn)介本資源是一套面向圖像處理初學(xué)者與計(jì)算機(jī)視覺(jué)實(shí)踐者的MATLAB紅外與可見(jiàn)光圖像配準(zhǔn)實(shí)現(xiàn)方案聚焦多模態(tài)圖像空間對(duì)齊這一關(guān)鍵難題適用于軍事偵察、遙感監(jiān)測(cè)及智能感知等實(shí)際場(chǎng)景。壓縮包共29個(gè)文件含20個(gè)核心MATLAB函數(shù)如OpenSurf.m、affine_warp.m、FastHessian系列特征檢測(cè)模塊、4張示例圖像PNG/BMP/JPEG格式用于效果驗(yàn)證以及1個(gè)嵌套ZIP說(shuō)明文檔858KB體量輕量易部署代碼結(jié)構(gòu)清晰覆蓋從積分圖構(gòu)建、SURF特征提取、匹配優(yōu)化到幾何變換應(yīng)用的完整流程。已有1455人學(xué)習(xí)下載提供可直接運(yùn)行的main.m主程序、配套預(yù)處理與評(píng)估模塊并內(nèi)置可視化繪圖腳本如PaintSURF.m便于理解特征點(diǎn)分布與配準(zhǔn)效果是掌握跨模態(tài)圖像配準(zhǔn)原理與MATLAB工程實(shí)現(xiàn)的理想入門(mén)范例。1. 項(xiàng)目概述跨越光譜的視覺(jué)對(duì)齊在計(jì)算機(jī)視覺(jué)和遙感領(lǐng)域我們常常會(huì)遇到一個(gè)看似簡(jiǎn)單卻極具挑戰(zhàn)性的問(wèn)題如何讓來(lái)自不同傳感器的“眼睛”看到同一個(gè)世界紅外與可見(jiàn)光圖像配準(zhǔn)正是為了解決這個(gè)核心痛點(diǎn)。想象一下消防員在濃煙彌漫的火災(zāi)現(xiàn)場(chǎng)肉眼可見(jiàn)光幾乎無(wú)法穿透煙霧但熱成像儀紅外卻能清晰勾勒出被困人員和火源輪廓。如果能把這兩幅圖像精確地對(duì)齊疊加救援效率將得到質(zhì)的飛躍。這就是圖像配準(zhǔn)的價(jià)值——它不是簡(jiǎn)單的圖像疊加而是尋找一個(gè)空間變換讓兩幅或多幅從不同視角、不同時(shí)間、不同傳感器獲取的同一場(chǎng)景圖像在幾何上達(dá)到完全一致。這個(gè)項(xiàng)目就是基于MATLAB平臺(tái)實(shí)現(xiàn)一套從理論到實(shí)踐的紅外與可見(jiàn)光圖像配準(zhǔn)算法。MATLAB作為工程計(jì)算和算法原型的利器其強(qiáng)大的矩陣運(yùn)算能力和豐富的圖像處理工具箱使得我們能夠快速驗(yàn)證算法思想直觀地觀察每一步處理的效果。對(duì)于從事遙感分析、安防監(jiān)控、醫(yī)療影像融合或工業(yè)檢測(cè)的工程師和研究者來(lái)說(shuō)掌握這套流程意味著你能夠?qū)⒍嘣串悩?gòu)的視覺(jué)信息轉(zhuǎn)化為統(tǒng)一的、可分析的戰(zhàn)場(chǎng)地圖。無(wú)論是想入門(mén)多模態(tài)圖像處理的新手還是需要優(yōu)化現(xiàn)有配準(zhǔn)流程的開(kāi)發(fā)者這篇文章都將帶你走完從理解原理、動(dòng)手實(shí)現(xiàn)到避坑優(yōu)化的完整閉環(huán)。2. 配準(zhǔn)算法的核心思路與方案選型圖像配準(zhǔn)的本質(zhì)是求解一個(gè)最優(yōu)的空間變換模型。對(duì)于紅外與可見(jiàn)光圖像由于其成像機(jī)理截然不同——可見(jiàn)光反映物體表面的反射特性而紅外反映物體的輻射溫度——導(dǎo)致兩幅圖像在灰度、紋理、邊緣等特征上存在顯著差異這給基于灰度或特征的經(jīng)典配準(zhǔn)方法帶來(lái)了巨大挑戰(zhàn)。2.1 算法流程總覽與設(shè)計(jì)考量一個(gè)魯棒的紅外與可見(jiàn)光配準(zhǔn)算法通常遵循“特征提取 - 特征匹配 - 變換模型估計(jì) - 圖像重采樣”的 pipeline。我們的MATLAB實(shí)現(xiàn)也將圍繞這個(gè)主線展開(kāi)。為什么選擇這個(gè)流程因?yàn)橹苯舆M(jìn)行像素級(jí)的灰度匹配如互信息法在特征差異巨大的圖像對(duì)上效果很差而基于特征的方法則提供了更高層次的、對(duì)成像差異相對(duì)不敏感的“錨點(diǎn)”。在設(shè)計(jì)時(shí)我主要考量了以下幾點(diǎn)特征不變性提取的特征應(yīng)對(duì)光照變化紅外與可見(jiàn)光的根本差異、尺度變化和一定程度的旋轉(zhuǎn)具有穩(wěn)定性。匹配魯棒性由于噪聲和特征差異誤匹配Outliers必然大量存在算法必須能有效剔除它們。模型適應(yīng)性根據(jù)圖像對(duì)的形變類型剛性、仿射、投影選擇合適的變換模型在精度和復(fù)雜度間取得平衡。MATLAB實(shí)現(xiàn)效率充分利用MATLAB向量化運(yùn)算優(yōu)勢(shì)避免低效的循環(huán)同時(shí)對(duì)關(guān)鍵步驟如特征匹配可能需要的自定義函數(shù)保持開(kāi)放?;谶@些考量我選擇了以SIFT尺度不變特征變換特征為主干結(jié)合RANSAC隨機(jī)抽樣一致算法進(jìn)行魯棒匹配的方案。SIFT特征對(duì)旋轉(zhuǎn)、尺度縮放、亮度變化保持不變性對(duì)視角變化、仿射變換也保持一定程度的穩(wěn)定性非常適合多模態(tài)圖像。RANSAC則能從包含大量誤匹配的特征點(diǎn)對(duì)中魯棒地估計(jì)出正確的變換模型參數(shù)。2.2 關(guān)鍵工具與函數(shù)庫(kù)準(zhǔn)備在MATLAB中實(shí)現(xiàn)我們并非從零開(kāi)始造輪子。合理利用內(nèi)置函數(shù)和工具箱能事半功倍。核心依賴如下Image Processing Toolbox這是基礎(chǔ)用于圖像的讀寫(xiě)、顯示、基本濾波和幾何變換。Computer Vision Toolbox這是核心提供了detectSIFTFeatures,extractFeatures,matchFeatures等一站式特征處理函數(shù)以及estimateGeometricTransform2D函數(shù)內(nèi)部集成了RANSAC。Statistics and Machine Learning Toolbox某些自定義的評(píng)估指標(biāo)或后處理可能會(huì)用到。如果你的MATLAB沒(méi)有安裝這些工具箱可以通過(guò)主頁(yè)的“附加功能”管理器進(jìn)行添加。這是項(xiàng)目能跑起來(lái)的前提。注意不同版本的MATLAB特別是R2020b之后計(jì)算機(jī)視覺(jué)工具箱的函數(shù)名和用法可能有細(xì)微調(diào)整。例如更早的版本可能使用detectSURFFeatures然后提取SIFT描述子而新版本直接提供了detectSIFTFeatures。編寫(xiě)代碼時(shí)務(wù)必查閱對(duì)應(yīng)版本的官方文檔。3. 核心步驟拆解與MATLAB實(shí)現(xiàn)詳解接下來(lái)我們進(jìn)入實(shí)戰(zhàn)環(huán)節(jié)。我將用一個(gè)示例圖像對(duì)一幅可見(jiàn)光圖像visible.jpg和一幅紅外圖像infrared.jpg來(lái)逐步演示。請(qǐng)確保這兩幅圖像已經(jīng)過(guò)初步的預(yù)處理比如裁剪掉無(wú)關(guān)的邊框并大致對(duì)齊初始偏移不要過(guò)大。3.1 特征提取尋找穩(wěn)定的“關(guān)鍵點(diǎn)”特征提取是配準(zhǔn)的基石。我們使用SIFT算法來(lái)找到兩幅圖像中那些無(wú)論成像方式如何變化都能被穩(wěn)定檢測(cè)到的位置。% 步驟1: 讀取圖像 img_visible imread(visible.jpg); img_infrared imread(infrared.jpg); % 轉(zhuǎn)換為灰度圖如果原是彩色 if size(img_visible, 3) 3 gray_visible rgb2gray(img_visible); else gray_visible img_visible; end if size(img_infrared, 3) 3 gray_infrared rgb2gray(img_infrared); else gray_infrared img_infrared; end % 步驟2: 檢測(cè)SIFT特征點(diǎn) % ‘MetricThreshold’ 控制檢測(cè)點(diǎn)的數(shù)量值越大點(diǎn)越少但越穩(wěn)定 points_visible detectSIFTFeatures(gray_visible, MetricThreshold, 10.0); points_infrared detectSIFTFeatures(gray_infrared, MetricThreshold, 10.0); % 可視化特征點(diǎn) figure; subplot(1,2,1); imshow(gray_visible); hold on; plot(points_visible.selectStrongest(50)); % 只畫(huà)最強(qiáng)的50個(gè)點(diǎn) title(可見(jiàn)光圖像SIFT特征點(diǎn)); subplot(1,2,2); imshow(gray_infrared); hold on; plot(points_infrared.selectStrongest(50)); title(紅外圖像SIFT特征點(diǎn));參數(shù)解讀與調(diào)優(yōu)心得‘MetricThreshold’這是SIFT檢測(cè)器的對(duì)比度閾值。紅外圖像往往對(duì)比度低、邊緣模糊適當(dāng)降低此閾值如從默認(rèn)值調(diào)到5.0可以提取到更多特征點(diǎn)但噪聲點(diǎn)也會(huì)增多。需要根據(jù)圖像質(zhì)量權(quán)衡。我的經(jīng)驗(yàn)是先在可見(jiàn)光圖像上用一個(gè)較高的閾值如10.0獲取穩(wěn)定點(diǎn)在紅外圖像上嘗試稍低的閾值如8.0。selectStrongest(N)用于可視化避免畫(huà)面被過(guò)多的點(diǎn)淹沒(méi)。實(shí)際匹配時(shí)使用全部點(diǎn)。3.2 特征描述與匹配建立點(diǎn)對(duì)點(diǎn)關(guān)聯(lián)檢測(cè)到點(diǎn)后需要為每個(gè)點(diǎn)計(jì)算一個(gè)描述子一個(gè)高維向量表征該點(diǎn)周圍的紋理信息然后通過(guò)比較描述子之間的相似度來(lái)進(jìn)行匹配。% 步驟3: 提取特征描述子 [features_visible, valid_points_vis] extractFeatures(gray_visible, points_visible); [features_infrared, valid_points_ir] extractFeatures(gray_infrared, points_infrared); % 步驟4: 匹配特征 % ‘MatchThreshold’ 和 ‘MaxRatio’ 是控制匹配嚴(yán)格度的關(guān)鍵參數(shù) index_pairs matchFeatures(features_visible, features_infrared, ... MatchThreshold, 80.0, ... % 默認(rèn)100越小越嚴(yán)格 MaxRatio, 0.6); % 最近鄰與次近鄰距離之比越小越嚴(yán)格 matched_points_vis valid_points_vis(index_pairs(:, 1)); matched_points_ir valid_points_ir(index_pairs(:, 2)); % 可視化初始匹配通常包含大量誤匹配 figure; showMatchedFeatures(gray_visible, gray_infrared, matched_points_vis, matched_points_ir, montage); title(初始特征匹配含大量誤匹配);匹配參數(shù)的雙刃劍‘MatchThreshold’描述子距離的百分比閾值。SIFT描述子通常用歐氏距離衡量相似度。閾值設(shè)為80意味著只接受距離小于最大可能距離80%的匹配。對(duì)于差異大的圖像需要放寬此閾值增大數(shù)值以獲得足夠多的候選匹配但誤匹配也會(huì)激增。‘MaxRatio’這是Lowe’s ratio test的參數(shù)是剔除誤匹配的第一道也是最重要的關(guān)卡。原理是正確的匹配點(diǎn)其最佳匹配描述子的距離應(yīng)該遠(yuǎn)遠(yuǎn)小于次佳匹配的距離。通常取0.6-0.8。我強(qiáng)烈建議將其設(shè)為0.6或更小這能極大提高進(jìn)入下一步的匹配點(diǎn)對(duì)的質(zhì)量為后續(xù)RANSAC減輕負(fù)擔(dān)。3.3 變換模型估計(jì)與魯棒擬合RANSAC的魔力上一步得到的匹配對(duì)里混入了很多“騙子”誤匹配。RANSAC的任務(wù)就是找出一個(gè)最能滿足“內(nèi)點(diǎn)”正確匹配的幾何變換模型同時(shí)忽略“外點(diǎn)”誤匹配。% 步驟5: 使用RANSAC估計(jì)幾何變換 % ‘similarity’相似變換平移、旋轉(zhuǎn)、縮放適用于大多數(shù)剛性場(chǎng)景 % ‘a(chǎn)ffine’仿射變換在相似基礎(chǔ)上增加剪切適用于視角有輕微變化 % ‘projective’投影變換適用于視角變化很大但這里慎用容易過(guò)擬合 [tform, inlier_idx, status] estimateGeometricTransform2D(... matched_points_ir, ... % 輸入點(diǎn)源這里是紅外圖點(diǎn) matched_points_vis, ... % 對(duì)應(yīng)點(diǎn)目標(biāo)這里是可見(jiàn)光圖點(diǎn) similarity, ... MaxNumTrials, 2000, ... % RANSAC最大迭代次數(shù) Confidence, 99.0, ... % 置信度 MaxDistance, 1.5); % 內(nèi)點(diǎn)距離閾值像素 if status ~ 0 error(幾何變換估計(jì)失敗可能內(nèi)點(diǎn)太少。); end % 提取內(nèi)點(diǎn)正確的匹配對(duì) inlier_points_vis matched_points_vis(inlier_idx, :); inlier_points_ir matched_points_ir(inlier_idx, :); % 可視化經(jīng)過(guò)RANSAC凈化后的匹配 figure; showMatchedFeatures(gray_visible, gray_infrared, inlier_points_vis, inlier_points_ir, montage); title(RANSAC優(yōu)化后的匹配內(nèi)點(diǎn)); fprintf(找到 %d 個(gè)內(nèi)點(diǎn)占總匹配數(shù)的 %.2f%%\n, ... length(inlier_idx), length(inlier_idx)/length(index_pairs)*100);RANSAC參數(shù)調(diào)優(yōu)實(shí)錄‘MaxDistance’這是判斷一個(gè)點(diǎn)是否為內(nèi)點(diǎn)的距離閾值單位像素。它定義了“多好的匹配才算好”。如果圖像分辨率高或特征點(diǎn)定位準(zhǔn)可以設(shè)小一點(diǎn)如1.0如果圖像模糊或差異大需要放寬如2.0-3.0。這是一個(gè)需要反復(fù)試驗(yàn)的關(guān)鍵參數(shù)。我的技巧是先用默認(rèn)值跑一次觀察內(nèi)點(diǎn)比例和內(nèi)點(diǎn)在圖上的分布是否合理再進(jìn)行調(diào)整。‘MaxNumTrials’保證RANSAC能以高概率找到正確解所需的最大迭代次數(shù)。MATLAB會(huì)根據(jù)數(shù)據(jù)和內(nèi)點(diǎn)比例自動(dòng)計(jì)算一個(gè)值但手動(dòng)設(shè)置一個(gè)上限如2000-5000可以防止在極端情況下陷入過(guò)長(zhǎng)計(jì)算。通常自動(dòng)計(jì)算就足夠?!瓹onfidence’希望RANSAC找到的解是正確的概率。99%是常用值提高它會(huì)增加迭代次數(shù)。模型選擇從‘similarity’開(kāi)始嘗試。如果配準(zhǔn)后仍有明顯局部錯(cuò)位可能是存在非剛性形變可嘗試‘a(chǎn)ffine’。盡量不要一開(kāi)始就用‘projective’它需要更多、更準(zhǔn)確的內(nèi)點(diǎn)在誤匹配多時(shí)極易擬合出錯(cuò)誤的模型。3.4 圖像重采樣與融合完成最終對(duì)齊得到變換矩陣tform后最后一步就是將紅外圖像源圖像變換到可見(jiàn)光圖像參考圖像的坐標(biāo)系下。% 步驟6: 應(yīng)用幾何變換對(duì)齊紅外圖像到可見(jiàn)光圖像坐標(biāo)系 % ‘OutputView’ 設(shè)置為參考圖像的大小確保輸出圖像尺寸一致 output_size size(gray_visible); img_infrared_registered imwarp(img_infrared, tform, OutputView, imref2d(output_size)); % 步驟7: 可視化配準(zhǔn)結(jié)果可選圖像融合 % 簡(jiǎn)單加權(quán)融合 alpha 0.5; % 融合權(quán)重 fused_img imfuse(gray_visible, img_infrared_registered, blend, Scaling, joint); figure; subplot(2,2,1); imshow(gray_visible); title(參考圖像可見(jiàn)光); subplot(2,2,2); imshow(img_infrared); title(原始紅外圖像); subplot(2,2,3); imshow(img_infrared_registered); title(配準(zhǔn)后的紅外圖像); subplot(2,2,4); imshow(fused_img); title(融合圖像可見(jiàn)光紅外);重采樣的細(xì)節(jié)imwarp函數(shù)默認(rèn)使用線性插值。對(duì)于紅外圖像其灰度值代表溫度信息嚴(yán)格來(lái)說(shuō)線性插值會(huì)引入輕微誤差。但在視覺(jué)配準(zhǔn)中這種誤差通??梢越邮?。如果追求更高的數(shù)值精度可以考慮使用‘nearest’最近鄰插值但圖像邊緣會(huì)出現(xiàn)鋸齒?!甇utputView’參數(shù)非常關(guān)鍵。這里我們使用imref2d(output_size)將輸出圖像的坐標(biāo)系完全鎖定到參考圖像的大小和空間范圍這樣兩幅圖像才能像素一一對(duì)應(yīng)地進(jìn)行后續(xù)融合或分析。4. 性能提升與高級(jí)技巧探討基礎(chǔ)的SIFTRANSAC流程能解決大部分問(wèn)題但在面對(duì)極端場(chǎng)景如特征極少、非線性形變時(shí)我們需要更高級(jí)的策略。4.1 特征點(diǎn)不足或質(zhì)量差的應(yīng)對(duì)策略有時(shí)紅外圖像紋理極其匱乏如一片晴朗天空的熱圖像導(dǎo)致SIFT點(diǎn)寥寥無(wú)幾??梢試L試以下方法多特征融合不要只依賴SIFT??梢越Y(jié)合檢測(cè)邊緣的FAST角點(diǎn)或Harris角點(diǎn)。先用detectFASTFeatures或detectHarrisFeatures獲取更多的點(diǎn)再用SIFT或其它描述子如extractFeatures支持的‘BRISK’,‘FREAK’進(jìn)行描述。不同特征互補(bǔ)可能帶來(lái)驚喜。區(qū)域特征替代如果點(diǎn)特征實(shí)在不行可以考慮基于區(qū)域的特征如模板匹配normxcorr2函數(shù)或相位相關(guān)用于估計(jì)純平移。這在圖像只有全局平移時(shí)非常有效。深度學(xué)習(xí)特征雖然本項(xiàng)目是傳統(tǒng)方法但必須提及基于CNN的特征提取器如VGG, ResNet的中間層激活對(duì)多模態(tài)圖像具有更強(qiáng)的魯棒性??梢栽贛ATLAB中加載預(yù)訓(xùn)練的模型將圖像輸入網(wǎng)絡(luò)提取特定層的特征圖作為“描述子”進(jìn)行匹配。這代表了當(dāng)前的前沿方向。4.2 處理非剛性形變與優(yōu)化策略如果場(chǎng)景存在局部形變?nèi)畿囕d攝像頭拍攝的顛簸路面簡(jiǎn)單的全局仿射變換就不夠了。局部匹配與網(wǎng)格化可以將圖像劃分為多個(gè)網(wǎng)格在每個(gè)網(wǎng)格內(nèi)獨(dú)立進(jìn)行特征提取和匹配估計(jì)局部變換模型如移動(dòng)最小二乘法。這能處理復(fù)雜的非剛性形變但實(shí)現(xiàn)復(fù)雜度和計(jì)算量會(huì)大增。多分辨率金字塔策略這是提升配準(zhǔn)精度和魯棒性的經(jīng)典技巧。在完整分辨率圖像上直接匹配容易陷入局部最優(yōu)且速度慢。我們可以從低分辨率的圖像金字塔頂層開(kāi)始配準(zhǔn)得到一個(gè)粗略的變換參數(shù)然后作為初始值傳遞到下一層更高分辨率的圖像上繼續(xù)優(yōu)化。MATLAB的impyramid函數(shù)可以方便地構(gòu)建圖像金字塔。強(qiáng)烈建議在圖像尺寸較大或初始偏移可能較大時(shí)采用此方法它能顯著提高成功率和精度。后處理與優(yōu)化RANSAC之后得到的內(nèi)點(diǎn)集和變換模型可能還不是最優(yōu)的??梢允褂盟袃?nèi)點(diǎn)通過(guò)最小二乘法對(duì)變換模型參數(shù)進(jìn)行一次精優(yōu)化Refinement以得到統(tǒng)計(jì)意義上誤差最小的解。5. 實(shí)戰(zhàn)避坑指南與常見(jiàn)問(wèn)題排查在實(shí)際編碼和調(diào)試中你會(huì)遇到各種各樣的問(wèn)題。下面是我踩過(guò)坑后總結(jié)出的排查清單。5.1 配準(zhǔn)結(jié)果完全錯(cuò)亂癥狀融合圖像一片混亂或紅外圖像被變換到畫(huà)面外。排查步驟檢查特征點(diǎn)可視化運(yùn)行完3.1節(jié)后觀察兩幅圖像上的特征點(diǎn)是否大致分布在對(duì)應(yīng)的物理位置上如建筑物的角落、窗戶邊緣。如果特征點(diǎn)集中在完全不相關(guān)的區(qū)域如可見(jiàn)光是建筑紅外點(diǎn)卻全在天空說(shuō)明特征檢測(cè)步驟可能就失敗了需要調(diào)整‘MetricThreshold’或嘗試其他特征檢測(cè)器。檢查初始匹配運(yùn)行完3.2節(jié)后仔細(xì)看showMatchedFeatures顯示的連線。正確的匹配其連線應(yīng)該大致平行且長(zhǎng)度相近表示相似的位移。如果連線交叉、雜亂無(wú)章說(shuō)明‘MaxRatio’閾值太松誤匹配太多。立即收緊‘MaxRatio’到0.5或0.4。檢查RANSAC內(nèi)點(diǎn)運(yùn)行完3.3節(jié)后確認(rèn)內(nèi)點(diǎn)匹配圖是否干凈、正確。如果內(nèi)點(diǎn)數(shù)量極少比如少于5對(duì)estimateGeometricTransform2D可能會(huì)失敗或返回錯(cuò)誤模型。此時(shí)需要回到上一步通過(guò)放寬‘MatchThreshold’獲取更多初始匹配或者嘗試更簡(jiǎn)單的變換模型‘similarity’。檢查變換矩陣在命令窗口輸入tform.T查看變換矩陣。一個(gè)正常的相似變換矩陣應(yīng)接近以下形式[s*cosθ, -s*sinθ, tx; s*sinθ, s*cosθ, ty; 0, 0, 1]如果縮放因子s偏離1太遠(yuǎn)如0.1或10或旋轉(zhuǎn)角θ不合理都說(shuō)明模型估計(jì)錯(cuò)誤。交換參考圖像嘗試將紅外圖像作為參考去配準(zhǔn)可見(jiàn)光圖像。有時(shí)因?yàn)閳D像內(nèi)容差異一個(gè)方向比另一個(gè)方向更容易匹配。5.2 配準(zhǔn)存在微小錯(cuò)位鬼影癥狀整體對(duì)齊了但邊緣或某些物體有重影。原因與解決變換模型不匹配場(chǎng)景可能存在輕微的透視形變而‘similarity’模型無(wú)法描述。嘗試升級(jí)到‘a(chǎn)ffine’模型。插值誤差嘗試將imwarp的插值方法改為‘cubic’三次卷積看看邊緣是否更平滑。但注意 cubic 插值可能會(huì)使圖像略微變模糊。局部形變?nèi)绻e(cuò)位只發(fā)生在圖像局部那可能是場(chǎng)景本身或傳感器導(dǎo)致的非剛性形變。這就需要用到4.2節(jié)中提到的局部匹配或更高級(jí)的非剛性配準(zhǔn)算法了這超出了本文基礎(chǔ)篇的范圍。5.3 算法運(yùn)行速度慢瓶頸分析SIFT特征提取和匹配是主要耗時(shí)環(huán)節(jié)尤其是對(duì)于大圖像。加速策略降采樣在特征提取前先將圖像縮放至一個(gè)合理的尺寸如最長(zhǎng)邊800像素。配準(zhǔn)完成后將求得的變換矩陣參數(shù)按縮放比例進(jìn)行反向調(diào)整再應(yīng)用到原圖上。限制特征數(shù)量不要使用所有檢測(cè)到的特征點(diǎn)。用selectStrongest(N)方法只取響應(yīng)最強(qiáng)的N個(gè)點(diǎn)如500-1000個(gè)進(jìn)行匹配能在幾乎不損失精度的情況下大幅提速。使用更快的特征在要求實(shí)時(shí)性的場(chǎng)合可以考慮用ORB(Oriented FAST and Rotated BRIEF) 特征替代SIFT。ORB速度極快且具有旋轉(zhuǎn)不變性。MATLAB的detectORBFeatures和extractFeatures指定‘ORB’可以支持。5.4 MATLAB版本與函數(shù)兼容性問(wèn)題這是我遇到最多也最頭疼的問(wèn)題之一。不同版本的Computer Vision Toolbox函數(shù)接口可能變化。detectSIFTFeatures不可用如果你使用的是R2020a之前的版本可能沒(méi)有這個(gè)函數(shù)。替代方案是使用detectSURFFeatures檢測(cè)SURF特征點(diǎn)然后extractFeatures時(shí)指定‘SIFT’描述子extractFeatures(grayImage, points, ‘Method’, ‘SIFT’)。estimateGeometricTransform2D不可用在舊版本中這個(gè)函數(shù)可能叫estimateGeometricTransform。更早的版本甚至需要用fitgeotrans函數(shù)來(lái)擬合變換并用vision.GeometricTransformEstimator對(duì)象。務(wù)必在MathWorks官網(wǎng)查閱你所使用版本的函數(shù)文檔。坐標(biāo)系統(tǒng)差異注意imwarp等函數(shù)處理的坐標(biāo)系統(tǒng)。在MATLAB中圖像坐標(biāo)原點(diǎn)在左上角第一個(gè)軸x是水平向右第二個(gè)軸y是垂直向下。這與某些數(shù)學(xué)定義不同但在使用內(nèi)置函數(shù)時(shí)只要保持一致性就不會(huì)出錯(cuò)。最后分享一個(gè)我個(gè)人的調(diào)試習(xí)慣將每一個(gè)關(guān)鍵步驟的結(jié)果特征點(diǎn)圖、匹配圖、內(nèi)點(diǎn)圖、變換參數(shù)都保存下來(lái)或打印出來(lái)。建立一個(gè)獨(dú)立的測(cè)試腳本用一兩對(duì)已知有較好重疊部分的圖像反復(fù)調(diào)試參數(shù)記錄下哪組參數(shù)效果最好。形成自己的參數(shù)經(jīng)驗(yàn)庫(kù)后再應(yīng)用到大批量數(shù)據(jù)上你會(huì)發(fā)現(xiàn)自己已經(jīng)從“調(diào)參俠”變成了“算法醫(yī)生”能快速診斷并解決大部分配準(zhǔn)問(wèn)題。紅外與可見(jiàn)光配準(zhǔn)沒(méi)有一套放之四海而皆準(zhǔn)的參數(shù)理解原理、掌握工具、耐心調(diào)試才是通往成功的不二法門(mén)。本文還有配套的精品資源點(diǎn)擊獲取