文档库 最新最全的文档下载
当前位置:文档库 › 霍夫变换

霍夫变换

霍夫变换
霍夫变换

‘IEEE Transactions on Pattern Recognition And Machine Intelligence’

‘IEEE Transactions on Image Processing’

是最重要的两本,其它的如ICCV、CVPR、ECCV、NIPS、BMVC等的会议文章也非常好。

最小二乘线性拟合算法、随机霍夫变换、局部霍夫变换、

canny算子边缘检测、图像增强

霍夫变换

霍夫变换(Hough Transform)是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法。主要用来从图像中分离出具有某种相同特征的几何形状(如,直线,圆等)。最基本的霍夫变换是从黑白图像中检测直线(线段)。

详细内容

我们先看这样一个问题:设已知一黑白图像上画了一条直线,要求出这条直线所在的位置。我们知道,直线的方程可以用y=k*x+b 来表示,其中k和b是参数,分别是斜率和截距。过某一点(x0,y0)的所有直线的参数都会满足方程y0=kx0+b。即点(x0,y0)确定了一组直线。方程y0=kx0+b在参数k--b平面上是一条直线(你也可以是方程b=-x0*k+y0对应的直线)。这样,图像x--y平面上的一个前景像素点就对应到参数平面上的一条直线。我们举个例子说明解决前面那个问题的原理。设图像上的直线是y=x, 我们先取上面的三个点:A(0,0), B(1,1), C(2,2)。可以求出,过A点的直线的参数要满足方程b=0, 过B点的直线的参数要满足方程1=k+b, 过C点的直线的参数要满足方程2=2k+b, 这三个方程就对应着参数平面上的三条直线,而这三条直线会相交于一点(k=1,b=0)。同理,原图像上直线y=x上的其它点(如(3,3),(4,4)等) 对应参数平面上的直线也会通过点(k=1,b=0)。

应用

这个性质就为我们解决问题提供了方法:首先,我们初始化一块缓冲区,对应于参数

平面,将其所有数据置为0.对于图像上每一前景点,求出参数平面对应的直线,把这

直线上的所有点的值都加1。最后,找到参数平面上最大点的位置,这个位置就是原

图像上直线的参数。上面就是霍夫变换的基本思想。就是把图像平面上的点对应到参

数平面上的线,最后通过统计特性来解决问题。假如图像平面上有两条直线,那么最

终在参数平面上就会看到两个峰值点,依此类推。在实际应用中,y=k*x+b形式的直

线方程没有办法表示x=c形式的直线(这时候,直线的斜率为无穷大)。所以实际应用

中,是采用参数方程p=x*cos(theta)+y*sin(theta)。这样,图像平面上的一个点就

对应到参数p—theta平面上的一条曲线上。其它的还是一样。

应用实例1

在看下面一个问题:我们要从一幅图像中检测出半径已知的圆形来。这个问题比前一个还要直观。我们可以取和图像平面一样的参数平面,以图像上每一个前景点为圆心,以已知的半径在参数平面上画圆,并把结果进行累加。最后找出参数平面上的峰值点,这个位置就对应了图像上的圆心。在这个问题里,图像平面上的每一点对应到参数平面上的一个圆。把上面的问题改一下,假如我们不知道半径的值,而要找出图像上的圆来。这样,一个办法是把参数平面扩大称为三维空间。就是说参数空间变为x-y-R 三维,对应圆的圆心和半径。图像平面上的每一点就对应于参数空间中每个半径下的一个圆,这实际上是一个圆锥。最后当然还是找参数空间中的峰值点。不过,这个方法显然需要大量的内存,运行速度也会是很大问题。有什么更好的方法么?我们前面假定的图像都是黑白图像(2值图像),实际上这些2值图像多是彩色或灰度图像通过边缘提取来的。我们前面提到过,图像边缘除了位置信息,还有方向信息也很重要,这里就用上了。根据圆的性质,圆的半径一定在垂直于圆的切线的直线上,也就是说,在圆上任意一点的法线上。这样,解决上面的问题,我们仍采用2维的参数空间,对于图像上的每一前景点,加上它的方向信息,都可以确定出一条直线,圆的圆心就在这条直线上。这样一来,问题就会简单了许多。

应用实例2

接下来还有许多类似的问题,如检测出椭圆,正方形,长方形,圆弧等等。这些方法大都类似,关键就是需要熟悉这些几何形状的数学性质。霍夫变换的应用是很广泛的,比如我们要做一个支票识别的任务,假设支票上肯定有一个红颜色的方形印章,我们可以通过霍夫变换来对这个印章进行快速定位,在配合其它手段进行其它处理。霍夫变换由于不受图像旋转的影响,所以很容易的可以用来进行定位。

霍夫变换有许多改进方法,一个比较重要的概念是广义霍夫变换,它是针对所有曲线的,用处也很大。就是针对直线的霍夫变换也有很多改进算法,比如前面的方法我们没有考虑图像上的这一直线上的点是否连续的问题,这些都要随着应用的不同而有优化的方法。

%% 利用hough变换检测直线

clear all

clc

close all

%% 读入图片======================================================

In = imread('image.tif');

subplot(221)

imshow(In);

title('original image');

%% 参数设定=======================================================

k = 1; % 检测直线条数(即一个方向的直线)

%% 边缘提取=======================================================

BW = edge(In, 'canny');

subplot(222)

imshow(BW);

title('edge image')

%% hough变换=========================================================

[H, T, R] = hough(BW, 'RhoResolution', 0.5,'Theta',-90:0.5:89.5); % hough变换subplot(223)

imshow(H,'XData',T,'YData',R,'InitialMagnification','fit')

title('Hough transform')

xlabel('\theta'),ylabel('\rho')

axis on, axis normal,hold on;

%% 峰值检测=============================================================

P = houghpeaks(H,k); % 找到H中的最大的几个值所在H中的坐标

% 具体几个由后面的参数决定

% 每一个点都对应一条线段

% 但是并不是最后会找到这么多条线段

% 因为由于后面houghlines函数可能会合并和舍去线段plot(T(P(:,2)),R(P(:,1)),'s','color','red'); % 在theta-rho坐标中标出峰值点%% 直线检测============================================================== subplot(224),imshow(In),hold on

title('Display the lines')

lines = houghlines(BW,T,R,P); % 返回一个结构体,存放的是每个线段的始末点坐标 % 以及在theta-rho坐标系下的坐标。

% 默认情况下,两条线断的距离低于20时就合并 % 如果一条线段的长度小于40时就舍去

% 用法:lines = houghlines(BW,T,R,P,'FillGap',20,'MinLength',40) max_len = 0;

% 找到并绘出线段

for k = 1 : length(lines)

xy = [lines(k).point1;lines(k).point2]; % xy为第k条线段始末点的坐标矩阵% 画出线段

plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green')

% 画出线段起始点

plot(xy(1,1),xy(1,2),'x','LineWidth',2,'Color','yellow')

plot(xy(2,1),xy(2,2),'x','LineWidth',2,'Color','red')

% 判断最长线段

len = norm(lines(k).point1-lines(k).point2); % 计算二范数,即线段长度

% 找最长的线段,将其始末点坐标存入xy_long矩阵中

if len > max_len

max_len = len;

xy_long = xy;

end

end

% 突出最长线段

plot(xy_long(:,1),xy_long(:,2),'LineWidth',2,'Color','blue')

Hough变换的原理:

将图像从图像空间变换至参数空间,变换公式如下:

变换以后,图像空间与参数空间存在以下关系:图像空间中的一点在参数空间是一条曲线,而图像空间共线的各点对应于参数空间交于一点的各条曲线。

下面使用Matlab实现Hough变换对图像中的直线划痕进行检测 .

1.close all;

2.clear all;

3.I = imread('scratch.tif');

4.figure;

5.subplot(1,3,1);

6.imshow(I);

7.BW = edge(I,'canny');%Canny方法提取图像边界,返回二值图像(边界1,否则0)

8.[H,T,R] = hough(BW);%计算二值图像的标准霍夫变换,H为霍夫变换矩阵,I,R为计算霍夫变

换的角度和半径值

9.subplot(1,3,2);

10.imshow(H,[],'XData',T,'YData',R,'InitialMagnification','fit');%hough变换的图

11.xlabel('\theta'), ylabel('\rho');

12.axis on,axis square,hold on;

13.P = houghpeaks(H,3);%提取3个极值点

14.x = T(P(:,2));

15.y = R(P(:,1));

16.plot(x,y,'s','color','white');%标出极值点

17.lines=houghlines(BW,T,R,P);%提取线段

18.subplot(1,3,3);

19.imshow(I), hold on;

20.for k = 1:length(lines)

21.xy = [lines(k).point1; lines(k).point2];

22. plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green');%画出线段

23.plot(xy(1,1),xy(1,2),'x','LineWidth',2,'Color','yellow');%起点

24.plot(xy(2,1),xy(2,2),'x','LineWidth',2,'Color','red');%终点

25.end

https://www.wendangku.net/doc/0419448281.html,/content/14/0404/14/16239681_36 6361318.shtml

梯度:在二元函数的情形,设函数z=f(x,y)在平面区域D内具有一阶连续偏导数,则对于每一点P(x,y)∈D,都可以定出一个向量(δf/x)*i+(δf/y)*j;这向量称为函数z=f(x,y)在点

P(x,y)的梯度,记作gradf(x,y)。类似的对三元函数也可以定义一个:(δf/x)*i+(δf/y)*j+(δf/z)*k 记为grad[f(x,y,z)]。梯度本意是一个向量(矢量),当某一函数在某点处沿着该方向的方向导数取得该点处的最大值,即函数在该点处沿方向变化最快,变化率最大(为该梯度的模)。

