-
大小: 3.43MB文件類(lèi)型: .rar金幣: 2下載: 0 次發(fā)布日期: 2023-09-09
- 語(yǔ)言: Matlab
- 標(biāo)簽:
資源簡(jiǎn)介
SIFT代碼實(shí)現(xiàn)。本代碼是通過(guò)Matlab實(shí)現(xiàn)了SIFT。可以作為理解SIFT原理以及把握過(guò)程細(xì)節(jié)的參考。與博文《SIFT代碼V1版本(Matlab)實(shí)現(xiàn)以及思考的問(wèn)題》配套。

代碼片段和文件信息
function?[flagbool?kpt]?=?adjustExtrPoint(Dogpyrgausspyroctlay1r1c1)
global?layers;
global?edgegama;?%是否是物體邊緣判斷的gamma系數(shù)
global?SIFT_STEP;?%迭代步數(shù)
global?IterationMax;?%相差一個(gè)較大值
global?ExtrThreshold;?%極值點(diǎn)穩(wěn)定判斷
global?SIFT_Img_Border;?%圖片邊界去掉SIFT_Img_Border-1個(gè)像素點(diǎn)
flagbool?=?0;
kpt?=?[];
lay?=?lay1;r?=?r1;c?=?c1;??%這三個(gè)位置信息是會(huì)適當(dāng)調(diào)整的?但是oct是不會(huì)調(diào)整的
for?step?=?1:1:SIFT_STEP??%循環(huán)次數(shù)
????cub_pre?=?Dogpyr{oct}(r-1:r+1c-1:c+1lay-1);
????cub_at?=?Dogpyr{oct}(r-1:r+1c-1:c+1lay);
????cub_next?=?Dogpyr{oct}(r-1:r+1c-1:c+1lay+1);
????dx?=?1/2?*?(?cub_at(23)-cub_at(21)?);
????dy?=?1/2?*?(?cub_at(32)-cub_at(12)?);
????ds?=?1/2?*?(?cub_next(22)-cub_pre(22)?);
????Dx?=?[dx;dy;ds];
????atv2?=?cub_at(22)*2;
????dxx?=?(cub_at(23)+cub_at(21)-atv2);
????dyy?=?(cub_at(32)+cub_at(12)-atv2);
????dss?=?(cub_next(22)+cub_pre(22)-atv2);
????dxy?=?(cub_at(33)+cub_at(11)-cub_at(31)-cub_at(13))/4;
????dxs?=?(cub_next(23)-cub_next(21)-cub_pre(23)+cub_pre(21))/4;
????dys?=?(cub_next(32)-cub_next(12)-cub_pre(32)+cub_pre(12))/4;
????H?=?[dxx?dxy?dxs;?...
????????dxy?dyy?dys;?...
????????dxs?dys?dss];
????Det?=?-inv(H)*Dx;
????dr?=?Det(1);?dc?=?Det(2);?di?=?Det(3);
????if?abs(dr)<0.5?&&?abs(dc)<0.5?&&?abs(di)<0.5
????????flagbool?=?1;
????????break;
????end
????if?abs(dr)>IterationMax?||?abs(dc)>IterationMax?||?abs(di)>IterationMax
????????flagbool?=?0;
????????break;
????end
????lay?=?round(lay+di);?r?=?round(r+dr);?c?=?round(c+dc);
????%同一組內(nèi)的圖片像素?cái)?shù)量相同,所以取第1層。不能用lay層(程序運(yùn)行過(guò)程中round(lay+di)可能非合理區(qū))
????[rows?cols]?=?size(Dogpyr{oct}(::1));??
????%?極值點(diǎn)最多只能在Dog塔中的第2至s+1層尋找(上下都要有比較層)
????if?lay<2?||?lay?>layers+1?||?...
????????????rrows-SIFT_Img_Border+1?||?...
????????????ccols-SIFT_Img_Border+1
????????flagbool?=?0;
????????break;
????end
end
%結(jié)束for循環(huán),如果找到了極值點(diǎn)flagbool?==?1
%%
%也只有迭代步數(shù)小于預(yù)設(shè)值且abs(dr)<0.5?&&?abs(dc)<0.5?&&?abs(di)<0.5時(shí)
%才會(huì)進(jìn)入下面的if條件,因此下面的代碼可以放到上面的“flagbool?=?1;”語(yǔ)句前
if?flagbool?==?1
????fx?=?Dogpyr{oct}(rclay)+1/2*Dx‘*Det;
????laymax?=?max(max(Dogpyr{oct}(::lay)));
????laymin?=?min(min(Dogpyr{oct}(::lay)));
????stable?=?ExtrThreshold*max(?abs(laymax)abs(laymin)?);
????if?abs(fx)?????????flagbool?=?0;
????end
????%?計(jì)算Hessian矩陣,與OpenCV中不同的是通過(guò)gausspyr求Hessian矩陣
????%?我認(rèn)為邊界應(yīng)該對(duì)圖像本身來(lái)說(shuō),同時(shí)Dog本來(lái)就是差分再繼續(xù)差分,即高階差分其失真是非常大的
????%?具體操作中Dog極值點(diǎn)對(duì)應(yīng)高斯塔的被減層(因?yàn)镈og是Log的被減層的拉普拉斯差分的近似)。
????%?并且為了防止偏差,將極值點(diǎn)周?chē)艂€(gè)點(diǎn)都判斷是不是落在邊界上
????for?rh?=?r-1:1:r+1
????????for?ch?=?c-1:1:c+1
%?????for?rh?=?r
%?????????for?ch?=?c
????????????Hcub?=?gausspyr{oct}(rh-1:rh+1ch-1:ch+1lay);
????????????Hxx?=?Hcub(23)+Hcub(21)-2*Hcub(22);
????????????Hyy?=?Hcub(32)+Hcub(12)-2*Hcub(22);
????????????Hxy?=?(Hcub(33)+Hcub(11)-Hcub(13)-Hcub(31))/4;
????????????tr?=?Hxx+Hyy;
????????????Hdet?=?Hxx*Hyy-Hxy*Hxy;
????????????if?Hdet?<=0?||?tr*tr/Hdet?>=?(edgegama+1)*(edgegama+1)/edgegama
????????????????flagbool?=?0;
????????????end
????????end
????end
end
%%??極值點(diǎn)迭代精確定位穩(wěn)定,且不屬于邊界等條件滿(mǎn)足時(shí)
if??flagbool?==?1
????kpt?=?[oct?lay?r?c?di?dr?dc];
?屬性????????????大小?????日期????時(shí)間???名稱(chēng)
-----------?---------??----------?-----??----
?????文件???????3404??2018-04-01?21:06??SIFT_Yhb?-?備份1\adjustExtrPoint.m
?????文件???????1221??2018-04-06?00:16??SIFT_Yhb?-?備份1\affinity.m
?????文件????????925??2018-04-05?23:50??SIFT_Yhb?-?備份1\affinity1.m
?????文件????????479??2018-04-05?10:24??SIFT_Yhb?-?備份1\appendimages.m
?????文件???????1110??2018-03-31?16:03??SIFT_Yhb?-?備份1\buildDogpyr.m
?????文件???????1398??2018-03-30?22:11??SIFT_Yhb?-?備份1\buildgausspyr.m
?????文件???????4178??2018-04-04?11:24??SIFT_Yhb?-?備份1\calcDesc
?????文件???????2575??2018-04-06?08:49??SIFT_Yhb?-?備份1\Define.m
?????文件?????104330??2018-04-06?10:32??SIFT_Yhb?-?備份1\DIPbook1.png
?????文件?????104810??2018-04-06?10:35??SIFT_Yhb?-?備份1\DIPbook2.png
?????文件????3362562??2018-04-06?10:50??SIFT_Yhb?-?備份1\DIP_放大一倍匹配結(jié)果.fig
?????文件???????2956??2018-04-01?20:13??SIFT_Yhb?-?備份1\findExtrma.m
?????文件???????1300??2018-04-06?00:13??SIFT_Yhb?-?備份1\lins.m
?????文件???????1749??2018-04-06?10:37??SIFT_Yhb?-?備份1\match_yhb.m
?????文件??????35923??2018-04-01?21:16??SIFT_Yhb?-?備份1\matrix.png
?????文件???????2212??2018-04-01?17:14??SIFT_Yhb?-?備份1\oritHist.m
?????文件???????1226??2018-04-05?11:10??SIFT_Yhb?-?備份1\SIFT_yhb.m
?????文件????????903??2018-03-30?08:50??SIFT_Yhb?-?備份1\sigma_num.m
?????文件??????79769??2018-04-06?11:04??SIFT_Yhb?-?備份1\人工查看正確率.png
?????文件???????1714??2018-04-06?11:57??SIFT_Yhb?-?備份1\綜述.txt
?????目錄??????????0??2018-04-06?11:59??SIFT_Yhb?-?備份1
-----------?---------??----------?-----??----
??????????????3714744????????????????????21
評(píng)論
共有 條評(píng)論