遥感提取特征点

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

遥感影像特征点提取

一、 基于Moravec 算子的特征点提取

1. Moravec 算子的原理及算法公式

该算子是通过逐像元量测与其邻元的灰度差,搜索相邻像元之间具有高反差的点,具体方法有以下几种。

(1)计算各像元的有利值,如图所示,在5×5的窗口内沿着图示四个方向分别计算相邻像元间灰度差之平方和V 1,V 2,V 3,及V 4,取其中最小值作为该像元的有利值:

其中:

式中,

j i G ,代表像元j i P ,的灰度值,W 为以像元计的窗口大小,如图所示,n m W ,5,=为像元在整块影像中位置序号。

(2)给定一个阈值,确定待定点的有利点。如果有利值大于给定的阈值,则将该像元作为候选点。阈值一般为经验值。

(3)抑制局部非最大。在一定大小窗口内(例如5×5,7×7,,9×9像元等),将上一步所选的候选点与其周围的候选点比较,若该像元的有利非窗口中最大值,则去掉;否则,该像元被确定为特征点,这一步的目的在于避免纹理丰富的区域产生束点,用于抑制局部非最大的窗口大小取决于所需的有利点密度。

综上所述,Moravec 算子是在四个主要方向上选择具有最大—最小灰度方差的点作为特征点。

2. 基于MATLAB 的算法编程

clear all;close all;clc

img=double(imread('1001.jpg'));

[h w]=size(img);

imshow(img,[])

imgn=zeros(h,w);

n=4;

for y=1+n:h-n

for x=1+n:w-n

sq=img(y-n:y+n,x-n:x+n);

V=zeros(1,4);

}V ,V ,V ,min{V 4321min =IV ∑+-=i j i j i G G

V 21-,1,4)(∑++-=i j i j i G G V 21,1,3)(∑+-=i j i j i G G V 21,,2)(∑+-=i j i j i G G V 2,1,1)(;1,,-+-=k m k m i ;1,,-+-=k n k n j 。2/W k

=

for i=2:2*n+1 %垂直,水平,对角,反对角四个方向领域灰度差的平方和V(1)=V(1)+(sq(i,n+1)-sq(i-1,n+1))^2;

V(2)=V(2)+(sq(n+1,i)-sq(n+1,i-1))^2;

V(3)=V(3)+(sq(i,i)-sq(i-1,i-1))^2;

V(4)=V(4)+(sq(i,(2*n+1)-(i-1))-sq(i-1,(2*n+1)-(i-2)))^2;

end

pix=min(V); %四个方向中选最小值

imgn(y,x)=pix;

end

end

T=mean(imgn(:)); %设阈值,小于均值置零

ind=find(imgn

imgn(ind)=0;

for y=1+n:h-n %选局部最大且非零值作为特征点

for x=1+n:w-n

sq=imgn(y-n:y+n,x-n:x+n);

if max(sq(:))==imgn(y,x) && imgn(y,x)~=0

img(y,x)=255;

end

end

end

figure;

imshow(img,[]);

3.运行结果

1001特征点1002特征点

二、Harris 角点检测算子

1、算法公式

(1)Harris 算子用高斯函数代替二值窗口函数,对离中心点越近的像素赋予越大的权重,以减少噪声影响。

(2)Moravec 算子只考虑了每隔45度方向,Harris 算子用Taylor 展开去近似任意方向。将图像窗口平移[u,v]产生灰度变化E(u,v)。

得 于是对于局部微小的移动量[u,v],可以近似得到下面的表达:

其中M 是2×2的矩阵,可由图像的导数求得: 式中, 为x 方向的差分, 为y 方向的差分,

为高斯函数。 (3)Harris 采用了一种新的角点判断方法。通过M 的两个特征值21λλ,的大小对图像点进行分类。

⎥⎥⎦⎤⎢⎢⎣⎡=y x y y x y x x I I I I I I y x w M ,22),(∑

-++=y x y x I v y u x I y x w v u E ,2

)],(),()[,(),()

,(),(,22v u O v I u I y x I v y u x I y x +++=++)(∑++=y x y x v u O v I u I y x w v u E ,2

22)],()[,(),(⎥⎦

⎤⎢⎣⎡=v u M v u v u E ],[,)([]⎥⎦

⎤⎢⎣⎡⎥⎥⎦⎤⎢⎢⎣⎡=+v u I I I I I I v u v I u I y y x y x x y x 222],[x I y I ),(y x w 如果1λ和2λ都很小,图像窗口在所有方向上移动都无明显灰度变化 2222)(221),(σπσy x e y x w +-=

但是解特征向量需要比较多的计算量,且两个特征值的和等于矩阵M 的迹,两个特征值的积等于矩阵M 的行列式。所以用下式来判定角点质量。(K 常取0.04—0.06)

(4)Harris 算法总结

1:对每一像素点计算相关矩阵M

2:计算每像素点的Harris 角点响应。

3:在w ×w 范围内寻找极大值点,若Harris 角点响应大于阀值,则视为角点。

Harris 算子对灰度的平移是不变的,因为只有差分,对旋转也有不变性,但是对尺度很敏感,在一个尺度下是角点,在另一个尺度下可能就不是了。

二 MATLAB 代码

clear;

Image = imread('1001.jpg'); % 读取图像

Image = im2uint8(rgb2gray(Image));

dx = [-1 0 1;-1 0 1;-1 0 1]; %dx :横向Prewitt 差分模版

Ix2 = filter2(dx,Image).^2;

Iy2 = filter2(dx',Image).^2;

Ixy = filter2(dx,Image).*filter2(dx',Image);

%生成 9*9高斯窗口。窗口越大,探测到的角点越少。

h= fspecial('gaussian',9,2);

A = filter2(h,Ix2); % 用高斯窗口差分Ix2得到A

B = filter2(h,Iy2);

C = filter2(h,Ixy);

nrow = size(Image,1);

ncol = size(Image,2);

Corner = zeros(nrow,ncol);

%矩阵Corner 用来保存候选角点位置,初值全零,值为1的点是角点

%真正的角点在137和138行由(row_ave,column_ave)得到

%参数t:点(i,j)八邻域的“相似度”参数,只有中心点与邻域其他八个点的像素值之差在 %(-t,+t )之间,才确认它们为相似点,相似点不在候选角点之列

t=20;

%并没有全部检测图像每个点,而是除去了边界上boundary 个像素,

%因为我们感兴趣的角点并不出现在边界上

boundary=8;

2

2)(B A k CD AB R +--=)(2),(x I y x w A ⊗=2),(y I y x w B ⊗=)(y x I I y x w D C ⊗==),(⎥⎦⎤⎢⎣⎡=D C B A M 2)(det traceM k M R -=

相关文档
最新文档