1.演算法執行效果圖預覽
(完整程式執行後無水印)
SIFT:
surf:
kaze:
2.演算法執行軟體版本
MATLAB2022a
3.部分核心程式
(完整版程式碼包含註釋和操作步驟影片)
img1 = imread('Images\F1.jpg'); img2 = imread('Images\F2.jpg'); figure; subplot(121); imshow(img1); title('原始圖片1'); subplot(122); imshow(img2); title('原始圖片2'); SCALE = 4; Threshold = 0.00004; [F1,Vp1] = extractFeatures(rgb2gray(img1),detectKAZEFeatures(rgb2gray(img1),'Threshold',Threshold, 'NumOctaves',3,'NumScaleLevels',SCALE)); [F2,Vp2] = extractFeatures(rgb2gray(img2),detectKAZEFeatures(rgb2gray(img2),'Threshold',Threshold, 'NumOctaves',3,'NumScaleLevels',SCALE)); indexPairs = matchFeatures(F1,F2); P1 = Vp1(indexPairs(:,1)); P2 = Vp2(indexPairs(:,2)); matchLoc1 = P1.Location; matchLoc2 = P2.Location; img3 = func_appendimages(img1,img2); figure; subplot(211); colormap('gray'); imagesc(img3); subplot(212); colormap('gray'); imagesc(img3); hold on; cols1 = size(img1,2); for i = 1: size(matchLoc1,1) if mod(i,1/Ratios)==1 line([matchLoc1(i,1) matchLoc2(i,1)+cols1], ... [matchLoc1(i,2) matchLoc2(i,2)], 'Color', 'g'); end end title('KAZE匹配效果'); %圖片拼接 imgout = func_pj(matchLoc1,matchLoc2,img1,img2); figure; imshow(imgout); title('拼接結果');
4.演算法理論概述
在織物瑕疵的檢測過程中,由於織物影像資訊是由多個攝像頭採集得到的,因此需要將多個織物圖片進行拼接得到一個完整的織物影像。織物影像拼接技術其首先透過影像匹配演算法找到不同影像重疊區域的特徵點座標,然後進行影像的配準處理並得到一個全域性的織物影像資訊。在完成影像拼接之後,透過織物瑕疵檢測演算法檢測出織物中的瑕疵,並透過分類演算法將檢測到的織物瑕疵進行分類。
4.1 SIFT (Scale-Invariant Feature Transform)
SIFT演算法是由David Lowe提出的,它能夠在不同尺度和旋轉下保持不變性。SIFT的關鍵點檢測基於尺度空間理論。
關鍵點檢測:
尺度空間構建: 透過高斯卷積核對輸入影像進行卷積,得到一系列不同尺度的空間影像。
關鍵點定位: 在尺度空間中尋找極值點作為關鍵點候選。
關鍵點精確定位: 對候選點進行二次擬合,以獲得更加精確的位置。
關鍵點篩選: 根據對比度閾值和邊緣響應去除不穩定的關鍵點。
關鍵點描述:
方向賦值: 計算關鍵點鄰域內畫素梯度的方向直方圖。
特徵描述子: 選取關鍵點周圍一定範圍內的畫素點,將其梯度方向量化後構成描述子。
4.2 SURF (Speeded Up Robust Features)
SURF是SIFT的一個快速版本,旨在提高速度的同時保持魯棒性。
關鍵點檢測:
Hessian矩陣近似: 使用Box濾波器近似二階導數。
極值檢測: 在尺度空間中尋找Hessian矩陣的極值點。
關鍵點定位: 類似SIFT,但使用Box濾波器代替高斯濾波器。
關鍵點描述:
方向賦值: 使用與SIFT相似的方式。
特徵描述子: 在關鍵點鄰域內選取矩形區域,計算這些區域的和作為描述子。
4.3 KAZE (Key-point Affine-Zernike descriptors)
KAZE演算法是一種更為先進的特徵檢測與描述方法,它使用非線性擴散濾波器來構建尺度空間。
關鍵點檢測:
尺度空間構建: 使用非線性擴散方程。
關鍵點定位: 尋找尺度空間中的極值點。
關鍵點精確定位: 類似SIFT,但使用非線性擴散方程。
關鍵點描述:
方向賦值: 使用與SIFT相似的方式。
特徵描述子: 採用Zernike多項式描述子。