当前位置:文档之家› Harris角点检测(经典教程)

Harris角点检测(经典教程)

Harris角点检测(经典教程)
Harris角点检测(经典教程)

Harris角点检测算法编程步骤及示例演示

简单将Harris角点检测算法的思想说下,就是拿一个小窗在图像中移动,通过考察这个小窗口内图像灰度的平均变换值来确定角点。(1)如果窗口内区域图像的灰度值恒定,那么所有不同方向的偏移几乎不发生变化;

(2)如果窗口跨越一条边,那么沿着这条边的偏移几乎不发生变化,但是与边垂直的偏移会发生很大的变化;

(3)如果窗口包含一个孤立的点或者角点,那么所有不同方向的偏移会发生很大的变化。

下面给出具体数学推导:

设图像窗口平移量为(u,v),产生的灰度变化为E(u,v),

有E(u,v)=sum[w(x,y)[I(x+u,y+v)-I(x,y)]^2],其中w(x,y)为窗口函数,

I(x+u,y+v)为平移后的灰度值,I(x,y)为平移前的灰度值。

有泰勒公式展开可得:

I(x+u,y+v)=I(x,y)+Ix*u+Iy*v+O(u^2,v^2);

Ix,Iy分别为偏微分,在图像中为图像的方向导数.

因此E(u,v)=sum[w(x,y) [Ix*u+Iy*v+O(u^2,v^2)]^2],

可以近似得到E(u,v)=sum[w(x,y) [Ix*u+Iy*v]^2],即

E(u,v)=[u,v][Ix^2,Ix*Iy;Ix*Iy,Iy^2][u,v]T

令M=[Ix^2,Ix*Iy;Ix*Iy,Iy^2],因此最后对角点的检测成了对矩阵M的特征值的分析了,令M其特征值为x1,x2;

当x1>>x2或者x2>>x1,则检测到的是边缘部分;

当x1,x2都很小,图像窗口在所有移动的方向上移动灰度级都无明显变化.

当X1,X2都很大时且相当,检测到的是角点。

编程时用x1,x2不方便,因此定义角点响应函数;

R=det(M)-k(trace(M))^2;

其中det(M)为矩阵M的行列式,trace(M)为矩阵M的迹。

下面给出更具数学公式实际编程的步骤:

1.利用水平,竖直差分算子对图像的每个像素进行滤波以求得

Ix,Iy,进而求得M中的四个元素的值。

M=[Ix^2,Ix*Iy;Ix*Iy,Iy^2]

2.对M的四个元素进行高斯平滑滤波,为的是消除一些不必要

的孤立点和凸起,得到新的矩阵M。

3.接下来利用M计算对应每个像素的角点响应函数R,即:

R=det(M)-k(trace(M))^2;

也可以使用改进的R:

R=[Ix^2*Iy^2-(Ix*Iy)^2]/(Ix^2+Iy^2);里面没有随意给定的参数k,取值应当比第一个令人满意。

4.在矩阵R中,同时满足R(i,j)大于一定阈值threshold和R(i,j)

是某领域内的局部极大值,则被认为是角点。

下面给出程序代码:还不错,自己一步步查资料写的,还算详

细。

function main

clc;

clear;

close all;

%The coner points extractions using Harris methods;

frame=imread('*.jpg');

figure(1);

imshow(frame);

%调用harris角点检测子函数;

%输入参数解释:frame为输入图像,7为高斯滤波窗口大小,2为均方差sigma的值,

%0,04为推荐的k值,winsize为极大抑制窗口的大小且给参数时为奇数;

%输出参数解释:posX为检测到角点X坐标,posY为检测到角点Y坐标,

%cnt为检测到角点的个数,Out_Image为输出图像;

[posX,posY,cnt,Out_Image]=conerdetection(frame,7,2,0.04,7) ; %输出的图像已经是2值化的

figure(2);

imshow(Out_Image);

hold on;

plot(posX,posY,'ro','MarkerSize',15);

disp(cnt);

end

function

[posX,posY,cnt,Out_Image]=conerdetection(frame,GaussWindow,s igma,k,winsize)

%ImageData: gracyscale image of input

%GaussWindow: The sizes of Gauss window

%sigma:The variance

%default value

%winsize为极大抑制窗口大小

Out_Image=frame;

ImageData=frame;

ImageData= double(ImageData(:,:,2)); %ImageData数据矩阵式一个三通道的,我们角点标记只需选择一个可以;

%ImageData=im2bw(ImageData,0.5); %或者将3通道的的图像转换成2值化的图像,完成提取;

%算法解释:

%1:利用水平,竖直差分算子对图像的每个像素进行滤波以求得Ix,Iy,进而求得M矩阵中四个元素的值;

%M=[Ix*Ix,Ix*Iy;Ix*Iy,Iy*Iy]

orig_image=ImageData;

fx=[-2,-1,0,1,2];

Ix=filter2(fx,orig_image);

fy=[-2;-1;0;1;2];

Iy=filter2(fy,orig_image);

