資源簡介
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
評論
共有 條評論