




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程设计班级: 021151 专业: 智能科学与技术学号: 02115004姓名: 基于角点的图像配准图像配准现在已成为数字图像处理的研究热点,方法繁多,站在时代的前沿。图像配准多采用基于图像特征点的方法,这种方法易于用计算机处理并且容易实现人机交互,其重点在于如何提取图像上的有效特征点。对图像拼接技术的目的、意义、国内外研究现状、发展方向以及本课题研究的目的和意义进行了阐述,着重介绍了图像拼接过程的核心技术图像配准。阐明了现有配准方法的工作原理,并对常用的各种经典算法的优点和不足进行了比较总结。角点定义图像匹配的算子,主要是用来提取两幅配准图像中的角点。角点,又称为兴趣点,是像素点在其邻域内
2、的各个方向上灰度变化量足够大的点,且大于阈值的点。它是一种重要的图像特征点,包含了图像中丰富的二维结构信息,广泛应用于各种图像处理技术中。角点最大的优点是:它所代表的局部结构关系信息不会因为视角的不同而改变,这在三维物体识别上很有用。此外,角点特征也常用在汉字识别,染色体识别等应用系统中。常用角点检测的算法Harris算子Harris算子是Harris和Stephens提出的一种基于信号的角点特征提取的算子。其处理过程表示如下7:(2-1)(2-2)式中:为方向上的梯度,为方向上的梯度,为高斯模板,为矩阵的行列式,为矩阵的迹,为常数,表示图中相应像素点的兴趣值。小波变换算子小波变换算子8可以非
3、常有效地用于信号的多分辨率局部分析,它已经被成功的用于许多图像分析领域。对于图像配准来说,由于两幅图像中共同特征往往是大而强的边缘信息,根据小波变换能够反映图像的阶跃型边缘突变点的性质,可以利用小波变换提取用于图像配准的特征点。假设图像具有个像素。在个尺度上对进行分解,即尺度。选择适当的二维平滑函数,定义小波为:(2-3)(2-4)构造出离散滤波器,在尺度上,采用二维离散小波变换的快速算法计算每个点的离散二进小波变换,。点的模值为:(2-5)相角为:(2-6)然而,模极大值点就是该点的模大于在相角方向上的两个相邻位置上模值的点。当模极大值点大于所设定的门限值时,则该点被认为是特征点。Morav
4、ec算子Moravec算子9是Moravec提出的利用灰度方差提取点特征的算子。其提取点特征的步骤为:(1)计算各像元的兴趣值IV(Interest Value)。在以像素为中心的的图像窗口中,相邻4个方向像素灰度差的平方和为:(2-7)(2-8)(2-9)(2-10)式中:。取其中最小者作为该像素的兴趣值,即:(2-11)(2)给定一经验阈值,将兴趣值大于该阈值的点作为候选点,阈值的选择应以候选点中包括所需要的特征点,而又不含过多的非特征点为原则。(3)选取候选点中的极值点作为特征点,在一定大小的窗口内(可不同于兴趣值计算窗口),将候选点中兴趣值不是最大者去掉,仅留下一个兴趣值最大者,该像素
5、即为一个特征点。Forstner算子Forstner算子10是通过计算各像素的Roberts梯度和以像素为中心的一个窗口灰度协方差矩阵,在图像中寻找具有尽可能小而接近圆的误差椭圆的点作为特征点。其步骤为:(1)计算各像素的Roberts梯度(2-12)(2-13)(2)计算窗口中灰度的协方差矩阵(2-14)式中:(2-15)(2-16)(2-17)(3)计算兴趣值和(2-18)式中:代表矩阵的行列式;代表矩阵的迹。(4)确定待选点如果兴趣值大于给定的阈值,则该像元为待选点,阈值为经验值,可参考下列值:(2-19)式中:为权平均值;为本权的中值。当,且时,该像素为待选点。(5)选取极值点以权值为
6、依据,选择极值点,即在一个适当窗口中选择最大的待选点,而去掉其余的点。常用角点检测算法比较Harris 角点检测算法是基于图像的灰度自相关函数的一种算法,该算法直接从原始图像中检测特征点,能够在图像发生灰度变化、旋转和干扰噪声等情况下检测兴趣点。相对于 Moravec 算法,在抗噪能力有了很大提高,而且兼顾了效率和精度两方面的要求,误检测率低。提取的角点均匀合理,可以定量提取特征点,计算量小,易于编程。基于小波变换的特征点提取算法在实际应用中,可以满足图像配准的要求,而且适用性也比较强,但是由于它的计算量比较大,不利于图像的快速配准,用MATLAB软件对其编程,运行时间需要的较多。Morave
7、c 角点检测算法是一种比较传统的提取兴趣点的算法,由于该算法是通过计算水平、垂直、对角线、反对角线四个方向上灰度方差检测角点,该算子各项异性。具有思路简单,计算过程易于实现,判断条件少的优点,但其定位准确度不高,抗噪能力较低。Forstner算子与Moravec算子有大多数的方面相似,都是传统的点特征的提取算法,它们对各个像素邻域进行一定的梯度或差分运算,选择其极值点(极大或者极小)或超过给定阈值的点作为特征点。它们提取的特征点较强的依赖于局部灰度信息,其适应性较差而且计算量较大,因此,它们逐步被基于小波变换算子所代替。运行结果:附录:%基于角点的图像配准clc;close allclear
8、all;fprintf(%sn,图像配准算法. .);% 读入基准图像%BaseImage=imread(D:ImageFrame3200.bmp);% 读入实时图像%TempImage=imread(D:ImageFrame3240.bmp);TempImage=imread(D:Imagebb.bmp);TempImage=rgb2gray(TempImage);TempImage = wiener2(TempImage,4,4);BaseImage=imread(D:ImageZOpt-1172.bmp);BaseImage=rgb2gray(BaseImage);BaseImage=
9、wiener2(BaseImage,4,4);%BaseImage = adapthisteq(BaseImage,Distribution,rayleigh);% % 读入基准图像% BaseImage=imread(D:MATLAB701workTest_Images_Data19pic_3.bmp);% % 读入实时图像% TempImage=imread(D:MATLAB701workTest_Images_Data19pic_18.bmp);figure(1);imshow(BaseImage);title(基准图像);figure(2);imshow(TempImage);titl
10、e(实时图像);% 获取基准图像的大小BaseHeight,BaseWidth=size(BaseImage);% 获取实时图像的大小TempHeight,TempWidth=size(TempImage);% 角点邻域匹配窗口尺度因子Step_Corner=6;% 图像外围截取尺度Step_Image=8;fprintf(%sn,Harris兴趣点特征提取. .);% Harris角点提取tt_base=0.01;tt_temp=0.1;posc_base, posr_base,cnt_base=harris_corner(BaseImage(Step_Image+1):(BaseHeigh
11、t-Step_Image),(Step_Image+1):(BaseWidth-Step_Image),tt_base);posc_temp, posr_temp,cnt_temp=harris_corner(TempImage(Step_Image+1):(TempHeight-Step_Image),(Step_Image+1):(TempWidth-Step_Image),tt_temp);% 还原角点真实位置for i=1:cnt_base posc_base(i,1)=posc_base(i,1)+Step_Image; posr_base(i,1)=posr_base(i,1)+S
12、tep_Image;endfor i=1:cnt_temp posc_temp(i,1)=posc_temp(i,1)+Step_Image; posr_temp(i,1)=posr_temp(i,1)+Step_Image;end% 显示出角点提取结果figure(3);imshow(BaseImage);hold on;plot(posr_base,posc_base,r+);hold off;figure(4);imshow(TempImage);hold on;plot(posr_temp,posc_temp,g+);hold off;% 以下将利用交叉相关匹配进行基准图像和实时图像中
13、同名角点的映射%fprintf(%sn,兴趣点特征交叉相关匹配. .);% 同名角点数目初始化NumPoints_match=0;% Thresh_Cor=0.6;% 遍历实时图像中所有的角点for i=1:cnt_temp% 取定一角点 Index_c=posr_temp(i,1); Index_r=posc_temp(i,1);% 在实时图像中提取以取定角点为中心的一定大小的图像区域 AreaInTemp=TempImage(Index_r-Step_Corner:Index_r+Step_Corner,Index_c-Step_Corner:Index_c+Step_Corner); A
14、reaInTempCir,MaskT,CntT=Circle_Area(AreaInTemp,Step_Corner);% 将提取的图像区域与基准图像中个角点邻域进行匹配,以相关匹配测度最大值所对应的角点为与实时图像中取定的角点匹配的候选角点 % match_r,match_c=AreaMatch(AreaInTemp,BaseImage,posr_base,posc_base,cnt_base,Step_Corner); match_r,match_c,corBT=Area_Matched(BaseImage,AreaInTempCir,posr_base,posc_base,cnt_bas
15、e,MaskT,CntT,Step_Corner);% 在基准图像中,以上一步中得到的候选匹配角点为中心提取一定大小的图像区域 AreaInBase=BaseImage(match_r-Step_Corner:match_r+Step_Corner,match_c-Step_Corner:match_c+Step_Corner); AreaInBaseCir,MaskB,CntB=Circle_Area(AreaInBase,Step_Corner);% 将提取的基准图像区域与实时图像中各个角点对应的邻域进行相关匹配,取匹配值最大所对应的角点 % match_rr,match_cc=AreaM
16、atch(AreaInBase,TempImage,posr_temp,posc_temp,cnt_temp,Step_Corner); match_rr,match_cc,corTB=Area_Matched(TempImage,AreaInBaseCir,posr_temp,posc_temp,cnt_temp,MaskB,CntB,Step_Corner);% 如果匹配得到的实时图像中的角点位置与开始所取定的角点位置重合或者比较接近,这认为找到一对同名角点 if(abs(match_rr-Index_r)2&abs(match_cc-Index_c)0.8)&(corTB0.8)% 同名
17、角点数目增1 NumPoints_match=NumPoints_match+1; CorMtri(NumPoints_match,1)=corBT; CorMtri(NumPoints_match,2)=corTB;% 同名角点对中实时图像中角点的位置坐标 MatrixPoints_matched(NumPoints_match,1)=Index_r; MatrixPoints_matched(NumPoints_match,2)=Index_c;% 同名角点对中基准图像中角点的位置坐标 MatrixPoints_matched(NumPoints_match,3)=match_r; Mat
18、rixPoints_matched(NumPoints_match,4)=match_c;% 同名角点之间的坐标差值 MatrixPoints_matched(NumPoints_match,5)=Index_r-match_r; MatrixPoints_matched(NumPoints_match,6)=Index_c-match_c; % %figure; %imshow(TempImage); %hold on %plot(Index_c,Index_r,y*); %figure; %imshow(BaseImage); %hold on %plot(match_c,match_r,
19、w*); endend% 显示同名角点的坐标变化、坐标差值及其直方图统计% figure(5);% plot(MatrixPoints_matched(:,1),r);% hold on;% plot(MatrixPoints_matched(:,3),g);% hold on;% plot(MatrixPoints_matched(:,5),b);% title(同名角点竖直方向的坐标差值);% hold off;% hist_r=hist(MatrixPoints_matched(:,5);% figure(6);% hist(MatrixPoints_matched(:,5);% tit
20、le(同名角点竖直方向的坐标差值统计直方图);% figure(7);% plot(MatrixPoints_matched(:,2),r);% hold on;% plot(MatrixPoints_matched(:,4),g);% hold on;% plot(MatrixPoints_matched(:,6),b);% title(同名角点水平方向的坐标差值);% hold off;% hist_c=hist(MatrixPoints_matched(:,6);% figure(8);% hist(MatrixPoints_matched(:,6);% title(同名角点水平方向的坐
21、标差值统计直方图);fprintf(%sn,同名兴趣点间的坐标差值统计分析. .);% 对交叉匹配得到的同名角点间的坐标差值进行统计,得到差值标准差和均值avg_r,delta_r=MeanStD(MatrixPoints_matched(:,5),NumPoints_match);avg_c,delta_c=MeanStD(MatrixPoints_matched(:,6),NumPoints_match);% 对同名角点间的坐标差值进行聚类累积(类似直方图分布分析)Num_r,Num_cumu_r,Hist_row=HistData(NumPoints_match,MatrixPoints
22、_matched(:,5);Num_c,Num_cumu_c,Hist_col=HistData(NumPoints_match,MatrixPoints_matched(:,6);% 利用累积峰值处对应的坐标差值对实时图像相对于基准图像的坐标偏移量进行预估Delta_H=Hist_row(1,find(Num_cumu_r=max(Num_cumu_r);Delta_H=Delta_H(1,1);Delta_W=Hist_col(1,find(Num_cumu_c=max(Num_cumu_c);Delta_W=Delta_W(1,1);% 利用坐标差值分布标准差(离散度)和坐标偏移估计值对
23、交叉匹配得到的同名兴趣点进行筛选Num_Accept=0;for i=1:NumPoints_match %if(abs(MatrixPoints_matched(i,5)-Delta_H)5)&(abs(MatrixPoints_matched(i,6)-Delta_W)=1)&(row=1)&(col=BaseWidth) temp=double(TempImage(i,j); ImageAffined(row,col)=abs(temp-20); end endend% 将实时图像的四个顶点进行仿射变换模型参数进行变换row=a21*1+a22*1+b2;col=a11*1+a12*1+
24、b1;row_LU=floor(row);col_LU=floor(col);row=a21*TempWidth+a22*1+b2;col=a11*TempWidth+a12*1+b1;row_RU=floor(row);col_RU=floor(col);row=a21*1+a22*TempHeight+b2;col=a11*1+a12*TempHeight+b1;row_LD=floor(row);col_LD=floor(col);row=a21*TempWidth+a22*TempHeight+b2;col=a11*TempWidth+a12*TempHeight+b1;row_RD=
25、floor(row);col_RD=floor(col);if(row_LU=row_RD) row_D=row_LD;else row_D=row_RD;endif(col_LU=col_RD) col_R=col_RU;else col_R=col_RD;endif(row_U=BaseHeight) End_row=row_D;else End_row=BaseHeight;endif(col_L=BaseWidth) End_col=col_R;else End_col=BaseWidth;endAffineHeight=End_row+Start_row;AffineWidth=En
26、d_col+Start_col;% 配准图像初始化AffinedImage=zeros(AffineHeight,AffineWidth);FlagImage=zeros(AffineHeight,AffineWidth);for i=1:BaseHeight for j=1:BaseWidth temp=double(BaseImage(i,j); AffinedImage(Start_row+i-1,Start_col+j-1)=temp; FlagImage(Start_row+i-1,Start_col+j-1)=1; endendfor i=1:TempHeight for j=1:
27、TempWidth row=a21*j+a22*i+b2; col=a11*j+a12*i+b1; row=floor(row); col=floor(col); row=Start_row+row; col=Start_col+col; temp=double(TempImage(i,j); AffinedImage(row,col)=abs(temp+AffinedImage(row,col)+40)/2); FlagImage(row,col)=1; endendfor i=1:BaseHeight for j=1:BaseWidth if FlagImage(i,j)=0 Affine
28、dImage(i,j)=(AffinedImage(i-1,j)+AffinedImage(i+1,j)+AffinedImage(i,j-1)+AffinedImage(i,j+1)/4; end endendAffineImage=uint8(AffinedImage);figure;imshow(uint8(AffineImage);title(配准结果);% 该函数实现区域之间的匹配function row,col,Cor=Area_Matched(Image,Area,posr,posc,cnt,Mask,NumC,Step)row=0;col=0;Cor=-1;% StepArea
29、=double(Area);N=2*Step+1;for ind=1:cnt index_y=posc(ind,1); index_x=posr(ind,1); Temp=double(Image(index_y-Step:index_y+Step,index_x-Step:index_x+Step); Temp=Temp.*Mask; sum_area=0; sum_temp=0; sum_arte=0; for ii=1:N for jj=1:N if(Mask(ii,jj)=1) sum_area=sum_area+Area(ii,jj); sum_temp=sum_temp+Temp(
30、ii,jj); end end end avg_area=sum_area/NumC; avg_temp=sum_temp/NumC; sum_area=0; sum_temp=0; sum_arte=0; for ii=1:N for jj=1:N if(Mask(ii,jj)=1) sum_area=sum_area+(Area(ii,jj)-avg_area)2; sum_temp=sum_temp+(Temp(ii,jj)-avg_temp)2; sum_arte=sum_arte+abs(Temp(ii,jj)-avg_temp)*(Area(ii,jj)-avg_area); end end end cor_temp=sum_arte2/(sum_ar
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年份12月装修合同新风系统调试标准与争议解决机制
- 常德语文中考试卷及答案
- 保定电力职业技术学院单招职业技能测试参考试题(附答案)
- 万达信息管理
- 鲁迅为什么骂郭沫若是流氓
- DB15T 3920-2025阿拉善型绒山羊饲养管理技术规范
- 2024年山东省菏泽市单县八校联考中考一模语文试题 (原卷版+解析版)
- 房地产销售部客户个人总结报告
- 学生会主席团工作总结
- 大学生社团工作总结
- 3.28百万农奴解放纪念日演讲稿1500字2篇
- 图论与网络流
- 火针疗法课件
- 低代码培训课件
- 法院系统组成和职责解析
- 访谈记录表模板
- 油库消防安全知识培训
- 初高中物理的区别以及如何学好高中物理课件
- 六年级下册语文第三单元交流平台人教统编版课件
- 山东省烟台市牟平区(五四制)2023-2024学年七年级上学期期中考试历史试题
- 文件学生体质健康登记卡高中样表
评论
0/150
提交评论