• 大小: 4KB
    文件类型: .m
    金币: 2
    下载: 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) < distRatio * vals(2))
      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) < distRatio * vals(2))
%         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

评论

共有 条评论