边缘检测

边缘检测目的是标识数字图像中亮度变化明显的点。边缘检测是图像处理和计算机视觉中,尤其是特征提取中的一个研究领域。边缘检测的实质是采用某种算法来提取出图像中对象与背景间的交界线。图像属性中的显著变化通常反映了属性的重要事件和变化。图像边缘检测大幅度地减少了数据量,并且剔除了可以认为不相关的信息,保留了图像重要的结构属性。有许多方法用于边缘检测,它们的绝大部分可以划分为两类:基于查找和基于零穿越。基于查找的方法通过寻找图像一阶导数中的最大和最小值来检测边界,通常是将边界定位在梯度最大的方向。基于零穿越的方法通过寻找图像二阶导数零穿越来寻找边界,通常是Laplacian 过零点或者非线性差分表示的过零点。

边缘可能与视角有关——也就是说边缘可能随着视角不同而变化,典型地反映在场

景、物体的几何形状一个将另一个遮挡起来,也可能与视角无关——这通常反映被观

察物体的属性如表面纹理和表面形状。在二维乃至更高维空间中,需要考虑透视投影

的影响。一个典型的边界可能是,例如一块红色和一块黄色之间的边界,与此相反的

是边线可能是在另外一种不变的背景上的少数不同颜色的点。在边线的每一边都有一

个边缘。在许多图像处理的应用中边缘都起着非常重要的作用。然而,在最近几年,

不明显依赖于边缘检测作为预处理的计算机视觉处理方法研究取得了一些实质性的研

究成果。

检测边缘

如果将边缘认为是一定数量点亮度发生变化的地方,那么边缘检测大体上就是计算这

个亮度变化的导数。为简化起见,我们可以先在一维空间分析边缘检测。在这个例子

中,我们的数据是一行不同点亮度的数据。例如,在下面的1维数据中我们可以直观

地说在第4与第5个点之间有一个边界:除非场景中的物体非常简单并且照明条件得

到了很好的控制,否则确定一个用来判断两个相邻点之间有多大的亮度变化才算是有

边界的阈值,并不是一件容易的事。

有许多用于边缘检测的方法, 他们大致可分为两类:基于搜索和基于零交叉。基于搜

索的边缘检测方法首先计算边缘强度,通常用一阶导数表示,例如梯度模,然后用计

算估计边缘的局部方向,通常采用梯度的方向,并利用此方向找到局部梯度模的最大

值。基于零交叉的方法找到由图像得到的二阶导数的零交叉点来定位边缘。通常用拉

普拉斯算子或非线性微分方程的零交叉点。

滤波做为边缘检测的预处理通常是必要的,通常采用高斯滤波。

已发表的边缘检测方法应用计算边界强度的度量,这与平滑滤波有本质的不同。正如

许多边缘检测方法依赖于图像梯度的计算,他们用不同种类的滤波器来估计x-方向和

y-方向的梯度。

计算一阶导数

许多边缘检测操作都是基于亮度的一阶导数——这样就得到了原始数据亮度的梯度。使用这个信息我们能够在图像的亮度梯度中搜寻峰值。如果I(x) 表示点x 的亮度,I′(x) 表示点x 的一阶导数(亮度梯度),这样我们就会发现:对于更高性能的图像处理来说,一阶导数能够通过带有掩码的原始数据(1维)卷积计算得到。

计算二阶导数

其它一些边缘检测操作是基于亮度的二阶导数。这实质上是亮度梯度的变化率。在理想的连续变化情况下,在二阶导数中检测过零点将得到梯度中的局部最大值。另一方面,二阶导数中的峰值检测是边线检测,只要图像操作使用一个合适的尺度表示。如上所述,边线是双重边缘,这样我们就可以在边线的一边看到一个亮度梯度,而在另一边看到相反的梯度。这样如果图像中有边线出现的话我们就能在亮度梯度上看到非常大的变化。为了找到这些边线,我们可以在图像亮度梯度的二阶导数中寻找过零点。如果I(x) 表示点x 的亮度,I′′(x) 表示点x 亮度的二阶导数,那么:

同样许多算法也使用卷积掩码快速处理图像数据:步骤:

①滤波:边缘检测算法主要是基于图像强度的一阶和二阶导数,但导数的计算对噪声很敏感,因此必须使用滤波器来改善与噪声有关的边缘检测器的性能。需要指出,大多数滤波器在降低噪声的同时也导致了边缘强度的损失,因此,增强边缘和降低噪声之间需要折中。

②增强:增强边缘的基础是确定图像各点邻域强度的变化值。增强算法可以将邻域(或局部)强度值有显著变化的点突显出来。边缘增强一般是通过计算梯度幅值来完成的。

③检测:在图像中有许多点的梯度幅值比较大,而这些点在特定的应用领域中并不都是边缘,所以应该用某种方法来确定哪些点是边缘点。最简单的边缘检测判据是梯度幅值阈值判据。

④定位:如果某一应用场合要求确定边缘位置,则边缘的位置可在子像素分辨率上来估计,边缘的方位也可以被估计出来。在边缘检测算法中,前三个步骤用得十分普遍。这是因为大多数场合下,仅仅需要边缘检测器指出边缘出现在图像某一像素点的附近,而没有必要指出边缘的精确位置或方向。

边缘检测的实质是采用某种算法来提取出图像中对象与背景间的交界线。我们将边缘定义为图像中灰度发生急剧变化的区域边界。图像灰度的变化情况可以用图像灰度分布的梯度来反映,因此我们可以用局部图像微分技术来获得边缘检测算子。经典的边缘检测方法,是通过对原始图像中像素的某小邻域构造边缘检测算子来达到检测边缘这一目的的。

简单模型

自然界图像的边缘并不总是理想的阶梯边缘。相反,它们通常受到一个或多个下面

所列因素的影响:1)有限场景深度带来的聚焦模糊2)非零半径光源产生的阴影带来

的半影模糊3)光滑物体边缘的阴影4)物体边缘附近的局部镜面反射或者漫反射。

尽管下面的模型不很完美,但是误差函数erf 是常被用于实际应用中边缘模糊效果的建模。这样,一个在位置0 有一个边界的一维图像f 可以用下面的模型来表示,其中σ 被称为边缘模糊度:这样,在边界的左侧亮度是:右侧亮度是:注意f 可以写为卷积:其中gσ 是标准偏差σ 的高斯核,u 是下面定义的一个阶跃函数:

阈值确定

一旦我们计算出导数之后,下一步要做的就是给出一个阈值来确定哪里是边缘位置。阈值越低,能够检测出的边线越多,结果也就越容易受到图片噪声的影响,并且越容易从图像中挑出不相关的特性。一个高的阈值将会遗失细的或者短的线段。一个常用的这种方法是带有滞后作用的阈值选择。这个方法使用不同的阈值去寻找边缘。首先

使用一个阈值上限去寻找边线开始的地方。一旦找到了一个开始点,我们在图像上逐

点跟踪边缘路径,当大于门槛下限时一直纪录边缘位置,直到数值小于下限之后才停

止纪录。这种方法假设边缘是连续的界线,并且我们能够跟踪前面所看到的边缘的模

糊部分,而不会将图像中的噪声点标记为边缘。

边缘检测算子

一阶::Roberts Cross算子,Prewitt算子,Sobel算子, Kirsch算子,罗盘算子;

二阶:Marr-Hildreth,在梯度方向的二阶导数过零点,Canny算子,Laplacian算子。Canny算子(或者这个算子的变体)是最常用的边缘检测方法。在Canny 创造性的

工作中,他研究了设计一个用于边缘检测最优预平滑滤波器中的问题,后来他说明这

个滤波器能够很好地被一阶高斯导数核优化。另外Canny 引入了非最大抑制概念,

它是说边缘定义为在梯度方向具有最大梯度值的点。在一个离散矩阵中,非最大抑制

阶梯能够通过一种方法来实现,首先预测一阶导数方向、然后把它近似到45度的倍

数、最后在预测的梯度方向比较梯度幅度。

罗盘算子是斯坦福大学的Ruzon在1999年提出的一个新的算子,据实验以及报道,

性能超过Canny算子。

Sobel算子

一、Sobel边缘检测算子

l 在讨论边缘算子之前,首先给出一些术语的定义:

l (1)边缘:灰度或结构等信息的突变处,边缘是一个区域的结束,也是另一个区域的开始,利用该特征可以分割图像。

l (2)边缘点:图像中具有坐标[x,y],且处在强度显著变化的位置上的点。

l (3)边缘段:对应于边缘点坐标[x,y]及其方位,边缘的方位可能是梯度角。

二、Sobel算子的基本原理

l Sobel算子是一阶导数的边缘检测算子,在算法实现过程中,通过3×3模板作为核与图像中的每个像素点做卷积和运算,然后选取合适的阈值以提取边缘。

l 采用3×3邻域可以避免在像素之间内插点上计算梯度。Sobel算子也是一种梯度幅值,即:l 其中的偏导数Sx 和Sy可用卷积模板来实现。

Sx=(Z1+2Z2+Z3)-(Z7+2Z8+Z9)

Sy=(Z1+2Z4+Z7)-(Z3+2Z6+Z9)

l Sobel算子算法的优点是计算简单,速度快。但是由于只采用了2个方向的模板,只能检测水平和垂直方向的边缘,因此这种算法对于纹理较为复杂的图像,其边缘检测效果就不是很理想。该算法认为:凡灰度新值大于或等于阈值的像素点时都是边缘点。这种判断欠合理,会造成边缘点的误判,因为许多噪声点的灰度值也很大。

