基于harris角点检测的特征点匹配程序(调试总是有问题)
function [match_points]=points_matching(I1,I2,c1,r1,c2,r2)
%I1,I2为读入的两幅图像;
%[r1,c1]第一幅图角点的坐标;[r2,c2]第二幅图的
%%%&cross-correlation: CC=(sum(sum(I1(x,y)*I2(x,y))))/(sqrt(sum(sumI1(x,y)))*sqrt(sum(sumI2(x,y))))
I1_s=I1.*I1;
I2_s=I2.*I2;
m1=size(c1,1);
m2=size(c2,1);
[C1,R1]=size(I1);
[C2,R2]=size(I2);
match=zeros(m1,2);
radius=20;
for i=1:m1
if c1(i)>radius&&c1(i)<C1-radius&&r1(i)>radius&&r1(i)<R1-radius
temp1=sum(sum(I1_s(r1(i):r1(i)+radius,c1(i):c1(i)+radius)));
temp1=sqrt(temp1);%sqrt(sum(sumI1(x,y)))
for j=1:m2
max=0;
if c2(j)>radius&&c2(j)<C2-radius&&r2(j)>radius&&r2(j)<R2-radius
temp2=sum(sum(I2_s(r2(j):r2(j)+radius,c2(j):c2(j)+radius)));
(每一次总是在这一步出错,说我超过矩阵大小)
temp2=sqrt(temp2);%sqrt(sum(sumI2(x,y)))
temp3=I1(r1(i):r1(i)+radius,c1(i):c1(i)+radius).*I2(r2(j):r2(j)+radius,c2(j):c2(j)+radius);
temp4=sum(sum(temp3));
CC=temp4/(temp1*temp2);
if CC>max
max=CC;
match(i,1)=i;
match(j,2)=j;
(match这样弄不知道对不对,就是想表示出一个角点它所对应的角点)
end
end
end
end
a=find(match(:,1)>0);
match_points=zeros(size(a),4);
for k=1:size(a)
match_points(k,:)=[r1(a(k)),c1(a(k)),r2(a(k)),c2(a(k))] %in every row, we show x-y of two matched points
end
刚开始写程序,自己调了一个晚上,怎么写都弄不出来……只好来请教了