实验一-点特征提取

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

一、实验目的

1、理解点特征提取的基本概念;

2、熟悉进行点特征提取的基本方法;

3、掌握用MATLAB语言进行点特征提取的方法。

二、实验原理

特征主要指明显点,如角点、圆点等。提取点特征的算子称为兴趣算子或有利算子,即运用某种算法从影像中提取我们所感兴趣的,即有利于某种目的的点。本次试验使用Moravex算子进行点特征提取。

Moravex算子于1977年提出利用灰度方差提取点特征的算子,其特点是在四个主要方向上选择具有最大---最小灰度方差的点作为特征点。其基本步骤为:

1、计算各像元的兴趣值IV(interest value)。在以像素(c

,r)为中心的w×w的影像窗口中,计算四个方向相邻像素灰度差的平方和;

2、给定一定的阈值,将兴趣值大于该阈值的点作为候选点。阈值的选择应以候选点中包括所需要的特征点,而又不包括过多的非特征点为原则;

3、选取候选点中的极值点作为特征点。在一定大小窗口内,将候选点中不是最大者均去掉,留下一个兴趣值最大者,该像素即为一个特征点。

三、实验要求

1、读取MATLAB图像处理工具箱中提供的这幅图像,并显示。

2、用Moravex算子对图像进行点特征提取

四、运行结果

原图:

提取点特征之后的图像:

五、源程序代码

% clear all

% close all

% clc

tic

I=imread('');

originalmap=I;

%calculate every pixel's IV(Interest value) %divide image I by w*w

w=5;

%divide to m*n

m=floor(size(I,1)/w); %rows,round

n=floor(size(I,2)/w); %columns

%get the coordinate of every centroid

c=ceil(w/2)+(0:n-1)*w; %x coordinate

r=ceil(w/2)+(0:m-1)*w; %y coordinate

%calculate every pixel's IV

step=floor(w/2);

for y_unit=1:m

for x_unit=1:n

%计算横向相邻像素灰度差的平方和

v1=0;v2=0;v3=0;v4=0;

for i=-step:step-1

%计算横向相邻像素灰度差的平方和

v1=v1+(I(r(y_unit),c(x_unit)+i)-I(r(y_u nit),c(x_unit)+i+1))^2;

%计算右斜线方向相邻像素灰度差的平方和

v2=v2+(I(r(y_unit)+i,c(x_unit)+i)-I(r(y _unit)+i+1,c(x_unit)+i+1))^2;

%计算纵向相邻像素灰度差的平方和

v3=v3+(I(r(y_unit)+i,c(x_unit))-I(r(y_u nit)+i+1,c(x_unit)))^2;

%计算左斜线方向相邻像素灰度差的平方和

v4=v4+(I(r(y_unit)-i,c(x_unit)+i)-I(r(y _unit)-i-1,c(x_unit)+i+1))^2;

end

%the min[v1,v2,v3,v4] is the IV of (c,r)

IV_cr(y_unit,x_unit)=min([v1,v2,v3,v4]);

end

end

%introduce a threshold 给定一个经验阈值。阈值的选取应以候选点包含所需要的特征点,而又不包含过多的非特征点为原则.

exper_thr=50;

IV_cr(IV_cr

%选择候选点的极值点为特征点

%choose the size of window选择计算窗口大小

wf=9;

%divide the feature points对候选点进行分割,分割为mf*nf个区域

mf=floor(m/wf); %rows

nf=floor(n/wf); %columns

%gain the coordinate of the feature point得到特征点的坐标

xc=[];

yc=[];

for y_unit=1:mf

for x_unit=1:nf

%计算分割区域中的最大值

[C,I]=max(IV_cr((y_unit-1)*wf+1:y_unit*wf,(x_ unit-1)*wf+1:x_unit*wf));%得到行

[C1,I1]=max(C);%得到列

IV_crch(y_unit,x_unit)=C1; %得到分割区域中的最大值

row=I(I1);

col=I1;

crch_row(y_unit,x_unit)=(y_unit-1)*wf+row; %得到最大值在候选区域中的行数

crch_col(y_unit,x_unit)=(x_unit-1)*wf+col; %得到最大值在候选区域中的列数

yc=[yc,r((y_unit-1)*wf+row)];xc=[xc,c((x_unit -1)*wf+col)];

IV_cr((y_unit-1)*wf+1:y_unit*wf,(x_unit-1)*wf +1:x_unit*wf)=NaN; %先去掉所有的点

IV_cr((y_unit-1)*wf+row,(x_unit-1)*wf+col)=C1 ; %加上符合要求的候选点

end

end

相关文档
最新文档