三、模板方向的改变

核心公式

该算子包含两组3x3的矩阵,分别为横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。如果以A代表原始图像,Gx及Gy分别代表经纵向及横向边缘检测的图像,其公式如下:

图像的每一个像素的横向及纵向梯度近似值可用以下的公式结合,来计算梯度的大小。

然后可用以下公式计算梯度方向。

在以上例子中,如果以上的角度Θ等于零,即代表图像该处拥有纵向边缘,左方较右方暗。算子描述

在边缘检测中,常用的一种模板是Sobel 算子。Sobel 算子有两个,一个是检测水平边缘的;另一个是检测垂直边缘的。与Prewitt算子相比,Sobel算子对于象素的位置的影响做了加权,可以降低边缘模糊程度,因此效果更好。

Sobel算子另一种形式是各向同性Sobel(Isotropic Sobel)算子,也有两个,一个是检测水平边缘的,另一个是检测垂直边缘的。各向同性Sobel算子和普通Sobel算子相比,它的位置加权系数更为准确,在检测不同方向的边沿时梯度的幅度一致。将Sobel算子矩阵中的所有2改为根号2,就能得到各向同性Sobel的矩阵。

由于Sobel算子是滤波算子的形式,用于提取边缘,可以利用快速卷积函数,简单有效,因此应用广泛。美中不足的是,Sobel算子并没有将图像的主体与背景严格地区分开来,换言之就是Sobel算子没有基于图像灰度进行处理,由于Sobel算子没有严格地模拟人的视觉生理特征,所以提取的图像轮廓有时并不能令人满意。在观测一幅图像的时候,我们往往首先注意的是图像与背景不同的部分,正是这个部分将主体突出显示,基于该理论,我们给出了下面阈值化轮廓提取算法,该算法已在数学上证明当像素点满足正态分布时所求解是最优的。[1]

Sobel算子图像边缘检测的MATLB程序实现

l >> f=imread('peppers.png');

l >> f=rgb2gray(f);

l >> f=im2double(f);

l >> figure,imshow(f),title('原始图像');

l >> [SFST Threshold] =edge(f,'sobel','horizontal');

l >> figure,imshow(SFST),title(' 水平图像边缘检测');

l >> [VSFAT Threshold]=edge(f,'sobel','vertical');

l >> figure,imshow(VSFAT),title('垂直图像边缘检测');

l >> s45=[-2 -1 0;-1 0 1;0 1 2];

l >> SFST45=imfilter(f,s45,'replicate');

l >> SFST45=SFST45>=Threshold;

l >> figure,imshow(SFST45),title('45度角图像边缘检测');

l >> s135=[0 -1 -2;1 0 -1;2 1 0];

l >> SFST135=imfilter(f,s135,'replicate');

l >> SFST135=SFST135>=Threshold;

l >> figure,imshow(SFST135),title('135度角图像边缘检测'); l >>

摄像机标定

利用摄像机所拍摄到的图像来还原空间中的物体。在这里,不妨假设摄像机所拍摄到的图像与三维空间中的物体之间存在以下一种简单的线性关系:[像]=M[物],这里,矩阵M可以看成是摄像机成像的几何模型。M中的参数就是摄像机参数。通常,这些参数是要通过实验与计算来得到的。这个求解参数的过程就称为摄像机标定。

简要介绍

在图像测量过程以及机器视觉应用中,常常会涉及到这样一个概念,那就是利用摄像机所拍摄到的图像来还原空间中的物体。在这里,不妨假设摄像机所拍摄到的图像与三维空间中的物体之间存在以下一种简单的线性关系:[像]=M[物]

机器视觉标定板说明

MV-SB型

● 特征圆成陈列分布,间距30mm、板子尺寸:300X300mm。

● 4个大圆为标志圆,大圆环标志确定方向。

● 用特征圆的圆心坐标进行标定。

● 特征圆的圆心坐标提取方法:获得4个标志圆坐标,利用仿射变换将特征圆的坐标调正,然后对其进行排序,确定相应特征圆图像坐标。

● 采用铝合金材料。

张正友平面标定方法

算法原理

在这里假定模板平面在世界坐标系Z=0的平面上。

基本原理:其中,K为摄像机的内参数矩阵,[X Y 1] 为模板平面上点的齐次坐标,[u v 1] 为模板平面上点投影到图象平面上对应点的齐次坐标,[r r r ]和t 分别是摄像机坐标系相对于世界坐标系的旋转矩阵和平移向量。

根据旋转矩阵的性质,即r r =0和||r ||=||r ||=1,每幅图象可以获得以下两个对内参数

矩阵的基本约束

由于摄像机有5个未知内参数,所以当所摄取得的图像数目大于等于3时,就可以线

性唯一求解出K。

算法描述

1、打印一张模板并贴在一个平面上;

2、从不同角度拍摄若干张模板图像;

3、检测出图像中的特征点;

4、求出摄像机的内参数和外参数;

5、求出畸变系数;

6、优化求精。

优缺点

张正友的平面标定方法是介于传统标定方法和自标定方法之间的一种方法。它既避免

了传统方法设备要求高,操作繁琐等缺点,又较自标定方法精度高,符合办公、家庭

使用的桌面视觉系统(DVS)的标定要求。此方法是需要确定模板上点阵的物理坐标以

及图像和模板之间的点的匹配,这给不熟悉计算机视觉的使用者带来了不便。

一、概述

计算机视觉的基本任务之一是从摄像机获取的图像信息出发计算三维空间中物体的几何信息,并由此重建和识别物体,而空间物体表面某点的三维几何位置与其

在图像中对应点之间的相互关系是由摄像机成像的几何模型决定的,这些几何模型

参数就是摄像机参数。在大多数条件下,这些参数必须通过实验与计算才能得到,这个过程被称为摄像机定标(或称为标定)。标定过程就是确定摄像机的几何和光学

参数,摄像机相对于世界坐标系的方位。标定精度的大小,直接影响着计算机视觉

(机器视觉)的精度。迄今为止,对于摄像机标定问题已提出了很多方法,摄像机

标定的理论问题已得到较好的解决,对摄像机标定的研究来说,当前的研究工作应

该集中在如何针对具体的实际应用问题,采用特定的简便、实用、快速、准确的标

定方法。

二、摄像机标定分类

1 根据是否需要标定参照物来看,可分为传统的摄像机标定方法和摄像机自标定方法。

传统的摄像机标定是在一定的摄像机模型下,基于特定的实验条件,如形状、尺寸已知的

标定物,经过对其进行图像处理,利用一系列数学变换和计算方法,求取摄像机模型的内部参

数和外部参数(分为最优化算法的标定方法、利用摄像机透视变换矩阵的标定方法、进一步考

虑畸变补偿的两步法和采用更为合理的摄像机模型的双平面标定法);

不依赖于标定参照物的摄像机标定方法,仅利用摄像机在运动过程中周围环境的图像与图

像之间的对应关系对摄像机进行的标定称为摄像机自标定方法,它又分为:基于自动视觉的摄

像机自标定技术(基于平移运动的自标定技术和基于旋转运动的自标定技术)、利用本质矩阵和

基本矩阵的自标定技术、利用多幅图像之间的直线对应关系的摄像机自标定方以及利用灭点和

通过弱透视投影或平行透视投影进行摄像机标定等。自标定方法非常地灵活,但它并不是很成

熟。因为未知参数太多,很难得到稳定的结果。

一般来说,当应用场合所要求的精度很高且摄像机的参数不经常变化时,传统标定方法为

首选。而自标定方法主要应用于精度要求不高的场合,如通讯、虚拟现实等。

2 从所用模型不同来分有线性和非线性。

所谓摄像机的线性模型,是指经典的小孔模型。成像过程不服从小孔模型的称为摄像机的

非线性模型。线性模型摄像机标定, 用线性方程求解,简单快速,已成为计算机视觉领域的研

究热点之一,目前已有大量研究成果。但线性模型不考虑镜头畸变,准确性欠佳;对于非线性

模型摄像机标定,考虑了畸变参数,引入了非线性优化,但方法较繁,速度慢,对初值选择和

噪声比较敏感,而且非线性搜索并不能保证参数收敛到全局最优解。

3 从视觉系统所用的摄像机个数不同分为单摄像机和多摄像机

在双目立体视觉中,还要确定两个摄像机之间的相对位置和方向。

4 从求解参数的结果来分有显式和隐式。

隐参数定标是以一个转换矩阵表示空间物点与二维像点的对应关系,并以转换矩阵元素作

为定标参数,由于这些参数没有具体的物理意义,所以称为隐参数定标。在精度要求不高的情

况下,因为只需要求解线性方程,此可以获得较高的效率。比较典型的是直接线性定标(DLT)。

DLT 定标以最基本的针孔成像模型为研究对象,忽略具体的中间成像过程,用一个3×4 阶矩阵

表示空间物点与二维像点的直接对应关系。为了提高定标精度,就需要通过精确分析摄像机成

像的中间过程,构造精密的几何模型,设置具有物理意义的参数(一般包括镜头畸变参数、图像

中心偏差、帧存扫描水平比例因子和有效焦距偏差),然后确定这些未知参数,实现摄像机的显

参数定标。

5 从解题方法来分有解析法、神经网络法和遗传算法。

空间点与其图像对应点之间是一种复杂的非线性关系。用图像中的像元位置难以准确计算

实际空间点间的实际尺寸。企图用一种线性方法来找到这种对应关系几乎是不可能的。解析方

法是用足够多的点的世界坐标和相应的图像坐标,通过解析公式来确定摄像机的内参数、外参

