-
大小: 4KB文件類型: .m金幣: 1下載: 1 次發布日期: 2021-05-10
- 語言: Matlab
- 標簽: superresolut??
資源簡介
圖像仿射變換的超分辨率經典程序
包括圖像的配準,重建等
代碼片段和文件信息
%?讀入兩幅圖象,找出他們的特征塊,然后進行匹配,最后在各匹配塊之間連線以表示匹配情況
%?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);
%?調用函數尋找每幅圖象的特征點以及特征塊.???
%?im?=?double(image)
%?des?特征描述符
%?loc?特征點坐標、角度、尺度
[im1?des1?loc1]?=?sift(img1);?
[im2?des2?loc2]?=?sift(img2);
%?fprintf(‘matching...‘);
%兩個向量(a1a2a3...)(b1b2b3...)的距離,可以用歐基里德距離來計算:d=(a1-b1)^2+(a1-b1)^2+
%(a1-b1)^2+...也可以用d=acos(a1*b1+a2*b2+a3*b3)來計算,由于在MATLAB中后者的運算速度要遠遠快于前者
%所以這里用后者來計算兩個特征向量之間的距離
%匹配時,用圖象1里的一個向量和圖象2中的所有向量進行匹配(即計算距離),那么有一個最佳匹配和一個次佳。distRatio表示
%次佳和最佳之間的比值,可以用來消除很大一部分的誤配,distRatio越大=最后匹配點越多(誤差越大),distRatio越小=最后
%匹配點越少(誤差越小),
distRatio?=?0.75;???
%下面進行匹配
des2t?=?des2‘;??????????????????????????%?轉置
for?i?=?1:size(des11)
???dotprods?=?des1(i:)?*?des2t;????????%?計算圖象1中的一個向量和圖象2中所有向量的距離,并進行排序
???[valsindx]?=?sort(acos(dotprods));???
???%?如果最小距離小于次小距離的distRatio倍,則認為匹配成功.
???if?(vals(1)?0.15)?&&?(vals(1)???????match1(i)?=?indx(1);?????%匹配標記match1(i)>0表示此處匹配
???else
??????match1(i)?=?0;
???end
end
%利用歐基里德距離計算,速度要慢很多
%?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);
%?顯示圖象匹配點之間的連線.其實這一步可以到最后面再做,因為下面還要先進行誤配點的剔除,但是既然寫在這里了,我就懶的改了,哈哈
%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
評論
共有 條評論