图像中角点提取与匹配算法.docx

上传人:b****2 文档编号:2382740 上传时间:2022-10-29 格式:DOCX 页数:13 大小:34.61KB
下载 相关 举报
图像中角点提取与匹配算法.docx_第1页
第1页 / 共13页
图像中角点提取与匹配算法.docx_第2页
第2页 / 共13页
图像中角点提取与匹配算法.docx_第3页
第3页 / 共13页
图像中角点提取与匹配算法.docx_第4页
第4页 / 共13页
图像中角点提取与匹配算法.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

图像中角点提取与匹配算法.docx

《图像中角点提取与匹配算法.docx》由会员分享,可在线阅读,更多相关《图像中角点提取与匹配算法.docx(13页珍藏版)》请在冰豆网上搜索。

图像中角点提取与匹配算法.docx

图像中角点提取与匹配算法

 

1说明

本文实验的目标是对于两幅相似的图像,通过角点检测算法,进而找出这两幅图像的共同点,从而可以把这两幅图像合并成一幅图像。

下面描述该实验的基本步骤:

1.本文所采用的角点检测算法是Harris角点检测算法,该算法的基本原理是取以目标像素点为中心的一个小窗口,计算窗口沿任何方向移动后的灰度变化,并用解析形式表达。

设以像素点(x,y)为中心的小窗口在X方向上移动u,y方向上移动v,Harris给出了灰度变化度量的解析表达式:

(1)

其中,为窗口内的灰度变化度量;为窗口函数,一般定义为;I为图像灰度函数,略去无穷小项有:

(2)

将化为二次型有:

(3)

M为实对称矩阵:

(4)

通过对角化处理得到:

(5)

其中,R为旋转因子,对角化处理后并不改变以u,v为坐标参数的空间曲面的形状,其特征值反应了两个主轴方向的图像表面曲率。

当两个特征值均较小时,表明目标点附近区域为“平坦区域”;特征值一大一小时,表明特征点位于“边缘”上;只有当两个特征值均比较大时,沿任何方向的移动均将导致灰度的剧烈变化。

Harris的角点响应函数(CRF)表达式由此而得到:

(6)

其中:

det(M)表示矩阵M的行列式,trace(M)表示矩阵的迹。

当目标像素点的CRF值大于给定的阈值时,该像素点即为角点。

下面是图像一用Harris角点检测算法得到的角点坐标位置

x

212

301

309

353

58

201

178

58

202

186

329

161

202

58

57

201

306

y

2

65

68

77

94

94

142

143

144

150

150

170

177

178

228

228

228

在图像一上画出该角点的坐标位置如下图所示:

其中蓝色小方块代表的是检测出来的角点坐标位置。

2.匹配。

将两幅图像进行Harris角点检测后,分别得到角点对应与该图像的坐标位置,以该坐标位置为中心,分别取其附近的8个像素值,然后进行与另一幅图像进行匹配,找出距离最小的点作为匹配点。

例如下面是图像一角点坐标位置

x

212

301

309

353

58

201

178

58

202

186

329

161

202

58

57

201

306

y

2

65

68

77

94

94

142

143

144

150

150

170

177

178

228

228

228

与该位置对应的8个像素值分别为

角点1

角点2

角点3

角点17

(x-1,y-1)

30

7

35

142

(x-1,y)

48

59

17

9

(x-1,y+1)

37

108

128

63

(x,y+1)

31

114

15

101

(x+1,y+1)

143

183

32

95

(x+1,y)

101

177

25

20

(x+1,y-1)

2

92

24

49

(x,y-1)

3

22

30

198

接着,将图像一中的角点1与图像二中的所有角点进行相减,得到一个最小误差值,并记录下该位置,这样依次将图像一中的角点2,角点3一直到角点17都进行相减,即可得到两幅图像之间的最佳匹配点。

下面是两幅图像角点匹配的最佳坐标位置

匹配点

0

10

13

14

15

16

17

0

0

0

4

0

5

12

0

0

0

误差值

0

336

105

64

53

34

104

0

0

0

389

0

204

400

0

0

0

其中匹配点的值为0代表没有找到匹配点

3.显示匹配点。

对已经找出的匹配点,在图像上进行显示,这样有利于人眼判断该算法是否匹配正确。

下面是第一次显示找到的匹配点(两幅图像中共有9个匹配点)