数以及畸变参数,然后根据得到的内外参数及畸变系数,再将图像中的点通过几何关系得到空

间点的世界坐标。解析方法不能不能囊括上述的所有非线性因素,只能选择几种主要的畸变,

而忽略其它不确定因素。神经网络法能够以任意的精度逼近任何非线性关系,跳过求取各参数

的繁琐过程,利用图像坐标点和相应的空间点作为输入输出样本集进行训练,使网络实现给定

的输入输出映射关系,对于不是样本集中的图像坐标点也能得到合适的空间点的世界坐标。

6 根据标定块的不同有立体和平面之分。

定标通过拍摄一个事先已经确定了三维几何形状的物体来进行,也就是在一定的摄像机模

型下,基于特定的实验条件如形状、尺寸已知的定标参照物(标定物),经过对其

图像进行处理,

利用一系列数学变换和计算方法,求取摄像机模型的内部参数和外部参数。这种定标方法的精

度很高。用于定标的物体一般是由两到三个相互正交的平面组成。但这些方法需要昂贵的标定

设备,而且事前要精确地设置。平面模板(作为标定物),对于每个视点获得图像,提取图像上的

网格角点,平面模板与图像间的网格角点对应关系,确定了单应性矩阵(Homography),平面模

板可以用硬纸板,上面张贴激光打印机打印的棋盘格。模板图案常采用矩形和二次曲线(圆和

椭圆)。

7 从定标步骤来看,可以分为两步法、三步法、四步法等;

8 从内部参数是否可变的角度来看,可以分为可变内部参数的定标和不可变内部参

数的定标;

9 从摄像机运动方式上看,定标可以分为非限定运动方式的摄像机定标和限定运动

方式的摄像机定标,后者根据摄像机的运动形式不同又可以纯旋转的定标方式、正

交平移运动的定标方式等。

不管怎样分类,定标的最终目的是要从图像点中求出物体的待识别参数,即摄像机内外参数或者投影矩阵。然而,不同应用领域的问题对摄像机定标的精度要求

也不同,也就要求应使用不同的定标方法来确定摄像机的参数。例如,在物体识别

应用系统中和视觉精密测量中,物体特征的相对位置必须要精确计算,而其绝对位

置的定标就不要求特别高;而在自主车辆导航系统中,机器人的空间位置的绝对坐

标就要高精度测量,并且工作空间中障碍物的位置也要高度测量,这样才能安全导

航。

三、摄像机成像模型

在计算机视觉中,利用所拍摄的图像来计算出三维空间中被测物体几何参数。图像是空间物体通过成像系统在像平面上的反映,即空间物体在像平面上的投影。

图像上每一个像素点的灰度反映了空间物体表面某点的反射光的强度,而该点在

像上的位置则与空间物体表面对应点的几何位置有关。这些位置的相互关系,由摄

像机成像系统的几何投影模型所决定。计算机视觉研究中,三维空间中的物体到像

平面的投影关系即为成像模型,理想的投影成像模型是光学中的中心投影,也称为

针孔模型。针孔模型假设物体表面的反射光都经过一个针孔而投影到像平面上,即

满足光的直线传播条件。针孔模型主要有光心(投影中心)、成像面和光轴组成。小孔成像由于透光量太小,因此需要很长的曝光时间,并且很难得到清晰的图像。实际摄像系统通常都由透镜或者透镜组组成。两种模型具有相同的成像关系,即像

点是物点和光心的连线与图像平面的交点。因此,可以用针孔模型作为摄像机成像

模型。

当然,由于透镜设计的复杂性和工艺水平等因素的影响,实际透镜城乡系统不可能严格满足针孔模型,产生所谓的镜头畸变,常见的如径向畸变、切向畸变、薄

棱镜畸变等,因而在远离图像中心处会有较大的畸变,在精密视觉测量等应用方面,

应该尽量采用非线性模型来描述成像关系。

四、常用坐标系及其关系

计算机视觉常用坐标系采用右手准则来定义,图1 表示了三个不同层次的坐标系统:世界坐标系、摄像机坐标系和图像坐标系(图像像素坐标系和图像物理坐标

系)。

1 世界坐标系:

也称真实或现实世界坐标系,它是客观世界的绝对坐标。一般的3D场景都用这个坐标系来表示。

1 三个层次的坐标系统

(1)世界坐标系(xw,yw,zw):也称真实或现实世界坐标系,或全局坐标系。它

是客观世界的绝对坐标,由用户任意定义的三维空间坐标系。一般的3D场景都用

这个坐标系来表示。

(2)摄像机坐标系(xoy):以小孔摄像机模型的聚焦中心为原点,以摄像机光轴为

zc 轴建立的三维直角坐标系。x,y 一般与图像物理坐标系的xf,yf 平行,且采取前

投影模型。

(3)图像坐标系,分为图像像素坐标系和图像物理坐标系两种:

图像物理坐标系:其原点为透镜光轴与成像平面的交点,X 与Y 轴分别平行于摄像机坐标系的x 与y 轴,是平面直角坐标系,单位为毫米。

图像像素坐标系[计算机图像(帧存)坐标系]:固定在图像上的以像素为单位

的平面直角坐标系,其原点位于图像左上角, xf,yf 平行于图像物理坐标系的X 和Y

轴。对于数字图像,分别为行列方向。

2 坐标系变换关系

定义了上述各种空间坐标系后,就可以建立两两不同坐标变换之间的关系。(1)世界坐标系与摄像机坐标系变换关系

世界坐标系中的点到摄像机坐标系的变换可由一个正交变换矩阵R 和一个平移变换矩阵T 表示为:

以一般化视角串联霍夫变换(hough transform),从直线到圆再到广义霍夫变换

计算机视觉中经常需要识别或者定位某些几何图形,比如直线、圆、椭圆,还有其他一些图形。检测直线的霍夫变换提供了在图像中寻找直线的一种算法,是最简单的一种情形,后来发展到检测圆、椭圆、还有一般图形的霍夫变换,其核心思想是把图像中属于某种图形的点集(二维)映射到一个点(可以是高维)上,这个点记录了点集中点的数目,使得程序通过搜索峰值找到该点,这个点就是后面要说到的图形的参数,而该参数的范围就叫做参数空间。霍夫变换不仅能够识别出图像中有无需要检测的图形,而且能够定位到该图像(包括位置、角度等),这就非常有用了。接下来将通过分析从简单到复杂的霍夫变换,导出霍夫变换的实质。 直线:检测直线的霍夫变换使用含极坐标参数的直线表示型式简称极坐标式(不是极坐标方程, 因为还是在笛卡尔坐标下表示)—— 其中的两个参数的意义如下图: 为什么要用极坐标式而不直接用一般形式:ax+by=c(归一化可以去掉参数c),或者其他的如斜截式、截距式呢?首先它们都会遇到奇异情况,比如c=0,斜率=无穷大,其中一个截距=0;再一个是某些形式的参数空间不是闭的,比如斜截式的斜率k,取值范围从0到无穷大,给量化搜索带来了困难。而极坐标式就妙在距离和角度两个参数都是有界的,而且正余弦函数也有界不会发生奇异情况。 直线霍夫变换有两个参数,且这两个参数通过极坐标式相关联,所以程序在投票阶段(图形点集转换到一个点)只需要遍历其中一个,搜索峰值在二维参数空间进行。

圆:霍夫变换检测圆使用圆的标准式就可以了 —— 我们发现圆的方程又比直线多了一个参数,这三个参数通过上面的方程相关联,因此在投票阶段需要遍历其中两个,搜索峰值在三维参数空间进行。如果图像比较大,那么这样的遍历搜索是相当耗时的,所以为了满足实时性后来又发展出其他检测圆的霍夫变换,比如概率霍夫变换,结合梯度信息的霍夫变换。 霍夫变换检测椭圆如果使用椭圆的标准式,那么将会有五个参数,它们通过标准式相关,检测圆就已经相当耗时了,如果再用这中方程形式处理势必失去实际用途。 Ballard (1981) 一般化了霍夫变换(Hough,1962),利用图形梯度量加快算法速度,形成了一般霍夫变换。 透过前面的检测直线、圆、一般霍夫变换,已经可以提取出霍夫变换的一个本质——给出图形的一个描述模式,比如图形点集的方程、函数、表格等,然后利用这个模式加上遍历参数空间,把属于该模式的图形点集投射到参数空间的一个点(实际的离散情况一般不会完美的集中到一点),这个点记录的是图形点数目。 一般霍夫变换之所以能处理任意形状的图形并不是找到了可以表示任意图形的方程(这是不可能的),而是使用表的形式描述一种图形,把图形边缘点坐标保存在一张表中,那么该图形就确定下来了,所以其实无论是直线(其实是线段)、圆、椭圆还是其他形状的几何图形,都可以使用同一方法处理,所不同的是这时候的图形是自定义的,是实在的,而代数方程表示的模式是连续的、抽象的,圆的方程只有一种,但自定义的圆却是无穷的,只要你认为它足够圆了就可以。当然两种表示都会有各自的优势和局限。有了表之后就需要找到一种可以把图形点集投射到参数空间的一点的转换算法,例如直线和圆霍夫变换通过方程(函数)及遍历把点集进行投射,使得属于某直线或圆的点集中到一个点;那么仅有一张描述图形边缘坐标点的表如何进行投射呢?我们可以把这张表看作是模板,进行模板匹配,大部分的点匹配成功也就可以理解为这些点都投射到一个点上,不过这时候不需要再搜索参数空间峰值了,这种模式可以认为是参数间没有任何关联,所以是完全的遍历。但有旋转加上缩放的情况模板匹配型的霍夫变换是十分耗时的,也可以想象成因为参数不相关所以增加遍历搜索时间。Ballard (1981) 的一般霍夫变换最精妙之处在于为参数增加了两个关联,使得有平移和旋转(无缩放)的情况只需要遍历一个参数,三个参数分别是图形的中心坐标(横纵),旋转角度(相对参考图形),Ballard 的算法预先把参考图形边缘点对中心的径向量保存起来,利用待搜索图形边缘点的梯度方向(用相对坐标轴的角度表示)作为索引找到相应的径向量,加上该量后就完成了投射,所以要遍历的参数只有旋转角度,所以说有两个关联。当然如果加上缩放就要遍历两个参数,这也只是和霍夫检测圆的规模一样而已。这种一般霍夫变换的图形表不再是直接保存坐标,而是边缘点的梯度加上径向量,还有一个中心坐标,给出了这些量同样的也就能够表示出一种图形了。然而这种一般霍夫变换也是有缺陷的,不少后来者提出了改进方法,这不在本文讨论范围。 再来强调一次,霍夫变换就是通过图形的一种表示模式,加上一种转换方法,把图形的点集投射到一个点上以便检测。我们已经能够知道,参数个数越少,需要遍历的参数个数约少(关联越多),参数空间越小则处理速度越快。所以设计一种合理的转换方法非常关键。

