基于MATLAB的点特征提取

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于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为双精度double64

fx=[-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=2

Ix2=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);%纪录角点位置,角点处值为1

R=zeros(height,width);

Rmax=0;%图像中最大的R值

k=0.06;%k为常系数,经验取值范围为0.04~0.06

fori=1:height

forj=1:width

M=[Ix2(i,j)Ixy(i,j);Ixy(i,j)Iy2(i,j)];%autocorrelationmatrix

R(i,j)=det(M)-k*(trace(M))^2;%计算R

ifR(i,j)>Rmax

Rmax=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-1

forj=2:width-1

%进行非极大抑制,窗口大小3*3

if(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:height

fork=1:width

ifresult(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

相关文档
最新文档