Ix2=Ix.*Ix;

Iy2=Iy.*Iy;

Ixy=Ix.*Iy;

%2:对M的四个元素进行高斯平滑滤波,得到新的矩阵M;

%滤波平滑,消除突出点,得到新的矩阵M;

h=fspecial('gaussian',[GaussWindow,GaussWindow],sigma);

%建立滤波算子

Ix2=filter2(h,Ix2); %filter2是用h滤波器放在Ix2移动进行模板滤波

Iy2=filter2(h,Iy2); %消除y方向上的突兀点

Ixy=filter2(h,Ixy);

%提取前的图像矩阵的预处理;

height=size(orig_image,1); %返回图像矩阵的行数给高

width=size(orig_image,2); %返回图像矩阵的列数给宽

result=zeros(height,width); % 纪录角点位置,角点处值为1

R=zeros(height,width); %创建与图像矩阵大小相同的零矩阵

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

%3:接下来利用M计算对应于每个像素的角点响应函数Cim(即R);

%计算公式为:R=det(M)-k*(trace(M))^2,其中k为一个任意数,经验选取0.04就可以;

%由于k的取值有些太随意,因此,改用此公式,用新的公式定义R:R=det(M)/Tr(M);

%即Cim=R=[Ix*Ix*Iy*Iy-(Ix*Iy)*(Ix*Iy)]/[Ix*Ix+Iy*Iy];

for i=1:height

for j=1:width

M=[Ix2(i,j),Ixy(i,j);Ixy(i,j),Iy2(i,j)]; %%自相关矩阵

R(i,j)=det(M)-0.04*(trace(M))^2; %% 计算R 值,det()求一个方阵的行列式(Determinant);trace()求方阵的迹,即该方阵对角线上元素之和;

if R(i,j)>Rmax

Rmax=R(i,j);

end

end

end

%winsize为非极大抑制窗口

winr=(winsize-1)/2; %the radius of the neighborhood

istart=winr+1;

jstart=winr+1;

iend=height-winr;

jend=width-winr;

cnt=0;

for i=istart:iend

for j=jstart:jend

subr=R((i-winr):(i+winr),(j-winr):(j+winr)); %取出winr*winr这块区域里面的的矩阵;

subrmax=max(max(subr));

if(R(i,j)>k*Rmax)&&(R(i,j)==subrmax)

result(i,j)=1;

cnt=cnt+1;

end

end

end

[posY,posX]=find(result==1);

% %cnt为检测出来的角点的个数;

% figure(2);

% imshow(orig_image);

% hold on;

% plot(posX,posY,'ro','MarkerSize',15);

% disp(cnt);

end

以下这幅图就是角点检测的一个实际例子:

的。下面这幅是使用标准的黑白棋盘格时的角点检测值:

+++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++++++

图像中角点(特征点)提取与匹配算法

