当前位置:文档之家› 基于MATLAB的点特征提取

基于MATLAB的点特征提取

基于MATLAB点特征提取实习报告一、实习内容与目的理解影像中每个像素灰度值的概念;理解点特征在灰度方面的特点;掌握常用的点特征提取算子及其对应的点特征提取方法,例如Harris算子。

利用MATLAB软件分析任意一种应用于数字图像处理中的边缘检测算子,研究它的提取方法以及实现提取特征点。

二、实习原理基本思想:从图像局部的小窗口观察图像特征。

角点定义:窗口向任意方向的移动都导致图像灰度的明显变化。

Harris角点检测:数学描述将图像窗口平移[u,v]产生灰度变化E[u,v]由:得到:于是对于局部微小的移动量[u,v],可以近似得到下面的表达:其中,M是2*2矩阵,可由图像的导数求得:窗口移动导致的图像变化:实对称矩阵的特征值分析其中,的特征值M的特征值λmax、λmin。

定义角点响应函数:R其中Harris角点检测结果如下图所示:三、实习步骤及相关代码filename='yuantu2.jpg';X=imread(filename);%读取图像%imshow(X);Info=imfinfo(filename);%获取图像相关信息if(Info.BitDepth>8)f=rgb2gray(X);end%《基于特征点的图像配准与拼接技术研究》%计算图像亮度f(x,y)在点(x,y)处的梯度-----------------------------------------------%fx=[50-5;80-8;50-5];%高斯函数一阶微分,x方向(用于改进的Harris角点提取算法) ori_im=double(f)/255;%unit8转化为64为双精度double64fx=[-2-1012];%x方向梯度算子(用于Harris角点提取算法)Ix=filter2(fx,ori_im);%x方向滤波%fy=[585;000;-5-8-5];%高斯函数一阶微分,y方向(用于改进的Harris角点提取算法) fy=[-2;-1;0;1;2];%y方向梯度算子(用于Harris角点提取算法)Iy=filter2(fy,ori_im);%y方向滤波%构造自相关矩阵---------------------------------------------------------------Ix2=Ix.^2;Iy2=Iy.^2;Ixy=Ix.*Iy;clearIx;clearIy;h=fspecial('gaussian',[77],2);%产生7*7的高斯窗函数,sigma=2Ix2=filter2(h,Ix2);Iy2=filter2(h,Iy2);Ixy=filter2(h,Ixy);%提取特征点---------------------------------------------------------------height=size(ori_im,1);width=size(ori_im,2);result=zeros(height,width);%纪录角点位置,角点处值为1R=zeros(height,width);Rmax=0;%图像中最大的R值k=0.06;%k为常系数,经验取值范围为0.04~0.06fori=1:heightforj=1:widthM=[Ix2(i,j)Ixy(i,j);Ixy(i,j)Iy2(i,j)];%autocorrelationmatrixR(i,j)=det(M)-k*(trace(M))^2;%计算RifR(i,j)>RmaxRmax=R(i,j);end;end;end;%T=0.01*Rmax;%固定阈值,当R(i,j)>T时,则被判定为候选角点T=0.1*Rmax;%固定阈值,当R(i,j)>T时,则被判定为候选角点%在计算完各点的值后,进行局部非极大值抑制-------------------------------------cnt=0;fori=2:height-1forj=2:width-1%进行非极大抑制,窗口大小3*3if(R(i,j)>T&&R(i,j)>R(i-1,j-1)&&R(i,j)>R(i-1,j)&&R(i,j)>R(i-1,j+1)&&R(i,j)>R(i,j-1)&&... R(i,j)>R(i,j+1)&&R(i,j)>R(i+1,j-1)&&R(i,j)>R(i+1,j)&&R(i,j)>R(i+1,j+1))result(i,j)=1;cnt=cnt+1;end;end;end;i=1;forj=1:heightfork=1:widthifresult(j,k)==1;corners1(i,1)=j;corners1(i,2)=k;i=i+1;end;end;end;[posc,posr]=find(result==1);figure,imshow(ori_im);holdon;plot(posr,posc,'r+');>>filename='yuantu.jpg';X=imread(filename);%读取图像%imshow(X);Info=imfinfo(filename);%获取图像相关信息if(Info.BitDepth>8)f=rgb2gray(X);end%《基于特征点的图像配准与拼接技术研究》%计算图像亮度f(x,y)在点(x,y)处的梯度-----------------------------------------------%fx=[50-5;80-8;50-5];%高斯函数一阶微分,x方向(用于改进的Harris角点提取算法) ori_im=double(f)/255;%unit8转化为64为双精度double64fx=[-2-1012];%x方向梯度算子(用于Harris角点提取算法)Ix=filter2(fx,ori_im);%x方向滤波%fy=[585;000;-5-8-5];%高斯函数一阶微分,y方向(用于改进的Harris角点提取算法) fy=[-2;-1;0;1;2];%y方向梯度算子(用于Harris角点提取算法)Iy=filter2(fy,ori_im);%y方向滤波%构造自相关矩阵---------------------------------------------------------------Ix2=Ix.^2;Iy2=Iy.^2;Ixy=Ix.*Iy;clearIx;clearIy;h=fspecial('gaussian',[77],2);%产生7*7的高斯窗函数,sigma=2Ix2=filter2(h,Ix2);Iy2=filter2(h,Iy2);Ixy=filter2(h,Ixy);%提取特征点---------------------------------------------------------------height=size(ori_im,1);width=size(ori_im,2);result=zeros(height,width);%纪录角点位置,角点处值为1R=zeros(height,width);Rmax=0;%图像中最大的R值k=0.06;%k为常系数,经验取值范围为0.04~0.06fori=1:heightforj=1:widthM=[Ix2(i,j)Ixy(i,j);Ixy(i,j)Iy2(i,j)];%autocorrelationmatrixR(i,j)=det(M)-k*(trace(M))^2;%计算RifR(i,j)>RmaxRmax=R(i,j);end;end;end;%T=0.01*Rmax;%固定阈值,当R(i,j)>T时,则被判定为候选角点T=0.1*Rmax;%固定阈值,当R(i,j)>T时,则被判定为候选角点%在计算完各点的值后,进行局部非极大值抑制-------------------------------------cnt=0;fori=2:height-1forj=2:width-1%进行非极大抑制,窗口大小3*3if(R(i,j)>T&&R(i,j)>R(i-1,j-1)&&R(i,j)>R(i-1,j)&&R(i,j)>R(i-1,j+1)&&R(i,j)>R(i,j-1)&&...R(i,j)>R(i,j+1)&&R(i,j)>R(i+1,j-1)&&R(i,j)>R(i+1,j)&&R(i,j)>R(i+1,j+1))result(i,j)=1;cnt=cnt+1;end;end;end;i=1;forj=1:heightfork=1:widthifresult(j,k)==1;corners1(i,1)=j;corners1(i,2)=k;i=i+1;end;end;end;[posc,posr]=find(result==1);figure,imshow(ori_im);holdon;plot(posr,posc,'r+');上面是Harris角点检测的数学推导,通过查阅相关文献,对Harris角点检测的推导过程进行整理,其简要步骤如下:Harris角点检测器分为三步:梯度计算,矩阵形成和特征值计算。

首先,计算x和方向上的平滑(使用高斯函数)梯度来检测给定灰度图像中的角点,由下面的式子给出:其中,是平滑参数。

计算图像的平滑梯度为:其中,“”表示二维卷积运算。

Harris角点检测器依赖于计算一个矩阵(与自相关函数有关),由下面的式子给出:其中,从上面的式子可以看出,和表示平均梯度幅值,矩阵的特征值提供关于给定位置的边缘的信息。

如果给定位置的矩阵的特征值都很大,那么大部分区域均为角点。

Harris通过计算响应函数可以避免精确的特征值计算,由下面的式子给出:其中是可调参数,一般设置在区间[0.04,0.06]内。

通过判定R大小来判断像素点是否为角点,对于角点,的值很大;而平坦的区域,的值很小。

四、实习体会利用MATLAB软件可以大大的简化计算,可以直观迅速的得到所需要的结果。

MATLAB软件功能强大,通过本次综合设计更一步了解和掌握该软件的使用方法,更好的利用该软件解决一些比较复杂的问题。

相关主题