基于sift特征提取的图像配准算法matlab仿真
目錄
1.算法描述
2.仿真效果預(yù)覽
3.MATLAB核心程序
4.完整MATLAB
1.算法描述
? ? ?SIFT 是一種從圖像中提取獨(dú)特不變特征的方法,其特點(diǎn)為基于圖像的一些局部特征,而與圖像整體的大小和旋轉(zhuǎn)無(wú)關(guān)。并且該方法對(duì)于光照、噪聲、仿射變換具有一定魯棒性,同時(shí)能生成大量的特征點(diǎn)。SIFT (Scale-invariant feature transform), 尺度不變特征轉(zhuǎn)換,是一種圖像局部特征提取算法,它通過(guò)在不同的尺度空間中尋找極值點(diǎn)(特征點(diǎn),關(guān)鍵點(diǎn))的精確定位和主方向,構(gòu)建關(guān)鍵點(diǎn)描述符來(lái)提取特征。
? ? ? ?SIFT提取的關(guān)鍵點(diǎn)具有尺度不變性、旋轉(zhuǎn)不變性,而且不會(huì)因光照、仿射變換和噪音等因素而干擾。SIFT所查找到的關(guān)鍵點(diǎn)是一些十分突出、不會(huì)因光照、仿射變換和噪音等因素而變化的點(diǎn),如角點(diǎn)、邊緣點(diǎn)、暗區(qū)的亮點(diǎn)及亮區(qū)的暗點(diǎn)等。
1. SIFT特征是圖像的局部特征,其對(duì)旋轉(zhuǎn)、尺度縮放、亮度變化保持不變性,對(duì)視角變化、仿射變換、噪聲也保持一定程度的穩(wěn)定性;
2. 獨(dú)特性(Distinctiveness)好,信息量豐富,適用于在海量特征數(shù)據(jù)庫(kù)中進(jìn)行快速、準(zhǔn)確的匹配;
3. 多量性,即使少數(shù)的幾個(gè)物體也可以產(chǎn)生大量的SIFT特征向量;
4. 高速性,經(jīng)優(yōu)化的SIFT匹配算法甚至可以達(dá)到實(shí)時(shí)的要求;
5. 可擴(kuò)展性,可以很方便的與其他形式的特征向量進(jìn)行聯(lián)合。
2.仿真效果預(yù)覽
matlab2022a仿真結(jié)果如下:
3.MATLAB核心程序
....................................frames = [] ; descriptors = [] ;% % 開(kāi)始工作 % fprintf('---------------------------- 開(kāi)始 SIFT: 從圖像中提取SIFT特征 ------------------------------\n') ; tic ; fprintf('SIFT: 用DoG構(gòu)造尺度空間 ...\n') ; tic ; scalespace = do_gaussian(I,sigmaN,O,S,omin,-1,S+1,sigma0) ;fprintf(' 高斯尺度空間計(jì)時(shí): (%.3f s)\n',toc) ; tic ; difofg = do_diffofg(scalespace) ;fprintf(' 構(gòu)建相減尺度空間: (%.3f s)\n',toc) ;for o=1:scalespace.Ofprintf('CS5240 -- SIFT: 計(jì)算 “組” %d\n', o-1+omin) ;tic ;% DOG octave 的局部極值檢測(cè)oframes1 = do_localmax( difofg.octave{o}, 0.8*thresh, difofg.smin ) ;oframes2 = do_localmax( -difofg.octave{o}, 0.8*thresh, difofg.smin ) ;oframes = [oframes1 ,oframes2 ] ; fprintf('CS5240 -- SIFT: 初始化關(guān)鍵點(diǎn) # %d. \n', ...size(oframes, 2)) ;fprintf(' 用時(shí) (%.3f s)\n', ...toc) ;tic ;if size(oframes, 2) == 0continue;end% 移除靠近邊界的關(guān)鍵點(diǎn)rad = magnif * scalespace.sigma0 * 2.^(oframes(3,:)/scalespace.S) * NBP / 2 ;sel=find(...oframes(1,:)-rad >= 1 & ...oframes(1,:)+rad <= size(scalespace.octave{o},2) & ...oframes(2,:)-rad >= 1 & ...oframes(2,:)+rad <= size(scalespace.octave{o},1) ) ;oframes=oframes(:,sel) ;%把不是靠近邊界點(diǎn)的極值點(diǎn)重新放入oframes中fprintf('CS5240 -- SIFT: 移除靠近邊界關(guān)鍵點(diǎn)后 # %d \n', size(oframes,2)) ;tic ;% 精簡(jiǎn)局部, 閾值強(qiáng)度 和移除邊緣關(guān)鍵點(diǎn)oframes = do_extrefine(...oframes, ...difofg.octave{o}, ...difofg.smin, ...thresh, ...r) ;fprintf('CS5240 -- SIFT: 移除低對(duì)比度和邊緣上關(guān)鍵點(diǎn)后 # %d \n',size(oframes,2)) ;fprintf(' Time (%.3f s)\n', toc) ;tic ;fprintf('CS5240 -- SIFT: 計(jì)算特征點(diǎn)方向\n');% 計(jì)算方向oframes = do_orientation(...oframes, ...scalespace.octave{o}, ...scalespace.S, ...scalespace.smin, ...scalespace.sigma0 ) ;fprintf(' 用時(shí): (%.3f s)\n', toc);tic;% Store framesx = 2^(o-1+scalespace.omin) * oframes(1,:) ;y = 2^(o-1+scalespace.omin) * oframes(2,:) ;sigma = 2^(o-1+scalespace.omin) * scalespace.sigma0 * 2.^(oframes(3,:)/scalespace.S) ; %圖像的尺度 frames = [frames, [x(:)' ; y(:)' ; sigma(:)' ; oframes(4,:)] ] ;fprintf('CS5240 -- SIFT:計(jì)算方向后的特征點(diǎn) # %d \n', size(frames,2)) ;% Descriptorsfprintf('CS5240 -- SIFT: 計(jì)算 描述子...\n') ;tic ;........................................ A1544.完整MATLAB
V
總結(jié)
以上是生活随笔為你收集整理的基于sift特征提取的图像配准算法matlab仿真的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 使用 jsPDF- Autotable
- 下一篇: matlab获取选中的点_事件相关电位基