测角误差估计算法matlab,Harris角点检测 及 Matlab实验

b4d42a8465a682cbaff61a2b948d0c14.png

目录

1 基础知识

1.1 图像变化的类型

1.2 提取点特征的作用

1.3 什么是好的角点检测算法?

2 Harris 角点检测

2.1 Harris角点检测基本思想

2.2 Harris角点检测:数学描述

3 总结

4 Matlab 实验

参考资料

角点是图像重要的特征,对图像图形的理解和分析有很重要的作用。角点在保留图像图重要特征的同时,可以有效地减少信息的数据量,使其信息的含量很高,有效地提高了计算的速度,有利于图像的可靠匹配和实时处理。下面将介绍Harris角点检测 及 Matlab实验。

1 基础知识

1.1 图像变化的类型

d844c56ebef1af672f3e380d59edd44c.png

1.2 提取点特征的作用

图像的点特征是许多计算机视觉算法的基础:使用特征点来代表图像的内容,在运动目标跟踪、物体识别、图像配准、全景图像拼接 和 三维重建 等方向有较多的用处。

有一类重要的点特征:角点(corner points)

角点(corner points):局部窗口沿各方向移动,均产生明显变化的点,图像局部曲率突变的点

典型的角点检测算法:Harris角点检测, CSS角点检测等。下图展示的是不同学者提出的角点检测算法。

be42237dd2a0097b0f40a5e9b9474565.png

下图为不同类型的角点,那么,怎么才算的好的角点检测算法呢?下面将慢慢介绍。

7c5d15a6d18fb5de8175affcdd2d27f6.png

1.3 什么是好的角点检测算法?

(1)检测出图像中“真实的”角点;

(2)准确的定位性能;

(3)很高的重复检测率(稳定性好);

(4)具有对噪声的鲁棒性;

(5)具有较高的计算效率。

2 Harris角点检测

1988年,Harris提出角点检测的方法效果较好。从谷歌学术来看,引用已达到1万6千多次,佩服佩服。

c2699c91cffcf66f07004e574f3c8bba.png

2.1 Harris角点检测基本思想

基本思想:从图像局部的小窗口观察图像特征。

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

01643380c1601eb1ff8d529a367025af.png

8c2b0472528ce9ef577ba0937fc2d049.png

2.2 Harris角点检测:数学描述

将图像窗口平移

79eca92a85b13ff4c1021ff577f6f134.png 产生灰度变化 

261553f9db1c2ecd5acc16ec32546b8d.png

594909bc9240cdf003a391cf04d80810.png

由:

3312b15e5e0d5bdd2ecec32c370f0845.png

得到:

58f7f5e655af92f727768685001fc272.png

f6ecb8720914e6b9db433570eb0362ac.gif

于是对于局部微小的移动量

79eca92a85b13ff4c1021ff577f6f134.png ,可以近似得到下面的表达:

199d9af316d478dd1025a3ffaec1948b.png

其中,

1d636e748f5cb040e02b64cc8f5c6340.png

41d00af8cb7bcd6b2cd0b5192a64a0fa.png 矩阵,可由图像的导数求得:

bf44ba3cb14924bf77725b92962cb08c.png

窗口移动导致的图像变化:实对称矩阵

1d636e748f5cb040e02b64cc8f5c6340.png的特征值分析

199d9af316d478dd1025a3ffaec1948b.png

其中,

1d636e748f5cb040e02b64cc8f5c6340.png的特征值

c072a4b06925fda44cb811d47c07e1c4.png 。

bbebff9c538ae5684ba7fb85b373dd05.png

52b5a3730351bdab284abc791930ee47.png

定义角点响应函数:

4d0223fdf8a39057950c7bb79294639f.png

9e9a270b18b24bc8f4749fe751a1ab30.png

其中,

759d5fc9e09fcd8eaa1af25e1ff03954.png 。

19cafb3fc703e9421b20fe354a382e0e.png

Harris角点检测结果如下图所示:

5d66096aab31ff21660c97d1d72ee952.png

3 总结

上面是Harris角点检测的数学推导,通过查阅相关文献,对Harris角点检测的推导过程进行整理,其简要步骤如下:

Harris角点检测器分为三步:梯度计算,矩阵形成和 特征值计算。首先,计算

31717515ebaa048b1b9c64dab2930bb3.png 和 

