与霍夫变换有关的工具箱函数

标签: 霍夫变换 霍夫变换函数
6人阅读 评论(0) 收藏 举报
分类:

图像处理工具箱提供了三个与霍夫变换有关的函数。函数hough实现了前面讨论的概念,函数houghpeaks寻找霍夫变换的峰值(累加单元的高计数),函数houghlines以来自其他两个函数的结果为基础在原始图像中提取线段。

1. 函数hough

函数hough支持任意的默认语法:

  1. [H, theta, rho] = hough(f) 

还支持完整的语法形式:

  1. [H, theta, rho] = hough(f, 'ThetaRes', val1, 'RhoRes', val2) 

其中,H是霍夫变换矩阵,theta(以度计)和rho是ρ和θ值向量,在这些值上产生霍夫变换。输入f是二值图像,val1是0到90的标量,指定了沿θ轴霍夫变换的间距(默认是1),val2是0<val2<hypot(size(I,1),size(I,2))的实标量,指定了沿ρ轴的霍夫变换的间隔(默认是1)。

例10.5  霍夫变换的说明

在这个例子中,我们用简单的合成图像来说明hough函数的机理:

  1. >> f = zeros(101, 101);  
  2. >> f(1, 1) = 1; f(101, 1) = 1; f(1, 101) = 1;  
  3. >> f(101, 101) = 1; f(51, 51) = 1; 

图10-10(a)显示了我们的测试图像,下面使用默认值计算并显示霍夫变换的结果:

  1. >> H = hough(f)  
  2. >> Imshow(H,[]) 

图10-10(b)显示了结果,以熟悉的方法使用imshow函数来显示。在带有标度轴的较大图中显现霍夫变换常常更有用。

在接下来的代码片段中,我们调用带有三个参数的hough函数。然后把向量theta和rho作为附加输入参量传递给imshow,从而控制水平轴和垂直轴的标度。我们还要把'InitialMagnification'选项传递给带有值'fit'的imshow函数,因此,整个图像将被强迫在图形窗口中进行装配。axis函数被用来打开轴标记,并使其显示填充图的矩形框。最后,xlabel和ylabel函数(见2.3.1节)用希腊字母LaTeX字体符号在轴上标值:

  1. >> [H, theta, rho] = hough(f);  
  2. >> imshow(H, [], 'XData', theta, 'YData', rho ,'InitialMagnification', 'fit')  
  3. >> axis on, axis normal  
  4. >> xlabel('\theta'), ylabel('\rho') 

图10-10(c)显示了标上值之后的结果。三条曲线(直线也可考虑为曲线)在±45°处的交点指出:f中有两组三个共线的点。两条曲线在(ρ,θ)=(0,-90)、(-100,-90)、(0,0)和(100,0)处的交点指出:有4组位于垂直线和水平线上的共线点。

2. 函数houghpeaks

线检测和连接用的霍夫变换的第一步是用高的计数寻找累加单元(工具箱文本把高的计数单元作为峰值)。因为存在霍夫变换参数空间中的量化和典型图像的边缘并不是很完美的直线这样的事实,霍夫变换的峰值倾向于相比霍夫变换单元更多。函数houghpeaks用任意默认语法来寻找指定的峰值数:

  1. peaks = houghpeaks(H, NumPeaks) 

或者使用完整的语法形式:

  1. peaks = houghpeaks(..., 'Threshold', val1, 'NHoodSize', val2) 

其中,"…"指出来自默认语法和peaks的输入是持有峰值行和列坐标的Q×2大小的矩阵。Q的范围是0到NumPeaks,H是霍夫变换矩阵。参数val1是非负的标量,指定了H中的什么值被考虑为峰值;val1可以从0到Inf变化,默认值是0.5*max(H(:))。参数val2是奇整数的两元素矢量,指定量围绕峰值的邻域大小。当鉴别出峰值之后,邻域中的元素被置为0。默认是由最小奇数值组成的两元素矢量大于或等于size(H)/50。这个过程的基本思想是:通过把发现峰值的直接邻域中的霍夫变换单元置0来清理峰值。我们在例10.6中说明函数houghpeaks。

3. 函数houghlines

一旦一组候选的峰值在霍夫变换中被识别出来,如果存在与这些峰值相关的有意义的线段,剩下的就是决定线的起始点和终点。函数houghlines用默认的语法执行这个任务:

  1. lines = houghlines(f, theta, rho, peaks) 

或者使用完整的语法形式:

  1. lines = houghlines(..., 'FillGap', val1, 'MinLength', val2)  

其中,theta和rho是来自函数hough的输出,peaks是函数houghpeaks的输出。输出lines是结构数组,长度等于找到的线段数。结构中的每个元素可以看成一条线,并含有下列字段:

point1:两元素向量[r1, c1],指定了线段终点的行列坐标。

point2:两元素向量[r2, c2],指定了线段其他终点的行列坐标。

theta:与线相关的霍夫变换的以度计量的角度。

rho:与线相关的霍夫变换的ρ轴位置。

其他参数如下:

