-
大小: 4KB文件類型: .m金幣: 1下載: 1 次發(fā)布日期: 2021-05-10
- 語言: Matlab
- 標(biāo)簽: superresolut??
資源簡介
圖像仿射變換的超分辨率經(jīng)典程序
包括圖像的配準(zhǔn),重建等
代碼片段和文件信息
%?讀入兩幅圖象,找出他們的特征塊,然后進(jìn)行匹配,最后在各匹配塊之間連線以表示匹配情況
%?function?num?=?match(image1?image2)
function?angle=rotation(ab)
img1=uint8(a);
img2=uint8(b);
%?image1?=?im2double(image1);
%?H?=?fspecial(‘gaussian‘[3?3]1);?
%?image1?=?conv2(image1H‘same‘);
%?image1?=?imnoise(image1‘salt?&?pepper‘?0.02);
%?調(diào)用函數(shù)尋找每幅圖象的特征點(diǎn)以及特征塊.???
%?im?=?double(image)
%?des?特征描述符
%?loc?特征點(diǎn)坐標(biāo)、角度、尺度
[im1?des1?loc1]?=?sift(img1);?
[im2?des2?loc2]?=?sift(img2);
%?fprintf(‘matching...‘);
%兩個(gè)向量(a1a2a3...)(b1b2b3...)的距離,可以用歐基里德距離來計(jì)算:d=(a1-b1)^2+(a1-b1)^2+
%(a1-b1)^2+...也可以用d=acos(a1*b1+a2*b2+a3*b3)來計(jì)算,由于在MATLAB中后者的運(yùn)算速度要遠(yuǎn)遠(yuǎn)快于前者
%所以這里用后者來計(jì)算兩個(gè)特征向量之間的距離
%匹配時(shí),用圖象1里的一個(gè)向量和圖象2中的所有向量進(jìn)行匹配(即計(jì)算距離),那么有一個(gè)最佳匹配和一個(gè)次佳。distRatio表示
%次佳和最佳之間的比值,可以用來消除很大一部分的誤配,distRatio越大=最后匹配點(diǎn)越多(誤差越大),distRatio越小=最后
%匹配點(diǎn)越少(誤差越小),
distRatio?=?0.75;???
%下面進(jìn)行匹配
des2t?=?des2‘;??????????????????????????%?轉(zhuǎn)置
for?i?=?1:size(des11)
???dotprods?=?des1(i:)?*?des2t;????????%?計(jì)算圖象1中的一個(gè)向量和圖象2中所有向量的距離,并進(jìn)行排序
???[valsindx]?=?sort(acos(dotprods));???
???%?如果最小距離小于次小距離的distRatio倍,則認(rèn)為匹配成功.
???if?(vals(1)?0.15)?&&?(vals(1)???????match1(i)?=?indx(1);?????%匹配標(biāo)記match1(i)>0表示此處匹配
???else
??????match1(i)?=?0;
???end
end
%利用歐基里德距離計(jì)算,速度要慢很多
%?distRatio?=?0.6;?
%?for?i?=?1?:?size(des11)
%?????error1?=?[];
%?????for?j?=?1?:?size(des21)
%?????????error1?=?[error1?sum(abs(des1(i:)?-?des2(j:)))];
%?????end
%?????[valsindx]?=?sort(error1);
%?????if?(vals(1)?%?????????match1(i)?=?indx(1);
%?????else
%??????????match1(i)?=?0;
%?????end
%?end
%?將2幅圖象按一左一右放置.
%im3?=?appendimages(im1im2);
%?顯示圖象匹配點(diǎn)之間的連線.其實(shí)這一步可以到最后面再做,因?yàn)橄旅孢€要先進(jìn)行誤配點(diǎn)的剔除,但是既然寫在這里了,我就懶的改了,哈哈
%figure(‘Position‘?[100?100?size(im32)?size(im31)]);
%colormap(‘gray‘);
%imagesc(im3);
%hold?on;
cols1?=?size(im12);
j?=?1;
for?i?=?1:?size(des11)
??if?(m
評論
共有 條評論