hough变换理解[通俗易懂]

hough变换概念在计算机中,经常需要将一些特定的形状图形从图片中提取出来,如果直接用像素点来搜寻非常困难,这时候需要将图像从像素按照一定的算法映射到参数空间。hough变化提供了一种从图像像素信息到参数空间的变换方法。对于像直线,圆,椭圆这样的规则曲线hough是一种常用的算法。hough变化最大的优点在于特征边缘描述中间隔的容忍性并且该变换不受图像噪声的影响。hough变换原理hough变换是一

大家好,又见面了,我是你们的朋友全栈君。

###hough变换概念
在计算机中,经常需要将一些特定的形状图形从图片中提取出来,如果直接用像素点来搜寻非常困难,这时候需要将图像从像素按照一定的算法映射到参数空间。hough变化提供了一种从图像像素信息到参数空间的变换方法。对于像直线,圆,椭圆这样的规则曲线hough是一种常用的算法。hough变化最大的优点在于特征边缘描述中间隔的容忍性并且该变换不受图像噪声的影响。

###hough变换原理
hough变换是一种将图像上的点映射到累加的参数空间,实现对已知解析式曲线的识别。

####参数空间
由于直线斜率k存在无穷大的情况,这里hough变换将原图像空间转换到极坐标系表示的参数空间。即直线 y = k ∗ x + b y=k*x+b y=kx+b转换到极坐标系空间 ρ = x c o s θ + y s i n θ \rho=xcos\theta+ysin\theta ρ=xcosθ+ysinθ ρ \rho ρ表示直线到原点的距离, θ \theta θ限定了直线的斜率(这里只是说限定,没说是直线的斜率)。任意一条直线都可以通过 ( ρ , θ ) (\rho,\theta) (ρ,θ)来表示。参数空间 H ( ρ , θ ) H(\rho,\theta) H(ρ,θ)表示有限个点的集合。参数空间 H ( ρ , θ ) H(\rho,\theta) H(ρ,θ)每一个点都代表一条直线。
如图所示:
这里写图片描述
####参数空间的累加投票
在进行hough变换前,先需要将图像的边缘图像提取出来,在边缘图像的基础上进行hough变换。经过边缘图像每一个点的直线有很多,如下图:这里写图片描述
经过某一点的直线在参数空间的表示像一条正弦曲线。
在边缘图像中,只有表示边缘的像素点才有可能构成直线。现在回到参数空间,在参数空间 H ( ρ , θ ) H(\rho,\theta) H(ρ,θ)中,将经过边缘图像中每一个有效像素点(边缘像素点)的所有直线信息都加到 H ( ρ , θ ) H(\rho,\theta) H(ρ,θ)上。比如,像素点 ( x , y ) (x,y) (x,y)代表构成边缘的一个像素点,遍历 θ \theta θ,根据公式 ρ = x c o s θ + y s i n θ \rho=xcos\theta+ysin\theta ρ=xcosθ+ysinθ我们可以计算出所有经过点 ( x , y ) (x,y) (x,y)的直线信息。比如下图:这里写图片描述
这儿三个点在一条直线上,不同颜色的线代表经过不通点的直线,图下面的表显示了直线的参数。将直线参数表示在参数空间的曲线上,如图所示:这里写图片描述
每一条曲线都是由经过一个点的所有直线参数构成的。我们发现三条曲线在(60,81)附近交叉了,这表明 θ = 60 , ρ = 81 \theta=60,\rho=81 θ=60,ρ=81这条直线上有三个点。这就表明了我们如何从参数空间 H ( ρ , θ ) H(\rho,\theta) H(ρ,θ)上寻找直线信息。将 H H H看作为一个累加器,一个表示直线信息的累加器。设置某一阈值,超过阈值的参数点所代表的直线表明图像中存在这一直线。
###hough变换示例