角点提取与匹配算法实验报告 1 说明 本文实验的目标是对于两幅相似的图像,通过角点检测算法,进而找出这两幅图像的共同点,从而可以把这两幅图像合并成一幅图像。 下面描述该实验的基本步骤: 1.本文所采用的角点检测算法是Harris 角点检测算法,该算法的基本原理是取以目标像素点为中心的一个小窗口,计算窗口沿任何方向移动后的灰度变化,并用解析形式表达。设以像素点(x,y)为中心的小窗口在X 方向上移动u ,y 方向上移动v ,Harris 给出了灰度变化度量的解析表达式: 2 ,,|,|,,()(x y x y x u y v x y x y I I E w I I w u v o X Y ??= -=++??∑∑ (1) 其中,,x y E 为窗口内的灰度变化度量;,x y w 为窗口函数,一般定义为2 2 2 ()/,x y x y w e σ +=; I 为图像灰度函数,略去无穷小项有: 222222 ,,[()()2]2x y x y x y x y E w u I v I uvI I Au Cuv Bv = ++=++∑ (2) 将,x y E 化为二次型有: ,[]x y u E u v M v ?? =???? (3) M 为实对称矩阵: 2 ,2 x y x x y x y y I I I M w I I I ???= ???????∑ (4) 通过对角化处理得到: 11 ,200x y E R R λλ-??= ??? (5) 其中,R 为旋转因子,对角化处理后并不改变以u,v 为坐标参数的空间曲面的形状,其特征值反应了两个主轴方向的图像表面曲率。当两个特征值均较小时,表明目标点附近区域为“平坦区域”;特征值一大一小时,表明特征点位于“边缘”上;只有当两个特征值均比较大时,沿任何方向的移动均将导致灰度的剧烈变化。Harris 的角点响应函数(CRF)表达式由此而得到: 2 (,)det()(())C RF x y M k trace M =- (6)

Harris角点特征提取

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Harris角点提取算法 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% clear; %filename = 'Lena.jpg';filename='object0024.view01.png'; X = imread(filename); % 读取图像 % imshow(X); Info = imfinfo(filename); %获取图像相关信息 if (Info.BitDepth > 8) f = rgb2gray(X); end %《基于特征点的图像配准与拼接技术研究》 %计算图像亮度f(x,y)在点(x,y)处的梯度 -----------------------------------------------% fx = [5 0 -5;8 0 -8;5 0 -5]; % 高斯函数一阶微分,x方向(用于改进的Harris角点提取算法)ori_im = double(f) / 255; %unit8转化为64为双精度double64fx = [-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); Rmax = 0; % 图像中最大的R值k = 0.06; %k为常系数,经验取值范围为0.04~0.06 for i = 1 : height for j = 1 : width

Halcon表面划伤检测实例

Halcon表面划伤检测实例 *关闭活动图形窗口 dev_close_window () * 在程序执行中指定输出行为为off。 dev_update_window ('off') * **** * step: acquire image 步骤:获取图像 * ****读入文件名为'surface_scratch' 的图像到Image read_image (Image, 'surface_scratch') get_image_size (Image, Width, Height) *打开一个和Image宽高比一致的图像窗口 dev_open_window_fit_image (Image, 0, 0, Width, Width, WindowID) *设置窗口字体大小为12,字体类型为Courier,粗体不倾斜字体。 set_display_font (WindowID, 12, 'Courier', 'true', 'false') *设置填充模式为'margin' dev_set_draw ('margin') *定义输出轮廓线宽为4

dev_set_line_width (4) *显示Image到窗口 dev_display (Image) *WindowID窗口使用黑色字体在一个方框内显示按"F5"继续运行字体,并注册F5消息处理disp_continue_message (WindowID, 'black', 'true') stop () * **** * step: segment image 步骤:图像分割 * **** * -> using a local threshold 使用局部阈值 * 对Image进行7*7均值滤波 mean_image (Image, ImageMean, 7, 7) ********************************************************************* *得到的图像为: * * * *用均值滤波图像作为二值化阈值图像,返回小于灰度值小于该点阈值-5的图像。 dyn_threshold (Image, ImageMean, DarkPixels, 5, 'dark') *************************************** ****得到的区域为:

halcon学习笔记——实例篇 长度和角度测量+

halcon学习笔记——实例篇长度和角度测量实例二:长度和角度测量 素材图片: halcon代码: 1: *读取并截取图片 2: dev_close_window() 3: read_image (Image, 'D:/MyFile/halcon/长度和角度测量/图.png') 4: crop_rectangle1 (Image, ImagePart, 75, 0, 400, 400) 5: get_image_size (ImagePart, Width, Height) 6: dev_open_window (0, 0, Width, Height, 'black', WindowHandle) 7: dev_display (ImagePart) 8: 9: *获取图形的边界 10: threshold (ImagePart, Regions, 0, 112) 11: 12: *分离三角形和圆形

13: connection(Regions,ConnectedRegions) 14: sort_region(ConnectedRegions,SortedRegions,'upper_left','true','column') 15: select_obj(SortedRegions,Circle,1) 16: select_obj(SortedRegions,Triangle,2) 17: 18: *获取三角形各边的信息 19: skeleton(Triangle,TriangleSkeleton) 20: gen_contours_skeleton_xld(TriangleSkeleton,TriangleContours,1,'filter') 21: segment_contours_xld(TriangleContours,ContoursSplit,'lines_circles', 5, 4, 2) 22:select_contours_xld(ContoursSplit,SelectedContours, 'contour_length',100, 999, -0.5, 0.5) 23: fit_line_contour_xld (SelectedContours, 'tukey', -1, 10, 5, 2, RowBegin, ColBegin, RowEnd, ColEnd, Nr, Nc, Dist) 24: 25: *计算三角形角度 26:angle_ll (RowBegin[0], ColBegin[0], RowEnd[0], ColEnd[0], RowBegin[1], ColBegin[1], RowEnd[1], ColEnd[1], Angle1) 27:angle_ll (RowBegin[0], ColBegin[0], RowEnd[0], ColEnd[0], RowBegin[2], ColBegin[2], RowEnd[2], ColEnd[2], Angle2) 28:angle_ll (RowBegin[1], ColBegin[1], RowEnd[1], ColEnd[1], RowBegin[2], ColBegin[2], RowEnd[2], ColEnd[2], Angle3) 29: Angle1:=abs(deg(Angle1)) 30: Angle2:=abs(deg(Angle2)) 31: Angle3:=abs(deg(Angle3)) 32: 33: *获取圆的信息 34: area_center(Circle,AreaCircle, RowCircle, ColumnCircle) 35: 36: *计算圆心到三角形各边的距离 37: Distance := [] 38:for Index := 0 to 2 by 1 39:distance_pl (RowCircle, ColumnCircle, RowBegin[Index], ColBegin[Index], RowEnd[Index], ColEnd[Index], ThisDistance) 40: Distance := [Distance,ThisDistance] 41: endfor

Harris角点检测算法编程步骤及示例演示

Harris角点检测算法编程步骤及示例演示 也不说那么多废话了,要介绍啥背景意义之类的,角点检测,顾名思义,就是检测角点,最简单的就是两条线的交点了,还有比如下国际象棋的棋盘格子的交点之类的,反正就是检测这些点。 简单将Harris角点检测算法的思想说下,就是拿一个小窗在图像中移动,通过考察这个小窗口内图像灰度的平均变换值来确定角点。(1)如果窗口内区域图像的灰度值恒定,那么所有不同方向的偏移几乎不发生变化; (2)如果窗口跨越一条边,那么沿着这条边的偏移几乎不发生变化,但是与边垂直的偏移会发生很大的变化; (3)如果窗口包含一个孤立的点或者角点,那么所有不同方向的偏移会发生很大的变化。 下面给出具体数学推导: 设图像窗口平移量为(u,v),产生的灰度变化为E(u,v), 有E(u,v)=sum[w(x,y)[I(x+u,y+v)-I(x,y)]^2],其中w(x,y)为窗口函数, I(x+u,y+v)为平移后的灰度值,I(x,y)为平移前的灰度值。 有泰勒公式展开可得: I(x+u,y+v)=I(x,y)+Ix*u+Iy*v+O(u^2,v^2); Ix,Iy分别为偏微分,在图像中为图像的方向导数. 因此E(u,v)=sum[w(x,y) [Ix*u+Iy*v+O(u^2,v^2)]^2], 可以近似得到E(u,v)=sum[w(x,y) [Ix*u+Iy*v]^2],即 E(u,v)=[u,v][Ix^2,Ix*Iy;Ix*Iy,Iy^2][u,v]T

令M=[Ix^2,Ix*Iy;Ix*Iy,Iy^2],因此最后对角点的检测成了对矩阵M的特征值的分析了,令M其特征值为x1,x2; 当x1>>x2或者x2>>x1,则检测到的是边缘部分; 当x1,x2都很小,图像窗口在所有移动的方向上移动灰度级都无明显变化. 当X1,X2都很大时且相当,检测到的是角点。 编程时用x1,x2不方便,因此定义角点响应函数; R=det(M)-k(trace(M))^2; 其中det(M)为矩阵M的行列式,trace(M)为矩阵M的迹。 下面给出更具数学公式实际编程的步骤: 1.利用水平,竖直差分算子对图像的每个像素进行滤波以求得 Ix,Iy,进而求得M中的四个元素的值。 M=[Ix^2,Ix*Iy;Ix*Iy,Iy^2] 2.对M的四个元素进行高斯平滑滤波,为的是消除一些不必要 的孤立点和凸起,得到新的矩阵M。 3.接下来利用M计算对应每个像素的角点响应函数R,即: R=det(M)-k(trace(M))^2; 也可以使用改进的R: R=[Ix^2*Iy^2-(Ix*Iy)^2]/(Ix^2+Iy^2);里面没有随意给定的参数k,取值应当比第一个令人满意。 4.在矩阵R中,同时满足R(i,j)大于一定阈值threshold和R(i,j)

图像角点

角点检测技术方法概述 角点检测(Corner Detection)是计算机视觉系统中用来获得图像特征的一种方法,广泛应用于运动检测、图像匹配、视频跟踪、三维建模和目标识别等领域中。也称为特征点检测。 角点通常被定义为两条边的交点,更严格的说,角点的局部邻域应该具有两个不同区域的不同方向的边界。而实际应用中,大多数所谓的角点检测方法检测的是拥有特定特征的图像点,而不仅仅是“角点”。这些特征点在图像中有具体的坐标,并具有某些数学特征,如局部最大或最小灰度、某些梯度特征等。 现有的角点检测算法并不是都十分的鲁棒。很多方法都要求有大量的训练集和冗余数据来防止或减少错误特征的出现。角点检测方法的一个很重要的评价标准是其对多幅图像中相同或相似特征的检测能力,并且能够应对光照变化、图像旋转等图像变化。 Moravec角点检测算法 Moravec角点检测算法是最早的角点检测算法之一。该算法将角点定义为具有低“自相关性”的点。算法会检测图像的每一个像素,将像素周边的一个邻域作为一个patch,并检测这个patch和周围其他patch的相关性。这种相关性通过两个patch间的平方差之和(SSD)来衡量,SSD值越小则相似性越高。 如果像素位于平滑图像区域内,周围的patch都会非常相似。如果像素在边缘上,则周围的patch在与边缘正交的方向上会有很大差异,在与边缘平行的方向上则较为相似。而如果像素是各个方向上都有变化的特征点,则周围所有的patch都不会很相似。 Moravec会计算每个像素patch和周围patch的SSD最小值作为强度值,取局部强度最大的点作为特征点。 Harris角点检测算法 Moravec角点检测算法有几个很明显的缺陷: 1,强度值的计算并不是各向同性的,只有离散的8个45度角方向被考虑。因为patch的评议比较最多只有8个方向; 2,由于窗口是方形并且二元的,因此相应函数会有噪声; 3,对边缘的相应太简单,因为强度值尽取SSD的最小值;

数字图像处理角点检测方法研究毕业论文

数字图像角点特征检测方法研究

目录 引言 (3) 1 研究背景与发展 (6) 1.1研究背景 (6) 1.2研究现状和发展概述 (6) 1.3应用软件M ATLAB (7) 2 角点检测概念与原理 (9) 2.1角点的定义 (9) 2.2角点概念及特征 (9) 2.3角点检测意义 (9) 2.4角点检测原理 (10) 2.5角点检测技术的基本方法 (10) 2.5.1 基于模板的角点检测 (10) 2.5.2 基于边缘的角点检测 (11) 2.5.3 基于灰度变化的角点检测 (13) 3 角点算法概述 (14) 3.1角点检测的标准 (14) 3.2H ARRIS角点检测算子 (14) 3.2.1 Harris角点检测算子流程图 (19) 3.2.2 Harris角点检测算子的特点 (20) 3.2.3 Harris角点检测性质 (20) 3.2.4 Harris和Moravec算子角点检测实验结果 (21) 3.3一种改进的H ARRIS的算法 (23) 3.3.1试验结果 (24) 3.4S USAN角点检测算子 (25) 3.3.1 SUSAN角点检测一般步骤 (27) 3.3.2 Susan角点检测算子特点 (29) 3.3.3 Susan角点检测试验结果 (29) 4 其他算子简介 (33) 4.1小波变换算子 (33) 4.2F ORSTNER算子 (33) 4.3CSS角点检测算法 (35) 4.4ACSS角点检测算法 (36) 4.5各种角点检测算法的比较 (36) 结论 (39) 致谢 (41)

参考文献 (42) 附录1 HARRIS算法程序 (44) 附录2 MORA VEC算法程序 (46) 附录3 改进的HARRIS算法 (48) 附录4 SUSAN算法程序 (50)

角点检测算法综述

角点检测算法综述 范娜,俞利,徐伯夏 (中国航天科工集团第三研究院8357所天津300308) 摘要:角点作为图像的一个重要特征,它保留了图像绝大部分的特征信息。角点在三维场景重建、运动估计、目标跟踪以及图像配准与图像匹配等计算机视觉领域有着重要的作用。本文对角点检测算法的类别进行总结,对各类算法进行了详细介绍,并对近几年来各类算法发展与改进进行了总结。 关键词:特征信息;计算机视觉;角点检测 Survey of Corner Detection Algorithms FAN Na, YU Li, and XU Bo-xia (The 8357 Research Institute of the Third Research Academy of CASIC Tianjin 300308) Abstract:As a more important feature of image, corner contains voluminous information of image features.In the domain of computer vision, such as three-dimensional reconstruction, motion estimation, object tracking, image registration and image matching, corner of image play an important role.this paper attempt to summarize and detailedly introduce corner detection algorithms, and summarize the developments of these algorithms in recent years. Key words: Feature Information;Computer Vision;Corner Detection 1 引言 角点并没有明确的定义,一般将图像中亮度变化剧烈的点或图像边缘上曲率取极大值的点认为是角点。从形态上来说,角点包括L、T、Y、X和箭头型角点等。角点作为图像的重要特征,保留了图像的绝大部分的特征信息,又有效地减少了信息的数据量,从而有效地提高了运算速度以及匹配的可靠性。总结现有的角点检测算子的评价方法,总体上有以下几个标准[1]: (1)稳定性:即同一场景图像在亮度、对比度等因素变化的情况下,检测出的角点数目及位置应当稳定 (2)可靠性:即在算子的可变参数改变情况下,不影响生成的角点的质量,只改变检测出角点的数目;检测到的角点具有平移、旋转、伸缩不变性 (3)鲁棒性:即算法的抗噪性能,在一定的噪声干扰下,算子仍然具有很强的角点检测能力 (4)准确性:主要指不发生误检测以及角点位置定位准确 (5)高效性:是指算法的计算速度快慢,算法速度必须足够快以满足图像处理系统的要求 经过几十年的研究与探索,产生了许多检测角点的方法,但大致可以分为四类:基于灰度图像的角点检测算法、基于二值图像的角点检测算法、基于边缘特征的角点检测算法以及支持矢量机角点检测算法。本文中

harris角点检测与ncc匹配

harris角点检测与ncc匹配 file1:-------------------------------------------------------------------------------------- function [y1,y2,r,c]=harris(X) % 角点的检测,利用harris 算法 % 输出的是一幅图像 % [result,cnt,r,c]=harris(X) % clc,clear all; % filename='qiao1.bmp'; % X= imread('filename.bmp'); % 读取图像 % Info=imfinfo(filename); %这个要习惯用 % % f=rgb2gray(X); f=X; % ori_im=double(f)/255; %unit8转化为64为双精度double64 fx = [-2 -1 0 1 2]; % x方向梯度算子(用于Harris角点提取算法) Ix = filter2(fx,ori_im); % x方向滤波善于使用filter % 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',[10 10 ],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);

matlab练习程序(Harris角点检测)

close all; clear all; clc; img=imread('rice.png'); imshow(img); [m n]=size(img); tmp=zeros(m+2,n+2); tmp(2:m+1,2:n+1)=img; Ix=zeros(m+2,n+2); Iy=zeros(m+2,n+2); E=zeros(m+2,n+2); Ix(:,2:n)=tmp(:,3:n+1)-tmp(:,1:n-1); Iy(2:m,:)=tmp(3:m+1,:)-tmp(1:m-1,:); Ix2=Ix(2:m+1,2:n+1).^2; Iy2=Iy(2:m+1,2:n+1).^2; Ixy=Ix(2:m+1,2:n+1).*Iy(2:m+1,2:n+1); h=fspecial('gaussian',[77],2); Ix2=filter2(h,Ix2); Iy2=filter2(h,Iy2); Ixy=filter2(h,Ixy); Rmax=0; R=zeros(m,n); for i=1:m for j=1:n M=[Ix2(i,j) Ixy(i,j);Ixy(i,j) Iy2(i,j)]; R(i,j)=det(M)-0.06*(trace(M))^2; if R(i,j)>Rmax Rmax=R(i,j); end end end re=zeros(m+2,n+2); tmp(2:m+1,2:n+1)=R; img_re=zeros(m+2,n+2); img_re(2:m+1,2:n+1)=img;

for i=2:m+1 for j=2:n+1 if tmp(i,j)>0.01*Rmax &&... tmp(i,j)>tmp(i-1,j-1) && tmp(i,j)>tmp(i-1,j) && tmp(i,j)>tmp(i-1,j+1) &&... tmp(i,j)>tmp(i,j-1) && tmp(i,j)>tmp(i,j+1) &&... tmp(i,j)>tmp(i+1,j-1) && tmp(i,j)>tmp(i+1,j) && tmp(i,j)>tmp(i+1,j+1) img_re(i,j)=255; end end end figure,imshow(mat2gray(img_re(2:m+1,2:n+1)));

Harris角点检测算法

Harris角点检测算法 软工1303陈伟峰 1.算法介绍 1988年Harris在Moravec算法的基础上提出了Harris算法。Harris算法是对moravec算法的改进和提高,harris算法使用高斯函数替代moravec算法的二值窗口函数,另外在moravec中只考虑每个45度的方向的灰度变化,二harris利用泰勒展开式,去近似计算每个方向的灰度变化情况。 2.Harris算法 (1)算法思想 Harris角点检测算法思想就是拿一个小窗在图像中移动,通过考察这个小窗口内图像灰度的平均变换值来确定角点。相应的会有三种情况发生。 (1)如果窗口内区域图像的灰度值恒定,那么所有不同方向的偏移几乎不发生变化,这个区域属于平坦区域; (2)如果窗口跨越一条边,那么沿着这条边的偏移几乎不发生变化,但是与边垂直的偏移会发生很大的变化,这个区域属于边缘区域; (3)如果窗口包含一个孤立的点或者角点,那么所有不同方向的偏移会发生很大的变化。 图1 Harris角点检测基本思想 (2)算法推导 假设窗口W发生位置偏移(u,v);比较偏移前后窗口中每一个像素点的灰度变化值;使用灰度误差平方和来构造一个误差函数E(u,v),其中的窗口函数是用来滤波的。 平坦区域: 任意方向移动,无灰度变化边缘: 沿着边缘方向移 动,无灰度变化 角点: 沿任意方向移动, 明显灰度变化

其中w(x,y)为窗口函数,I(x+u,y+v)为平移后的灰度值,I(x,y)为平移前的灰度值。 由Taylor展开式可以得到: 我们定义: H称为自相关矩阵, λmax和λmin是自相关矩阵的特征值。如图2所示,其中E(u,v)是一个二次型函数,二次型函数的本质就是一个椭圆,椭圆的扁率和尺寸是由H的特征值λmax和λmin决定的,椭圆的方向由H的特征向量决定。

角点检测方法总结

角点检测(Corner Detection) 角点检测(Corner Detection)是计算机视觉系统中用来获得图像特征的一种方法,广泛应用于运动检测、图像匹配、视频跟踪、三维建模和目标识别等领域中。也称为特征点检测。角点通常被定义为两条边的交点,更严格的说,角点的局部邻域应该具有两个不同区域的不同方向的边界。而实际应用中,大多数所谓的角点检测方法检测的是拥有特定特征的图像点,而不仅仅是“角点”。这些特征点在图像中有具体的坐标,并具有某些数学特征,如局部最大或最小灰度、某些梯度特征等。现有的角点检测算法并不是都十分的鲁棒。很多方法都要求有大量的训练集和冗余数据来防止或减少错误特征的出现。 角点检测方法的一个很重要的评价标准是其对多幅图像中相同或相似特征的检测能力,并且能够应对光照变化、图像旋转等图像变化。角点检测的方法有:Moravec角点检测算法,FAST角点检测算法,Harris角点检测法和shi_tomas角点检测法等。 1.1.1Moravec角点检测算法 Moravec角点检测算法Moravec角点检测算法是最早的角点检测算法之一。该算法将角点定义为具有低“自相关性”的点。算法会检测图像的每一个像素,将像素周边的一个邻域作为一个patch,并检测这个patch和周围其他patch的相关性。这种相关性通过两个patch间的平方差之和(SSD)来衡量,SSD值越小则相似性越高。如果像素位于平滑图像区域内,周围的patch都会非常相似。如果像素在边缘上,则周围的patch在与边缘正交的方向上会有很大差异,在与边缘平行的方向上则较为相似。而如果像素是各个方向上都有变化的特征点,则周围所有的patch都不会很相似。Moravec会计算每个像素patch和周围patch的SSD 最小值作为强度值,取局部强度最大的点作为特征点。Moravec角点检测算法有几个很明显的缺陷:1,强度值的计算并不是各向同性的,只有离散的8个45 度角方向被考虑。因为patch的评议比较最多只有8个方向;2,由于窗口是方形并且二元的,因此相应函数会有噪声;3,对边缘的相应太简单,因为强度值尽取SSD的最小值;

halcon+vb检测光学玻璃元件实例

halcon+vb检测光学玻璃元件实例发布于:2013-08-20 10:05 自然光下的玻璃元件实图 环型光源下的玻璃元件图 halcon 代码

open_framegrabber ('DirectShow', 1, 1, 0, 0, 0, 0, 'default', 8, 'gray', -1, 'false', 'def ault', 'Microvision MV-1400UC Digital Camera', 0, -1, AcqHandle) *打开摄像头 grab_image_start (AcqHandle, -1) *开始铺货图像 grab_image_async (Image, AcqHandle, -1) *捕获第一帧图像 get_image_size (Image, Width, Height) *获得图像大小 dev_open_window (0, 0, Width/6, Height/6, 'black', WindowHandle) *打开适合大小的窗口,应为相机是1400万像素所以图想太大窗口被我缩小了。 while (true) *无限循环 try grab_image_async (Image, AcqHandle, -1) *捕获一帧图像 dev_display (Image) *显示图像 smooth_image(Image, ImageSmooth, 'deriche2', 0.5) *平滑图像 threshold (ImageSmooth, Regions,125, 255) *阈值处理 *这个表面有些灰尘呵呵不过可以当噪点过滤掉的 area_center (Regions, Area1, Row3, Column3) *获得区域中心点 gen_contour_region_xld(Regions, Contours, 'border_holes') *将阈值处理后获得的区域转换成xld smooth_contours_xld(Contours, SmoothedContours, 5) *平滑xld

Harris角点检测算法优化

Harris角点检测算法优化 一、综述 用 Harris 算法进行检测,有三点不足:(1)该算法不具有尺度不变性; (2 )该算法提取的角点是像素级的;(3 )该算法检测时间不是很令人满意。 基于以上认识,我主要针对第(3 )点对Harris 角点检测算法提出了改进。 二、改进 Harris算法原理 在介绍我的方法之前,我先提出如下概念:图像区域像素的相似度。我们知道, Harris 角点检测是基于图像像素灰度值变化梯度的,灰度值图像的角点附近,是其像素灰度值变化非常大的区域,其梯度也非常大。换句话说,在非角点位置邻域里,各点的像素值变化不大,甚至几乎相等,其梯度相对也比较小。从这个角度着眼,我提出了图像区域像素的相似度的概念,它是指检测窗口中心点灰度值与其周围n邻域内其他像素点灰度值的相似程度,这种相似程度是用其灰度值之差来描述的。如果邻域内点的灰度值与中心点Image (i,j) 的灰度值之差的绝对值在一个阈值t 范围内,那我就认为这个点与中心点是相似的。与此同时,属于该Image (i,j)点的相似点计数器nlike(i, j) 也随之加一。在Image (i,j) 点的n邻域全部被遍历一边之后,就能得到在这个邻域范围内与中心点相似的点个数的统计值nlike(i,j)。根据nlike(i,j) 的大小,就可以判断这个中心点是否可能为角点。 由于我选择3*3 的检测窗口,所以, 对于中心像素点 , 在下面的讨论中只考虑其8 邻域内像素点的相似度。计算该范围的像素点与中心像素点的灰度值之差的绝对值 ( 记为Δ) , 如果该值小于等于设定的阈值( 记为t) , 则认为该像素点与目标像素点相似。

moravec角点检测算法

MORA VEC算法提取角点特征 1.角点 图像灰度值在各个方向变化都比较大的点,即认为是角点。Moravec角点量是指在各个方向上灰度变化的最小值,当在某个方向上,灰度值的变化最小,并且这个最小值也大于某个设定的阈值,那么认为这个点就是一个角点。 2.MORA VEC算法介绍 Moravec角点检测算法的思想是:在图像中设计一个局部检测窗口,当该窗口沿各个方向作微小移动时,考查窗口的平均能量变化,当该能量变化值超过设定的阈值时,就将窗口的中心像素点提取为角点。 本实验的算法的步骤如下: (1) 对每一像素(c,r),计算以其为中心的m*m的影像窗口中0°、45°、90°、 135°四个方向相邻像素灰度差的平方和V1、V2、V3、V4。 其中,k为m/2的模。计算V1、V2、V3、V4的最小值作为该像素点的兴趣值。 (2)给定经验阈值T,将兴趣值大于阈值的点作为候选点。 (3)新建一个窗口,窗口大小可不同于计算兴趣值窗口的大小。选择候选点中 的极值点作为特征点,即在一定范围内,取兴趣值最大者为特征点。此过程也称为抑制局部非最大。 综上,Moravec算子是在四个主要方向上,选择具有最大—最小方差的点作为特征点。 3.实验过程 本实验采用5*5的窗口大小,设置了0°、45°、90°、135°四个方向的移动,设置经验阀值为4000,新窗口为8*8,进行实验。 实验代码如下:

img=imread('1.png');%读取图像 [m,n,d]=size(img); %获取数据大小 if (d==3) %转换为灰度图像 img=rgb2gray(img); end window=5; w=floor(window/2); %设置窗口大小 V=zeros(m,n); for i=(w+1):(m-w-1) for j=(w+1):(n-w-1) V1=0;V2=0;V3=0;V4=0; %设置初始值 for k=(-w):(w-1) %计算四个方向的值 V1=V1 + (double(img(i+k,j))-double(img(i+k+1,j))).^2; V2=V2 + (double(img(i+k,j+k))-double(img(i+k+1,j+k+1))).^2; V3=V3 + (double(img(i,j+k))-double(img(i,j+k+1))).^2; V4=V4 + (double(img(i+k,j-k))-double(img(i+k+1,j-k+1))).^2; V(i,j)=min([V1,V2,V3,V4]); end end end T=1000;%经验阀值 V(V

Harris角点检测matlab代码

Harris角点检测代码 %%%Prewitt Operator Corner Detection.m %%%时间优化--相邻像素用取差的方法 %% clear; for nfigure=1:6 t=input('input your figure’s name(including its extern name):','s'); % t1 = tic; %测算时间 FileInfo = imfinfo(t); % 保存图像的所有信息 Image = imread(t); % 读取图像 % 转为灰度值图像(Intensity Image) if(strcmp('truecolor',FileInfo.ColorType) == 1) %转为灰度值图像 Image = im2uint8(rgb2gray(Image)); end 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)之间,才确认它们为相似点,相似点不在候选角点之列

基于角点检测的图像处理方法

基于角点检测的图像处理方法研究 摘要:本文主要研究了图像的角点检测方法,在计算机视觉中,机器视觉和图像处理后总,特征提取都是一个重要的方向。而角点又是图像的一个重要局部特征,它决定了图像中目标的形状,因此在图像匹配,目标描述与识别及运动估计,目标跟踪等领域,角点提取都具有重要的意义。角点的信息含量很高,可以对图像处理提供足够的约束,减少运算量,极大地提高运算速度。角点检测问题是图像处理领域的一个基础问题,是低层次图像处理的一个重要方法。角点检测的目的是为了匹配,而匹配的效率取决于角点的数量。Harris角点检测原理是对于一副图像,角点于自相关函数的曲率特性有关,自相关函数描述了局部局部图像灰度的变化程度。在角点处,图像窗口的偏移将造成自相关函数(图像灰度的平均变化)的显著变化。harris算子是一种简单的点特征提取算子,这种算子受信号处理中自相关函数的启发,给出与自相关函数相联系的矩阵M。M阵的特征值是自相关函数的一个阶曲率,如果两个曲率值都高,那么久认为该点是特征点。 关键词:角点,角点检测,Harris角点

ABSTRACT This paper studies the image of the corner detection methods in computer vision, machine vision and image processing general, feature extraction is an important direction. The corner is an important local feature image, which determines the shape of the target image, so the image matching, object description and recognition and motion estimation, target tracking and other fields, corner detection are of great significance. Corner of the information content is high, image processing can provide sufficient constraints to reduce the amount of computation greatly improve the processing speed. Corner detection is a basic image processing problems, low-level image processing is an important way. Corner detection is designed to match the efficiency of the matching depends on the number of corners。Harris corner detection principle is that for an image, corner point on the curvature properties of the autocorrelation function is related to the local auto-correlation function describes the degree of local image intensity changes. In the corner point, the offset will result in the image window autocorrelation function (the average image intensity changes) change significantly. arris operator is a simple point feature extraction operator, this operator by the signal processing in the autocorrelation function of inspiration, given the autocorrelation function associated with the matrix M. Eigenvalues of matrix M is an order autocorrelation function of the curvature, if the two curvature values are high, for so long that the point is the feature points. Key word: Corner , Corner detection , Harris Corner

相关主题
文本预览
相关文档 最新文档