霍夫变换

‘IEEE Transactions on Pattern Recognition And Machine Intelligence’ ‘IEEE Transactions on Image Processing’ 是最重要的两本,其它的如ICCV、CVPR、ECCV、NIPS、BMVC等的会议文章也非常好。 最小二乘线性拟合算法、随机霍夫变换、局部霍夫变换、 canny算子边缘检测、图像增强 霍夫变换 霍夫变换(Hough Transform)是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法。主要用来从图像中分离出具有某种相同特征的几何形状(如,直线,圆等)。最基本的霍夫变换是从黑白图像中检测直线(线段)。 详细内容 我们先看这样一个问题:设已知一黑白图像上画了一条直线,要求出这条直线所在的位置。我们知道,直线的方程可以用y=k*x+b 来表示,其中k和b是参数,分别是斜率和截距。过某一点(x0,y0)的所有直线的参数都会满足方程y0=kx0+b。即点(x0,y0)确定了一组直线。方程y0=kx0+b在参数k--b平面上是一条直线(你也可以是方程b=-x0*k+y0对应的直线)。这样,图像x--y平面上的一个前景像素点就对应到参数平面上的一条直线。我们举个例子说明解决前面那个问题的原理。设图像上的直线是y=x, 我们先取上面的三个点:A(0,0), B(1,1), C(2,2)。可以求出,过A点的直线的参数要满足方程b=0, 过B点的直线的参数要满足方程1=k+b, 过C点的直线的参数要满足方程2=2k+b, 这三个方程就对应着参数平面上的三条直线,而这三条直线会相交于一点(k=1,b=0)。同理,原图像上直线y=x上的其它点(如(3,3),(4,4)等) 对应参数平面上的直线也会通过点(k=1,b=0)。 应用 这个性质就为我们解决问题提供了方法:首先,我们初始化一块缓冲区,对应于参数 平面,将其所有数据置为0.对于图像上每一前景点,求出参数平面对应的直线,把这 直线上的所有点的值都加1。最后,找到参数平面上最大点的位置,这个位置就是原 图像上直线的参数。上面就是霍夫变换的基本思想。就是把图像平面上的点对应到参 数平面上的线,最后通过统计特性来解决问题。假如图像平面上有两条直线,那么最 终在参数平面上就会看到两个峰值点,依此类推。在实际应用中,y=k*x+b形式的直 线方程没有办法表示x=c形式的直线(这时候,直线的斜率为无穷大)。所以实际应用 中,是采用参数方程p=x*cos(theta)+y*sin(theta)。这样,图像平面上的一个点就 对应到参数p—theta平面上的一条曲线上。其它的还是一样。 应用实例1

边缘检测与Hough变换实验报告----Matlab

边缘检测与Hough变换 实验目的:写一段代码实现一幅图像,其中分为以下两个步骤 1.使用Matlab中的canny算子进行边缘检测,可以让使用者交互式的输入不同 的Sigma的值实现边缘检测。 2.运用Hough变换来找到最突出的边缘,在图像中找到并画出最长的直线。 实验原理: canny算子边缘检测的基本原理是:采用二维高斯函数的任一方向上的一阶方向 导数为噪声滤波器,通过与图像f(x,y)卷积进行滤波,然后对滤波后的图像 寻找图像梯度的局部极大值,以确定图像边缘。 Canny边缘检测算子是一种最优边缘检测算子。其实现步骤如下: 1)用高斯滤波器平滑图像 2)计算滤波后图像梯度的幅值和方向 3)对梯度幅值应用非极大值抑制,其过程为找出图像梯度中的局部极大值点,把其他非局部极大值置零,以得到细化的边缘; 4)再用双阈值算法检测和连接边缘; 使用canny算子的edge函数调用格式为 BW=edge(I,'canny'); BW=edge(I,'canny',thresh,sigma); BW=edge(I,'canny',thresh); [BW,threshold]=edge(I,'canny',…); 2.Hough变换时最常用的直线提取方法,它的基本思想是:将直线上每一个 数据点变换为参数平面中的一条直线或曲线,利用共线的数据点对应的参数 曲线相交于参数空间中一点的关系,使得直线提取问题转化为计数问题。 Hough变换提取直线的主要优点是受直线中的间隙和噪声影响较小。 Hough检测直线的Matlab实现:在Matlab图像处理工具箱中提供了3个与 Hough变换有关的函数,分别为hough函数,houghpeaks函数和houghlines 函数。 hough函数的调用格式为[H,theta,rho]=hough(BW);其中BW为二值图像, H为Hough变换矩阵,theta为变换轴间隔θ,rho为元素个数。 Houghpeaks函数是用来提取Hough变换后参数平面上的峰值点。其调用格 式为peaks=houghpeaks(H,numpeaks),其中,H为Hough函数的输出,参数平 面的技术结果矩阵,参数numpeaks为指定要提取的峰值数目,默认值为1; 输出参数peaks为Q*2维峰值位置矩阵,其中Q为提取的峰值数目,peaks 的第q行分别存储第q个峰值的行和列坐标。 Hough函数用于在图像中提取参数平面上的峰值点对应的直线。其调用格式为lines=houghlines(BW,theta,rho,peaks) Lines=houghlines(…,param1,val1,param2,val2) 其中,BW与Hough函数的BW相同,为二值图象。theta和rho为hough 函数返回的输出,指示θ轴和ρ轴各个单元对应的值。Peaks为houghpeaks 函数返回的输出,指示峰值的行和列坐标,houghlines函数将根据这些峰值 提取直线。Param和val是参数对,用于指定是否合并或保留直线段的相关 参数,其取值有两种。当param=’MinLength’时,bal指定合并后的直线被保 留的门限长度,长度小于val的直线被舍去。当param=’FillGap’时,val指定 直线段被合并的门限间隔。如果两条斜率和截距均相同的直线段间隔小于

图像处理的流行的几种方法

一般来说,图像识别就是按照图像地外貌特征,把图像进行分类.图像识别地研究首先要考虑地当然是图像地预处理,随着小波变换地发展,其已经成为图像识别中非常重要地图像预处理方案,小波变换在信号分析识别领域得到了广泛应用. 现流行地算法主要还有有神经网络算法和霍夫变换.神经网络地方法,利用神经网络进行图像地分类,而且可以跟其他地技术相互融合.个人收集整理勿做商业用途 一神经网络算法 人工神经网络(,简写为)也简称为神经网络()或称作连接模型(),它是一种模范动物神经网络行为特征,进行分布式并行信息处理地算法数学模型.这种网络依靠系统地复杂程度,通过调整内部大量节点之间相互连接地关系,从而达到处理信息地目地.个人收集整理勿做商业用途 在神经网络理论地基础上形成了神经网络算法,其基本地原理就是利用神经网络地学习和记忆功能,让神经网络学习各个模式识别中大量地训练样本,用以记住各个模式类别中地样本特征,然后在识别待识样本时,神经网络回忆起之前记住地各个模式类别地特征并将他们逐个于样本特征比较,从而确定样本所属地模式类别.他不需要给出有关模式地经验知识和判别函数,通过自身地学习机制形成决策区域,网络地特性由拓扑结构神经元特性决定,利用状态信息对不同状态地信息逐一训练获得某种映射,但该方法过分依赖特征向量地选取.许多神经网络都可用于数字识别,如多层神经网络用于数字识别:为尽可能全面描述数字图像地特征,从很多不同地角度抽取相应地特征,如结构特征、统计特征,对单一识别网络,其输入向量地维数往往又不能过高.但如果所选取地特征去抽取向量地各分量不具备足够地代表性,将很难取得较好地识别效果.因此神经网络地设计是识别地关键.个人收集整理勿做商业用途 神经网络在图像识别地应用跟图像分割一样,可以分为两大类: 第一类是基于像素数据地神经网络算法,基于像素地神经网络算法是用高维地原始图像数据作为神经网络训练样本.目前有很多神经网络算法是基于像素进行图像分割地,神经网络,前向反馈自适应神经网络,其他还有模糊神经网络、神经网络、神经网络、细胞神经网络等.个人收集整理勿做商业用途 第二类是基于特征数据地神经网络算法.此类算法中,神经网络是作为特征聚类器,有很多神经网络被研究人员运用,如神经网络、模糊神经网络、神经网络、自适应神经网络、细胞神经网络和神经网络.个人收集整理勿做商业用途 例如神经网络地方法在人脸识别上比其他类别地方法有独到地优势,它具有自学习、自适应能力,特别是它地自学能力在模式识别方面表现尤为突出.神经网络方法可以通过学习地过程来获得其他方法难以实现地关于人脸识别规律和规则地隐性表达.但该方法可能存在训练时间长、收敛速度慢地缺点.个人收集整理勿做商业用途 二小波变换 小波理论兴起于上世纪年代中期,并迅速发展成为数学、物理、天文、生物多个学科地重要分析工具之一;其具有良好地时、频局域分析能力,对一维有界变差函数类地“最优”逼近性能,多分辨分析概念地引入以及快速算法地存在,是小波理论迅猛发展地重要原因.小波分析地巨大成功尤其表现在信号处理、图像压缩等应用领域.小波变换是一种非常优秀地、具有较强时、频局部分析功能地非平稳信号分析方法,近年来已在应用数序和信号处理有很大地发展,并取得了较好地应用效果.在频域里提取信号里地相关信息,通过伸缩和平移算法,对信号进行多尺度分类和分析,达到高频处时间细分、低频处频率细分、适应时频信号分解地要求.小波变换在图像识别地应用,包括图形去噪、图像增强、图像融合、图像压缩、图像分解和图像边缘检测等.小波变换在生物特征识别方面(例如掌纹特征提取和识别)同样得到了成功应用,部分研究结果表明在生物特征识别方面效果优于、、傅里叶变换等方