725a0a3016cb260f4ef29959df251ef8.png 方向上的平滑 (使用高斯函数) 梯度来检测给定灰度图像 

d3a38ef4920aa6e8a8408e357bc05fa2.png 中的角点,由下面的式子给出:

23d9c82d102bbb3059026136b6da8ea3.png

b653cd9728f52bfab4f4964bdf19ba76.png

其中,

3c2097c83b0ca022b87bb1933bf5da91.png 是平滑参数。

计算图像

d3a38ef4920aa6e8a8408e357bc05fa2.png 的平滑梯度为:

e49f863907d36440a42f601ff9e66454.png

cfe9b530a9de7b4809cab054a80b6395.png

其中,“

4977d502b88a4d8cb2d480cde4afefa1.png ” 表示二维卷积运算。

Harris角点检测器依赖于计算一个矩阵(与自相关函数有关),由下面的式子给出:

baa6faa34c5086ba8e4d2afa1233792e.png

其中,

1e03311b9936ab8a25873d41063aff69.png

df7bb5300f85024b8f78a9c5155dd0f8.png

88d958b4ad01d8e317c3621f3b5eb240.png

从上面的式子可以看出,

ada537139a3ef0815dcf848fccf6edee.png 和 

b53151bb74f5106819dfe12a9046d9a4.png 表示平均梯度幅值,矩阵

6d544dc7fd8a04536e35facdedb64cf9.png 的特征值提供关于给定位置的边缘的信息。如果给定位置的矩阵的特征值都很大,那么大部分区域均为角点。Harris通过计算响应函数可以避免精确的特征值计算,由下面的式子给出:

0a9b5c2c396e41ce5ed147a66fad3d76.png

其中,

6e5c407e5ea5b67d791fd09d146d1972.png , 

9e5c056951948cc8d02227f570111504.png是可调参数,一般设置在区间 [0.04, 0.06] 内。通过判定 

4d0223fdf8a39057950c7bb79294639f.png 大小来判断像素点是否为角点,对于角点,

986d81179ebf0ac39e93e1b80af29bc5.png 的值很大;而平坦的区域,

986d81179ebf0ac39e93e1b80af29bc5.png 的值很小。

4 Matlab 实验

Harris角点检测 Matlab 代码如下:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%% Harris角点检测算法 Matlab code

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

clear all; clc ;tic;

ori_im = imread('lena.tiff'); % 读取图像

if(size(ori_im,3)==3)

ori_im = rgb2gray(uint8(ori_im)); %转为灰度图像

end

% fx = [5 0 -5;8 0 -8;5 0 -5]; % 高斯函数一阶微分,x方向(用于改进的Harris角点提取算法)

fx = [-2 -1 0 1 2]; % x方向梯度算子(用于Harris角点提取算法)

Ix = filter2(fx,ori_im); % x方向滤波

% fy = [5 8 5;0 0 0;-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;

clear Ix;

clear Iy;

h= fspecial('gaussian',[7 7],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);

for i = 1:height

for j = 1:width

M = [Ix2(i,j) Ixy(i,j);Ixy(i,j) Iy2(i,j)]; % auto correlation matrix

R(i,j) = det(M)-0.06*(trace(M))^2;

end

end

cnt = 0;

for i = 2:height-1

for j = 2:width-1

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

if 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

Rsort=zeros(cnt,1);

[posr, posc] = find(result == 1);

for i=1:cnt

Rsort(i)=R(posr(i),posc(i));

end

[Rsort,ix]=sort(Rsort,1);

Rsort=flipud(Rsort);

ix=flipud(ix);

ps=100;

posr2=zeros(ps,1);

posc2=zeros(ps,1);

for i=1:ps

posr2(i)=posr(ix(i));

posc2(i)=posc(ix(i));

end

imshow(ori_im);

hold on;

plot(posc2,posr2,'g+');

toc;

运行结果如下图所示:

7de950ef83898af2fe9770a27033914b.png

C++实验代码可参见:https://blog.csdn.net/linqianbi/article/details/78930239

参考资料

[1] C.Harris, M.Stephens. “A Combined Corner and Edge Detector”. Proc. of 4th Alvey Vision Conference, 1988.

[2] Harris角点检测 PPT

[3] https://blog.csdn.net/u010703122/article/details/49308153

[4] https://blog.csdn.net/woxincd/article/details/60754658

[5] https://blog.csdn.net/linqianbi/article/details/78930239

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值