RGB= imread('lines.png');
imshow(RGB),title('original image');
I = rgb2gray(RGB);
BW = edge(I, 'canny');  %  用canny算法提取边缘图像
figure,imshow(BW),title('edge image');
[H, T, R]=hough(BW);  % 计算得到的H为参数矩阵,T为限定直线的角度,R为直线到原点的值
figure, imshow(imadjust(mat2gray(H)), 'XData', T, ...   % 绘制hough变换的图
'YData', R, 'InitialMagnification', 'fit'),title('hough image');
xlabel('\theta'), ylabel('\rho');
axis on; axis normal; hold on;
colormap(hot);
peaks = houghpeaks(H,4);  % 该算法用来提取指定数目的峰值点,也是就是寻找直线
figure, imshow(BW);
hold on;
lines = houghlines(BW, T, R, peaks, 'FillGap',30, 'MinLength',30);

max_len = 0;
for k=1:length(lines)
xy = [lines(k).point1; lines(k).point2];
   plot(xy(:,1),xy(:,2),'LineWidth',3,'Color','b');
   plot(xy(1,1),xy(1,2),'x','LineWidth',3,'Color','yellow');
   plot(xy(2,1),xy(2,2),'x','LineWidth',3,'Color','red');

   len = norm(lines(k).point1 - lines(k).point2);
   if ( len > max_len)
      max_len = len;
      xy_long = xy;
   end
end

这里写图片描述

参考文献:《数字图像处理matlab版》-左飞
《数字图像处理第三版》 http://blog.csdn.net/poem_qianmo/article/details/26977557
https://en.wikipedia.org/wiki/Hough_transform
http://homepages.inf.ed.ac.uk/rbf/HIPR2/hough.htm

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/127589.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • vue项目打包步骤

    vue项目打包步骤vue项目打包终端运行命令npmrunbuild打包成功的标志与项目的改变,如下图:点击index.html,通过浏览器运行,出现以下报错,如图:那么应该如下修改呢?具体步骤如下:1、查看package.js文件的scripts命令2、打开webpack.dev.conf.js文件,找到publicPath:config.dev.assetsPublicPath,按Ctrl点击,跳转到in…

  • 简单教你写xsync和xcall的脚本

    简单教你写xsync和xcall的脚本xsync配置xsync脚本基于rsync工具,rsync远程同步工具,主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点,它只是拷贝文件不同的部分,因而减少了网络负担。rsync-rvl$pdir/$fname$user@hadoop$host:$pdir常用参数:-r,–recursive对子目录以递归模式处理-R,–relative使用相对路径信…

  • qlineedit设置光标_光标选不中

    qlineedit设置光标_光标选不中QLineEdit的光标当失去焦点后仍然显示的问题:  在lineedit和其它按钮之间切换焦点时,注意lineedit的设置有顺序,否则当失去焦点时仍有光标闪,或者得到焦点无光标。  使lineedit有效:lineedit->setEnabled(true);lineedit->setFocus();    使lineedit无效:l…

  • HTML中空格_如何去掉word中的空格

    HTML中空格_如何去掉word中的空格1. 空格符大  家  好!显示效果为:大家好!2.p标签使用空两格百度地图API功能百度地图API功能效果如下:3.span标签空格百度地图API功能百度地图API功能效果如下:4.word-spacing属性,Happynewyear!效果:![在这里插入图片描述](https://img-blog….

  • 递归数列是什么_数列递归

    递归数列是什么_数列递归递归数列-递归数列    (recursivesequence):一种用归纳方法给定的数列。递归数列-举例    例如,等比数列可以用归纳方法来定义,先定义第一项a1的值(a1≠0),对于以后的项,用递推公式an+1=qan(q≠0,n=1,2,…)给出定义。一般地,递归数列的前k项a1,a2,…,ak为已知数,从第k+1项起,由某一递推公式a

  • 国内外常用公共NTP网络时间同步服务器地址[通俗易懂]

    国内外常用公共NTP网络时间同步服务器地址[通俗易懂]【腾讯云】热门云产品首单特惠秒杀,1核2G云服务器首年38元目录太长不看NTPPoolProjectNTP.ORG.CNNTP授时快速域名服务HSDN(HomeServerDataNetwork)本地服务器数据网络企业阿里巴巴腾讯微软苹果谷歌FacebookCloudflare高通HurricaneElectric飓风电气MSK-IX(MoscowInterneteXchange)莫斯科网络交换INTERNET…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号