图像处理之霍夫变换

图像处理之霍夫变换(直线检测算法) 霍夫变换是图像变换中的经典手段之一,主要用来从图像中分离出具有某种相同特征的几何 形状(如,直线,圆等)。霍夫变换寻找直线与圆的方法相比与其它方法可以更好的减少噪 声干扰。经典的霍夫变换常用来检测直线,圆,椭圆等。 霍夫变换算法思想: 以直线检测为例,每个像素坐标点经过变换都变成都直线特质有贡献的统一度量,一个简单 的例子如下:一条直线在图像中是一系列离散点的集合,通过一个直线的离散极坐标公式, 可以表达出直线的离散点几何等式如下: X *cos(theta) + y * sin(theta) = r 其中角度theta指r与X轴之间的夹角,r为 到直线几何垂 直距离。任何在直线上点,x, y都可以表达,其中r,theta是常量。该公式图形表示如下: 然而在实现的图像处理领域,图像的像素坐标P(x, y)是已知的,而r, theta则是我们要寻找 的变量。如果我们能绘制每个(r, theta)值根据像素点坐标P(x, y)值的话,那么就从图像笛卡

尔坐标系统转换到极坐标霍夫空间系统,这种从点到曲线的变换称为直线的霍夫变换。变换 通过量化霍夫参数空间为有限个值间隔等分或者累加格子。当霍夫变换算法开始,每个像素 坐标点P(x, y)被转换到(r, theta)的曲线点上面,累加到对应的格子数据点,当一个波峰出现 时候,说明有直线存在。同样的原理,我们可以用来检测圆,只是对于圆的参数方程变为如 下等式: (x –a ) ^2 + (y-b) ^ 2 = r^2其中(a, b)为圆的中心点坐标,r圆的半径。这样霍夫的参数空间就 变成一个三维参数空间。给定圆半径转为二维霍夫参数空间,变换相对简单,也比较常用。 编程思路解析: 1. 读取一幅带处理二值图像,最好背景为黑色。 2. 取得源像素数据 3. 根据直线的霍夫变换公式完成霍夫变换,预览霍夫空间结果 4. 寻找最大霍夫值,设置阈值,反变换到图像RGB值空间(程序难点之一) 5. 越界处理,显示霍夫变换处理以后的图像 关键代码解析: 直线的变换角度为[0 ~ PI]之间,设置等份为500为PI/500,同时根据参数直线参数方程的取值 范围为[-r, r]有如下霍夫参数定义: [java]view plaincopy 1.// prepare for hough transform 2.int centerX = width / 2; 3.int centerY = height / 2;

数字图像中的Hough变换应用--直线检测

摘要 为能够有效解决实时直线图形提取问题,提出了一种基于Hough变换(HT)的直线提取算法。它所实现的是一种从图像空间到参数空间的映射关系。由于具有一些明显优点和可贵性质,它引起了许多国内外学者和工程技术人员的普遍关注。由于其根据局部度量来计算全面描述参数,因而对于区域边界被噪声干扰或被其他目标遮盖而引起边界发生某些间断的情况,具有很好的容错性和鲁棒性。多年来,专家们对Hough变换的理论性质和应用方法进行了深入而广泛的研究,目前应用于生物医学、自动化和机器人视觉、空间技术和军事防御、办公自动化等各个方面。 本次课称设计首先分析了数字图像中直线边缘的三种结构特征,提出采用基元结构表示目标边缘点,并在约束条件下计算基元结构的基元倾角。在此基础上,结合传统的HT的思想对基元结构进行极角约束HT,以获得最终的直线参数。最后,再用MATLAB软件对该算法进行编程仿真。实验结果表明,对合成图像和自然图像,该算法能够有效的识别图像中的直线段。 关键词:直线提取;Hough变换;MATLAB

目录 1. 课程设计的目的 (1) 2. MATLAB简介及应用 (1) 2.1 MATLAB简介 (1) 2.2 MATLAB应用 (1) 2.3 MATLAB特点 (2) 3. Hough变换原理 (2) 3.1 Hough变换的基本原理 (2) 3.2 Hough变换的不足之处 (4) 3.3 Hough变换的应用 (4) 4. Hough变换检测直线设计 (5) 4.1 Hough变换检测直线基本原理 (5) 4.2 Hough变换的几种基本算法 (6) 4.3 Hough变换算法的比较与选择 (7) 4.4 Hough变换检测直线的算法流程图 (9) 4.5 Hough变换检测直线算法的实现 (9) 5. 仿真结果及分析 (11) 5.1 仿真结果 (11) 5.2 结果分析 (14) 结论 (15) 参考文献 (16)

图像处理之霍夫变换圆检测算法

图像处理之霍夫变换圆检测算法 一:霍夫变换检测圆的数学原理 根据极坐标,圆上任意一点的坐标可以表示为如上形式, 所以对于任意一个圆, 假设中心像素点p(x0, y0)像素点已知, 圆半径已知,则旋转360由极坐标方程可以得到每个点上得坐标同样,如果只是知道图像上像素点, 圆半径,旋转360°则中心点处的坐标值必定最强.这正是霍夫变换检测圆的数学原理. 二:算法流程 该算法大致可以分为以下几个步骤 三:运行效果