val1是正的标量,指定了与相同的霍夫变换相关的两条线段的距离。当两条线段之间的距离小于指定的值时,函数houghlines把线段合并为一条线段(默认的距离是20个像素)。参数val2是正的标量,指定合并的线是保留还是丢弃。如果合并的线比val2指定的值短,就丢弃(默认值是40)。

例10.6  用霍夫变换检测和连接线

在这个例子中,我们用函数hough、houghpeaks和houghlines寻找图10-7(f)所示二值图像f的一组线段。首先,我们用比默认值更好的角间距(用0.2代替1.0)计算和显示霍夫变换:

  1. >> [H, theta, rho] = hough(f, 'ThetaResolution', 0.2);  
  2. >> imshow(H, [], 'XData', theta, 'YData', rho, 'InitialMagnification', 'fit')  
  3. >> axis on, axis normal  
  4. >> xlabel('\theta'), ylabel('\rho') 

下一步,我们用函数houghpeaks寻找5个有意义的霍夫变换的峰值:

  1. >> peaks = houghpeaks(H, 5);  
  2. >> hold on  
  3. >> plot(theta(peaks(:, 2)), rho(peaks(:, 1)), ...  
  4.          'linestyle', 'none', 'marker', 's', 'color', 'w') 

前边的操作计算和显示霍夫变换,并添加使用函数houghpeaks的默认设置寻找到的5个峰值位置。图10-11(a)显示了结果。例如,最左边较小的方形确定与房顶相关的累加单元,以工具箱的角度作为参考倾向于近似-74°,在图10-9(a)中是-16°。最后,我们使用函数houghlines寻找和连接线段,用函数imshow、hold on和plot在原始的二值图像上添加线段:

  1. >> lines = houghlines(f, theta, rho, peaks);  
  2. >> figure, imshow(f), hold on  
  3. >> for k = 1:length(lines)  
  4. xy = [lines(k).point1 ; lines(k).point2];  
  5. plot(xy(:,1), xy(:,2), 'LineWidth', 4, 'Color', [.8 .8 .8]);  
  6. end 

图10-11(b)显示了使用检测到的叠加了较粗灰线的线段得到的结果。


转载自:http://book.51cto.com/art/201304/391287.htm

查看评论

opencv学习(三十三)之霍夫变换

1.霍夫变换综述霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法。主要用来从图像中分离出具有某种相同特征的几何形状。最基本的霍夫变换是从黑白图像中检测直线。在图像处...
  • keith_bb
  • keith_bb
  • 2017-02-20 22:48:05
  • 1585

Matlab信号处理工具箱函数

波形产生和绘图 chirp 产生扫描频率余弦 diric 产生Dirichlet函数或周期Sinc函数 gauspuls 产生高斯调制正弦脉冲 pulstran 产生脉冲串 rectpuls...
  • b5w2p0
  • b5w2p0
  • 2014-03-20 11:39:01
  • 1726

霍夫变换详解

 本系列文章由@浅墨_毛星云 出品,转载请注明出处。   文章链接: http://blog.csdn.net/poem_qianmo/ar...
  • Sunshine_in_Moon
  • Sunshine_in_Moon
  • 2015-04-25 20:30:53
  • 7024

opencv3标准霍夫变换-HoughLines函数

#include #include #include using namespace std; using namespace cv; int g_CannyThred = 150, g_Cann...
  • qq_23880193
  • qq_23880193
  • 2015-10-16 23:46:30
  • 1181

OpenCV之霍夫变换

转自:http://blog.csdn.net/poem_qianmo/article/details/26977557?utm_source=tuicool&utm_medium=referral ...
  • RedskyDeng
  • RedskyDeng
  • 2016-03-29 10:35:57
  • 2053

opencv3累计概率霍夫变换-HoughLinesP函数

#include #include #include using namespace std; using namespace cv; int g_CannyThred = 150, g_Cann...
  • qq_23880193
  • qq_23880193
  • 2015-10-17 00:02:54
  • 2013

HMM matlab工具箱

  • 2010年07月29日 18:39
  • 758KB
  • 下载

图像处理————霍夫(HOUGH)变换

霍夫(HOUGH)变换         霍夫变换是图像处理中用来从图像中分离出具有某种相同特征的几何形状(通常,直线,圆等)的常用方法。经典的霍夫变换常用来检测直线,圆,椭圆等。 为什么要进行...
  • sinat_34035510
  • sinat_34035510
  • 2016-06-05 11:02:22
  • 2133

图像处理霍夫变换检测直线matlab代码

  • 2016年04月26日 14:42
  • 1KB
  • 下载

MATLAB遗传算法工具箱的函数简介

本文简单介绍谢菲尔德大学开发的遗传算法工具箱的用法。 工具箱名字gatbx,即GA Toolbox。用help gatbx即可看到其所有函数。函数的功能分几大类:创建种群、适应度计算、选择函数、变异...
  • xtingjie
  • xtingjie
  • 2017-04-16 17:44:41
  • 2898
    个人资料
    持之以恒
    等级:
    访问量: 9233
    积分: 541
    排名: 9万+
    文章存档
    最新评论