霍夫变换 - 图文

更新时间:2023-10-07 11:13:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

‘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. 8.

BW = edge(I,'canny');ênny方法提取图像边界,返回二值图像(边界1,否则0) [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

http://www.360doc.com/content/14/0404/14/16239681_366361318.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 表示为:

本文来源:https://www.bwwdw.com/article/w36d.html

Top