图像从空间坐标变换到极坐标效果, 最亮一点为圆心. 图像从极坐标变换回到空间坐标,检测结果显示: 四:关键代码解析 个人觉得这次注释已经是非常的详细啦,而且我写的还是中文注释[java]view plaincopy 1./** 2. * 霍夫变换处理 - 检测半径大小符合的圆的个数 3. * 1. 将图像像素从2D空间坐标转换到极坐标空间 4. * 2. 在极坐标空间中归一化各个点强度,使之在0?255之间 5. * 3. 根据极坐标的R值与输入参数(圆的半径)相等,寻找2D空间的像素点 6. * 4. 对找出的空间像素点赋予结果颜色(红色) 7. * 5. 返回结果2D空间像素集合 8. * @return int [] 9. */ 10.public int[] process() { 11.

12.// 对于圆的极坐标变换来说,我们需要360度的空间梯度叠加值 13. acc = new int[width * height]; 14.for (int y = 0; y < height; y++) { 15.for (int x = 0; x < width; x++) { 16. acc[y * width + x] = 0; 17. } 18. } 19.int x0, y0; 20.double t; 21.for (int x = 0; x < width; x++) { 22.for (int y = 0; y < height; y++) { 23. 24.if ((input[y * width + x] & 0xff) == 255) { 25. 26.for (int theta = 0; theta < 360; theta++) { 27. t = (theta * 3.14159265) / 180; // 角度值0 ~ 2*PI 28. x0 = (int) Math.round(x - r * Math.cos(t)); 29. y0 = (int) Math.round(y - r * Math.sin(t)); 30.if (x0 < width && x0 > 0 && y0 < height && y0 > 0) { 31. acc[x0 + (y0 * width)] += 1; 32. } 33. } 34. } 35. } 36. } 37. 38.// now normalise to 255 and put in format for a pixel array 39.int max = 0; 40. 41.// Find max acc value 42.for (int x = 0; x < width; x++) { 43.for (int y = 0; y < height; y++) { 44. 45.if (acc[x + (y * width)] > max) { 46. max = acc[x + (y * width)]; 47. } 48. } 49. } 50. 51.// 根据最大值,实现极坐标空间的灰度值归一化处理 52.int value; 53.for (int x = 0; x < width; x++) { 54.for (int y = 0; y < height; y++) {

Hough变换实例 很清晰的

数字图像处理第八次作业 实验内容 1、拍摄一张包含硬币、橡皮等物品的照片,通过Hough 变换检测出圆形的硬币个数并区分不同半径的硬币。最终计算出照片中的总钱数。 解:Hough 变换的实质是对图像进行坐标的变换,将图像空间的线条变为参数空间的聚集点,从而将原始图像中检测给定形状的曲线问题,变成寻找参数空间中的峰点的问题。 它不仅可以检测直线,而且可以很方便地检测圆、椭圆和抛物线等形状。由于这里需要检测圆形的硬币,所以下面给出检测圆的具体方法: 因为圆的图像空间方程为:222()()x a y b r -+-=, 我们需要通过Hough 变换,将图像空间(,)x y 对应到参数空间(,,)a b r ,然后对其进行累加完成检测。但是显然这种方法的计算量是非常大的,所以一般都是先对灰度图像进行边缘提取,利用边界像素的灰度梯度信息估计出下式中的角度θ,以此来降低计算量: cos cos a x r b y r θ θ=-*??=-*? (1) 一般在检测过程中需要对图像进行预处理,使得检测更加准确和容易。检测过程如下所示: ○ 1真彩色图像转为灰度图像; ○ 2去除噪声,进行中值滤波; ○ 3转为二值图像,利用边缘算子进行图像边缘提取; ○ 4最后进行图像的平滑和填充。 这里处理的图像并没有太多噪声,所以处理的时候略去了中值滤波的步骤,直接对边缘提取后的图像进行Hough 变换检测圆形。 根据式(1),我们需要对半径r 和角度θ进行搜索,所以这里应该首先设置半径和角度方向的搜索步长step_r 和step_angle ,接着给出半径搜索的最大和最小值,当然这两个数值需要根据经验来自己确定。最后就可以根据这些确定半径和角度的最大搜索次数。

广义霍夫变换的改进_叶州海

文章编号:1006-0871(2006)04-0053-04 广义霍夫变换的改进 叶州海, 陈福民 (同济大学电子与信息工程学院,上海 200092) 摘 要:提出基于广义霍夫变换(Generalized H ough Transfor m ation ,GHT )的改进算法.与传统方法比较,新方法将参考点设在形状边界上,可以减少内存的需要,并且用于寻找峰值的速度也大大提高.理论上,改进后的算法对内存的需要是一个基于形状描述复杂度的函数,越是精确和高级的形状和特征描述,意味着节省的内存空间越大.最后,将改进的GHT 应用于物体形状识别,取得一些实验性效果. 关键词:广义霍夫变换;形状识别;内存空间节省中图分类号:TP306.1 文献标志码:A Generalized Hough transfor mation i m prove ment YE Zhouha,i CHEN Fu m i n (Schoo l o f E lectron ic&Info .Eng .,T ong jiU n i v .,Shangha i 200092,Ch i na) Abst ract :An i m prove m ent ofG enera lizedH ough T ransfor m a ti o n(GH T)is proposed .Co m pared w ith the trad itionalm ethod ,the ne w one can reduce the storage requ ire m ent by setti n g reference points on shape edge .M eanw hile ,the speed o f search for peak is acce lerated conspicuously .Theo retica ll y ,the storage require m en t is a functi o n based on t h e co m plex ity of the shape descri p ti o n i n the ne w m et h od .And the m ore accurate and higher level the shape is described,the s m aller the storage space is needed .I n the end ,the i m proved a l g orith m is pu t i n to the ob ject recogn iti o n ,and obta i n s so m e experi m ental resu lts .K ey w ords :genera lized H ough transfor m ati o n(GHT );object recogn ition ;storage space reduction 收稿日期:2006-02-27;修回日期:2006-03-29 作者简介:叶州海(1980-),男,江苏泰兴人.硕士研究生,研究方向为网络多媒体技术和图像处理,(E-m ail)t h reel eafzerg @ci ti z .net 0 引 言 霍夫变换(HT )是一种用于区域边界形状描述的方法,经典HT 常被用于直线段、圆和椭圆的检测.HT 的优点是:(1)对噪音的抗干扰性;(2)能够处理多个形状.广义霍夫变换(Genera lized H ough Transfor m ation ,GHT)可以推广至检测任意形状.其基本思想是将图像的空间域变换到参数空间,用大多数边界点满足某种参数形式来描述图像中的曲线.实现方法是寻找在参数空间由参数累加器形成的峰值.由于HT 是根据局部度量来计算全面描述 参数,因而具有很强的容错性和鲁棒性. 然而,传统GHT 有几个较大的缺陷:(1)计算 量大,每个边缘点映射成参数空间的一个曲线,是一到多的映射;(2)占用内存大;(3)提取的参数受参数空间的量化间隔制约.本文通过将参考点设立在边界点上以减少GHT 对内存的需求.当然,改进后的方法会对GHT 的鲁棒性有一定影响,可以通过设多个参考点来加强鲁棒性,而且增加的R 关系表带来的额外内存空间相对于采用该算法所节省的内存空间而言微不足道. 最后本文将此改进方法用于物体形状检测,对

Hough变换检测直线

数字图像处理实验报告 实验题目:Hough变换检测直线 专业班级:电科1001 学生姓名:赵 学号:201048360102 指导老师:王贵财 时间:2012-2013-2

Hough变换检测直线 一.实验目的 实现用Hough变换检测直线的算法 二.实验要求 (1)找一幅或多幅(两幅以上)包含直线形状的图像,检测出图像中的多条直线; (2)分析并显示各直线的角度、长度。 三.实验原理 Hough变换是利用图像全局特性而将边缘像素连接起来组成区域封闭边界的一种方法。在预先知道区域形状的条件下,利用Hough变换可以方便的得到边界曲线而将不连续的像素边缘点连接起来。Hough 变换的主要优点是受噪声和曲线间断的影响小。利用Hough变换可以直接检测某些已知形状的目标,如直线。 Hough变换的基本思想是点线的对偶性。一方面,图像空间中共线的点对应在参数空间里相交的线;另一方面,在参数空间中相交于同一个点的所有直线在图像空间里都有共线的点与之对应。因此Hough 变换把在图像空间中的直线检测问题转换到参数空间中对点的检测问题,通过在参数空间里进行简单的累加统计完成检测任务。如果参数空间中使用直线方程,当图像空间直线斜率为无穷大时,会使累加

器尺寸和变很大,从而使计算复杂度过大。为解决这一问题,采用直线极坐标方程,变换方程如图1所示。 ρ= xcosθ+ysinθ 根据这个方程,原图像空间中的点对应新参数空间中的一条正弦曲线,即点- 正弦曲线对偶。检测直线的具体过程就是让θ取遍可能的值,然后计算ρ的值,再根据θ和ρ的值对累加数组累加,从而得到共线 点的个数。下面介绍θ和ρ取值范围的确定。设被检测的直线在第一象限,右上角坐标为( m, n) ,则第一象限中直线的位置情况如图1所示。 图一 由图可见,当直线从与x轴重合处逆时针旋转时,θ的值 开始由0°增大,直到180°,所以θ的取值范围为0°~180°。由 直线极坐标方程可知: ,其中Φ= ,所以当且仅当x和y都达到最大且θ+ Φ=±90°时(根据<来调整θ的值) , | ρ| =| ρ| max =

霍夫变换检测直线圆流程+

Hough 变换直线检测是直接按照hough 变换的定义来进行的, 算法如下: 1) 对原始的图像进行二值化, 假设0代表背景, 1代表物体特征点; 2) 在参数空间ρ, θ里建立一个累加的数组[],H ρθ , 并且置数组H 中的每 一个元素的初值都为零; 对于二值图像中每个以1 表示的点(,)x y , 我们让θ取遍θ轴上所有可能的值, 并根据式(3-3)计算对应的ρ; 再根据ρ与θ的值(假设都已经取整) 对数组进行累加计算([][],,1H H ρθρθ=+) ; 3) 然后对数组[],H ρθ 进行局部的峰值检测, 得到被检测直线的参数ρ和θ。上述的算法受直线中的间隙与噪声的影响较小, 鲁棒性比较强,但其具有运算量太大的缺点, 极端情况下, 它的运算复杂度为3 ()n ο 。 传统随机hough 变换的具体算法如下: (a)构造一个边缘点集D , 然后初始化参数单元集P NULL = ,循环的次数K = 0 ; (b)从D 中随机的选取3 个点; (c)由这3个点解特征的参数p ; (d)在P 中寻找一个c p ,使它满足p c p δ-≤,如果找到则转(f);否则就转(e); (e)将p 插入到P 中,其对应的计数值变为1,转(g); (f)将c p 所对应的计数的值加1,如果小于指定阈值t N ,转(g);否则就转(h); (g)1k k =+;如果 max k k > ,则结束;否则,转(b); (h)c p 是候选圆的特征参数,如果该参数对应圆上的边缘的点数min pc M M >,转(i); (i) c p 是真实的圆参数,把落在参数c p 对应的特征上的点从D 中去除,然 后判断已经检测到的圆的数目是否已达到规定的数目,若是就结束,否 则的话重置P NULL =,0K =,转(b)。 其中max k 是规定的检测一个圆的过程中所允许采样的最大的循环次数。min M 为圆所必需的最小的点数, 通常设为2r πλ,其中λ是一个固定系数,r 是候选圆的半径。P 是参数空间中的参数单元的集合,它是一个动态的链表结构。pc M 是图像空间中落到了候选圆上的点数。

霍夫变换

霍夫变换

