• 大小: 27KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-17
  • 语言: Matlab
  • 标签: Harris算子  

资源简介

Harris算子 Matlab源代码 直接可以运行

资源截图

代码片段和文件信息

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%   Harris角点提取算法                                          %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear;
%filename=‘487_r.png‘;
%X= imread(‘Circle.bmp‘);     % 读取图像
X= imread(‘001.jpg‘);     % 读取图像
%imshow(X);
%Info=imfinfo(filename);
% if Info.BitDepth>8
%     f=rgb2gray(X);
f=X;
%end
%
% fx = [5 0 -5;8 0 -8;5 0 -5];          % 高斯函数一阶微分,x方向(用于改进的Harris角点提取算法)
ori_im=double(f)/255;                   %unit8转化为64为双精度double64
fx = [-2 -1 0 1 2];                     % x方向梯度算子(用于Harris角点提取算法)
Ix = filter2(fxori_im);                % x方向滤波
% fy = [5 8 5;0 0 0;-5 -8 -5];          % 高斯函数一阶微分,y方向(用于改进的Harris角点提取算法)
fy = [-2;-1;0;1;2];                     % y方向梯度算子(用于Harris角点提取算法)
Iy = filter2(fyori_im);                % y方向滤波
Ix2 = Ix.^2;
Iy2 = Iy.^2;
Ixy = Ix.*Iy;
clear Ix;
clear Iy;

h= fspecial(‘gaussian‘[7 7]2);        % 产生7*7的高斯窗函数,sigma=2

Ix2 = filter2(hIx2);
Iy2 = filter2(hIy2);
Ixy = filter2(hIxy);

height = size(ori_im1);
width = size(ori_im2);
result = zeros(heightwidth);           % 纪录角点位置,角点处值为1

R = zeros(heightwidth);

Rmax = 0;                              % 图像中最大的R值
for i = 1:height
    for j = 1:width
        M = [Ix2(ij) Ixy(ij);Ixy(ij) Iy2(ij)];             % auto correlation matrix
        R(ij) = det(M)-0.06*(trace(M))^2;                     % 计算R
        if R(ij) > Rmax
            Rmax = R(ij);
        end;
    end;
end;

cnt = 0;
for i = 2:height-1
    for j = 2:width-1
        % 进行非极大抑制,窗口大小3*3
        if R(ij) > 0.01*Rmax && R(ij) > R(i-1j-1) && R(ij) > R(i-1j) && R(ij) > R(i-1j+1) && R(ij) > R(ij-1) && R(ij) > R(ij+1) && R(ij) > R(i+1j-1) && R(ij) > R(i+1j) && R(ij) > R(i+1j+1)
            result(ij) = 1;
            cnt = cnt+1;
        end;
    end;
end;

i=1;
    for j=1:height
        for k=1:width
            if result(jk)==1;
                corners1(i1)=j;
                corners1(i2)=k;
                i=i+1;
            end;
        end;
    end;

[posc posr] = find(result == 1);
cnt                                      % 角点个数
imshow(ori_im)
hold on;
plot(posrposc‘r+‘);
a=ginput(1);
b=ginput(1);
j=1;
for i=1:cnt
    if corners1(i1)>a(12) && corners1(i1)        if corners1(i2)>a(11) && corners1(i2)            B(j1)=corners1(i1);
            B(j2)=corners1(i2);
            j=j+1;
        end
    end
end
xlswrite(‘C:\Documents and Settings\ipsuser\桌面\Harris\ceshidata.xls‘B‘Sheet1‘‘C1‘);

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      26163  2010-01-21 19:35  001.jpg

     文件       2783  2011-01-08 21:53  HarrisJiaoDianJianCe.m

----------- ---------  ---------- -----  ----

                28946                    2


评论

共有 条评论