下面是第二次显示找到的匹配点(比上一次少一个,判断依据是将误差值最大的点去除)

从上面可以看出,14号点已经被删除,原因是该点的误差值最大

下面是最后一次显示找到的匹配点

只留下最后三个匹配点,如果少于三个匹配点,则很难进行两幅图像的合并,所以当只有留下三个匹配点的时候,程序退出。

2实验结果

实验一

原始图像

第一次匹配的结果

最后一次匹配的结果

实验二

原始图像

第一次匹配的结果

最后一次匹配的结果

实验三

原始图像

第一次匹配的结果

最后一次匹配的结果

实验四

原始图像

第一次匹配的结果

最后一次匹配的结果

可以看出,利用该算法进行两幅图像匹配结果还算正确。

算法代码(用matlab语言写的)

functiontest()

%Thetestfunctiongivesanexampleofkeypointextractionusingthe

%methods:

%-Harris

%

%Example

%=======

%test();

%Harris

%importthefirstpicture

%img11=imread('');

%img11=imread('');

%img11=imread('');

%img1=double(img11(:

:

1));

img11=imread('');

img1=rgb2gray(img11);

img1=double(img1(:

:

));

pt1=kp_harris(img1);

%draw(img11,pt1,'Harris');

%importthesecondpicture

%img21=imread('');

%img21=imread('');

%img21=imread('');

%img2=double(img21(:

:

1));

img21=imread('');

img2=rgb2gray(img21);

img2=double(img2(:

:

));

pt2=kp_harris(img2);

%draw(img21,pt2,'Harris');

%matchkeypointswithintwopictures.

result=match(img1,pt1,img2,pt2);

result(1,intersect(find(result(1,:

)>0),find(result(2,:

)==0)))=0;

%result

%pause;

while(length(find(result(1,:

)>0))>3)

result

draw2(img11,img21,pt1,pt2,result);

%find(result(1,:

)>0)

pause;

[indexindex]=max(result(2,:

));

result(1,index

(1))=0;

result(2,index

(1))=0;

%result(1,I

(1))=result(2,I

(1))=0

end

draw2(img11,img21,pt1,pt2,result);

end

functiondraw2(img1,img2,pt1,pt2,result)

h=figure;

%set(gcf,'outerposition',get(0,'screensize'));

subplot(1,2,1);

%holdon;

imshow(img1);

subplot(1,2,2);

%holdon;

imshow(img2);

s=size(pt1,2);

subplot(1,2,1);

fori=1:

size(pt1,1)

rectangle('Position',[pt1(i,2)-s,pt1(i,1)-s,2*s,2*s],'Curvature',[00],'EdgeColor','b','LineWidth',2);

%text(pt1(i,2)+3,pt1(i,1)+3,num2str(i),'BackgroundColor',[111]);

%text(pt2(i,2),pt2(i,1),num2str(i));

%plot(pt2(i,2),pt2(i,1));

end

subplot(1,2,2);

fori=1:

size(pt2,1)

rectangle('Position',[pt2(i,2)-s,pt2(i,1)-s,2*s,2*s],'Curvature',[00],'EdgeColor','b','LineWidth',2);

end

%result

%size(pt1)

%size(pt2)

fori=1:

size(result,2)

if(result(1,i)~=0)

subplot(1,2,1);

text(pt1(result(1,i),2)+3,pt1(result(1,i),1)+3,num2str(i),'BackgroundColor',[111]);

%result(1,i)

%pt1(result(1,i),2)

%pt1(result(1,i),1)

subplot(1,2,2);

text(pt2(i,2)+3,pt2(i,1)+3,num2str(i),'BackgroundColor',[111]);

end

end

end

functionresult=match(img1,pt1,img2,pt2)

%得到标定点周围的像素值

regionValue1=getRegionValue(img1,pt1);

len1=size(regionValue1,2);

regionValue2=getRegionValue(img2,pt2);

len2=size(regionValue2,2);

%找出最佳匹配点

result=zeros(2,len2);

fori=1:

len1

B=regionValue1(:

i);

%abs(regionValue2-B(:

ones(1,size(regionValue2,2))))

%sum(abs(regionValue2-B(:

ones(1,size(regionValue2,2)))))

[value,index]=sort(sum(abs(regionValue2-B(:

ones(1,size(regionValue2,2))))));

%value

(1)

%index

(1)

%

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 公务员考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1