标准霍夫变换 1.C++: void HoughLines(InputArray image, OutputArray lines, double rho, double theta, int threshold, double srn=0, double stn=0 ) 第一个参数,InputArray类型的image,输入图像,即源图像,需为8位的单通道二进制图像,可以将任意的源图载入进来后由函数修改成此格式后,再填在这里。 第二个参数,InputArray类型的lines,经过调用HoughLines函数后储存了霍夫线变换检测到线条的输出矢量。每一条线由具有两个元素的矢量表示,其中,是离坐标原点((0,0)(也就是图像的左上角)的距离。是弧度线条旋转角度(0~垂直线,π/2~水平线)。 第三个参数,double类型的rho,以像素为单位的距离精度。另一种形容方式是直线搜索时的进步尺寸的单位半径。PS:Latex中/rho就表示。 第四个参数,double类型的theta,以弧度为单位的角度精度。另一种形容方式是直线搜索时的进步尺寸的单位角度。 第五个参数,int类型的threshold,累加平面的阈值参数,即识别某部分为图中的一条直线时它在累加平面中必须达到的值。大于阈值threshold的线段才可以被检测通过并返回到结果中。 第六个参数,double类型的srn,有默认值0。对于多尺度的霍夫变换,这是第三个参数进步尺寸rho的除数距离。粗略的累加器进步尺寸直接是第三个参数rho,而精确的累加器进步尺寸为rho/srn。 第七个参数,double类型的stn,有默认值0,对于多尺度霍夫变换,srn表示第四个参数进步尺寸的单位角度theta的除数距离。且如果srn和stn同时为0,

根据matlab的霍夫变换

基于matlab的霍夫变换 一、简单介绍 Hough变换是图像处理中从图像中识别几何形状的基本方法之一。Hough变换的基本原理在于利用点与线的对偶性,将原始图像空间的给定的曲线通过曲线表达形式变为参数空间的一个点。这样就把原始图像中给定曲线的检测问题转化为寻找参数空间中的峰值问题。也即把检测整体特性转化为检测局部特性。比如直线、椭圆、圆、弧线等。 二、基本原理 Hough变换的基本原理在于,利用点与线的对偶性,将图像空间的线条变为参数空间的聚集点,从而检测给定图像是否存在给定性质的曲线(圆的方程为:(x-a)^2+(y-b)^2=r^2,通过Hough变换,将图像空间对应到参数空间)。 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法。最基本的霍夫变换是从黑白图像中检测直线(线段)。 三、hough变换检测直线 设已知一黑白图像上画了一条直线,要求出这条直线所在的位置。我们知道,直线的方程可以用y=k*x+b 来表示,其中k和b是参数,分别是斜率和截距。过某一点(x0,y0)的所有直线的参数都会满足方程y0=kx0+b。即点 (x0,y0)确定了一族直线。方程y0=kx0+b在参数k--b平面上是一条直线,(你也可以是方程b=-x0*k+y0对应的直线)。如下图1所示: 从图1中可看出,x-y坐标和k-b坐标有点----线的对偶性。x-y坐标中的点P1、P2对应于k-b坐标中的L1、L2;而k-b坐标中的点P0对应于x-y坐标中的线L0 。 这样,图像x--y平面上的一个前景像素点就对应到参数平面上的一条直线。我们举个例子说明解决前面那个问题的原理。设图像上的直线是y=x, 我

霍夫变换

霍夫变换 一.概述 霍夫变换是一种图像特征提取技术,是一种有效的快速准确地检测出直线或圆的方法,是基本的识别图像几何形状的方法之一。 二 . opencv中的霍夫变换 1.Opencv支持的霍夫线变换有三种 a)标准霍夫变换 b)多尺度霍夫变换 c)累计概率霍夫变换(标准霍夫变换的改进,效率更高) 2.霍夫变换是从黑白图像中检测直线的,霍夫变换的直接输入只能是边缘二值图像,所以在使用霍夫变换之前要对图像进行边缘检测处理, 3.HoughiLines:可调用标准霍夫变换 HoughLines(a,b,c,d,e,f,g) a表示源图像 b表示调用函数后得到的输出矢量(用来确定直线位置的矢量),一般默认写为“lines” c表示极坐标系中的ρ d表示极坐标系中的角度θ e表示阈值(指的是触发直线判断所需要的的最低值) f,g在使用标准霍夫变换时默认为0 4.HoughLinesP:可调用累计概率霍夫变换 HoughLinesP(a,b,c,d,e,f,g) a表示源图像 b表示调用函数后得到的输出矢量(用来确定直线位置的矢量),一般默认写为“lines” c表示极坐标系中的ρ d表示极坐标系中的角度θ e表示阈值(指的是触发直线判断所需要的的最低值) f,g在使用累计概率霍夫变换时默认为要为正值 三 . 初期效果 源代码 #include #include using namespace cv; using namespace std;

int main( ) { while(1) { VideoCapture capture(0); Mat srcImage; capture >> srcImage;//读取当前帧图片 //【1】通过摄像头采取视频载入原始图和Mat变量定义 Mat midImage,dstImage;//临时变量和目标图的定义 //【2】进行边缘检测和转化为灰度图 Canny(srcImage, midImage, 50, 200, 3);//canny边缘检测 cvtColor(midImage,dstImage, COLOR_GRAY2BGR);//转化边缘检测后的图为灰度图 //标准霍夫变换 //【3】进行霍夫线变换 vector lines;//定义一个矢量结构lines用于存放得到的线段矢量集合 HoughLines(midImage, lines, 1, CV_PI/180, 150, 0, 0 ); //【4】依次在图中绘制出每条线段 for( size_t i = 0; i < lines.size(); i++ ) { float rho = lines[i][0], theta = lines[i][1]; Point pt1, pt2; double a = cos(theta), b = sin(theta); double x0 = a*rho, y0 = b*rho; pt1.x = cvRound(x0 + 1000*(-b)); pt1.y = cvRound(y0 + 1000*(a)); pt2.x = cvRound(x0 - 1000*(-b)); pt2.y = cvRound(y0 - 1000*(a)); //此句代码的OpenCV2版为:(妙算所用版本我windows下搭建的是opencv3环境) //line( dstImage, pt1, pt2, Scalar(55,100,195), 1, CV_AA); //此句代码的OpenCV3版为: line( dstImage, pt1, pt2, Scalar(55,100,195), 1, LINE_AA); }

霍夫变换算子的分析与改进

第一章绪论 Hough变换(Hough Transformation,HT) 是直线检测中常用的方法之一,是由PaulHough在1962年提出的。它所实现的是一种从图像空间到参数空间的映射关系。Hough变换将图像空间中复杂的边缘特征信息映射为参数空间中的聚类检测问题。Duda和Hart于1972年首次用该方法提取直线。他们发现,当许多点的分布近似为一条直线时,这条直线可以用Hough变换的方法确定。经典HT常被用于直线、线段、圆和椭圆的检测。广义霍夫变换(Generalized Hough Transformation,GHT)可以推广至检测任意形状的图形。 Hough变换的突出优点就是将图像空间中较为困难的全局检测问题转化为参数空间中相对容易解决的局部峰值检测问题。也就是说,通过Hough变换之后,工作的重点就是如何更准确地、有效地检测出参数空间中共同投票区域的投票积累峰值。当参数空间证据积累完成以后,通常采用给定阈值的方法确定备选估计参数。但是,由于Hough变换自身的特点,使得提取出来的备选估计参数远远多于真实参数的个数,而且有好多备选估计参数来源于同一直线上数据点的投票积累。若直接以备选估计参数作为检测到的直线参数输出直线,则是不符合实际、不正确的。所以,在确定最终参数时,需要对备选估计参数做一定的处理,从而保证检测的准确性。Hough 变换方法还具有明了的几何解析性、一定的抗干扰能力和易于实现并行处理点.Hough变换是从图像中识别几何形状的基本方法之一,因此有着广泛的应用。例如:基于Hough变换的航片框标定位算法,霍夫变换在潮位相关分析中的应用等。 第二章 Hough变换 2. 1 基本原理 Hough变换的基本原理是将影像空间中的曲线(包括直线)变换到参数空间中,通过检测参数空间中的极值点,确定出该曲线的描

Hough变换实例

实验内容 1.拍摄一张包含硬币、橡皮等物品的照片,通过Hough 变换检测出圆形的硬币个数并区分不同半径的硬币。最终计算出照片中的总钱数。 解:Hough 变换的实质是对图像进行坐标的变换,将图像空间的线条变为参数空间的聚集点,从而将原始图像中检测给定形状的曲线问题,变成寻找参数空间中的峰点的问题。 它不仅可以检测直线,而且可以很方便地检测圆、椭圆和抛物线等形状。由于这里需要检测圆形的硬币,所以下面给出检测圆的具体方法: 因为圆的图像空间方程为:222()()x a y b r -+-=, 我们需要通过Hough 变换,将图像空间(,)x y 对应到参数空间(,,)a b r ,然后对其进行累加完成检测。但是显然这种方法的计算量是非常大的,所以一般都是先对灰度图像进行边缘提取,利用边界像素的灰度梯度信息估计出下式中的角度θ,以此来降低计算量: cos cos a x r b y r θθ=-*??=-*? (1) 一般在检测过程中需要对图像进行预处理,使得检测更加准确和容易。检测过程如下所示: ○ 1真彩色图像转为灰度图像; ○ 2去除噪声,进行中值滤波; ○ 3转为二值图像,利用边缘算子进行图像边缘提取; ○ 4最后进行图像的平滑和填充。 这里处理的图像并没有太多噪声,所以处理的时候略去了中值滤波的步骤,直接对边缘提取后的图像进行Hough 变换检测圆形。 根据式(1),我们需要对半径r 和角度θ进行搜索,所以这里应该首先设置半径和角度方向的搜索步长step_r 和step_angle ,接着给出半径搜索的最大和最小值,当然这两个数值需要根据经验来自己确定。最后就可以根据这些确定半径和角度的最大搜索次数。 由于Hough 变换需要用到稀疏矩阵,也即首先得找到图像矩阵中的非零量,针对这些非零量进行进一步的处理。这个操作可以直接通过Matlab 中的find 语

相关文档
相关文档 最新文档