1.Hough Transform 的算法思想

在直角坐标系和极坐标系中,点、线是对偶关系。

即直角坐标系中的点是极坐标系中的线,直角坐标系中的线是极坐标系中的点。反之也成立。

如下图所示,想要检测图像中的直线,可以转化为检测极坐标系中的点(θ,r)


2.Hough空间的表示

如下图所示,图像中直线的表示,由斜率和截距表示,而极坐标中用(θ,r)

表示,并且存在下式关系:

r=cos(θ)⋅x+sin(θ)⋅y

对于点 (x0,y0),代入上式,在极坐标中就是一条线(很多对 (θ,r)点):

r=cos(θ)⋅x0+sin(θ)⋅y0

r,θ

就是一对Hough空间的变量表示。

旋转的 θ

不容易表示,若将 r,θ 看成直角坐标空间。一个点 (x0,y0)

, 就是一个正弦曲线。

r=cos(θ)⋅x0+sin(θ)⋅y0

如下图所示,左图直角坐标系中的一个点,对应于右图 r- θ 空间的一条正弦曲线。

如下图,直角坐标系中的多个点,对应于 r

- θ

空间的多条正弦曲线。

直角坐标系的三点共线,对应于 r

空间的多线共点

因此,我们可以通过检测 r

- θ

空间的交集点,来检测原始空间的线段。

接下来,就是要考虑 将r,θ

离散化,形成离散化的Hough空间,类似于一个矩阵/图像(如下图),用于统计交集点的个数。


3.Hough变换代码分析

以下是使用Matlab进行直线检测的代码。

Hough Transform

首先预处理,转为二值图像:

I  = imread('road.jpg');
I = rgb2gray(I);
BW = edge(I,'canny');
  • 1
  • 2
  • 3

然后进行霍夫变换:

[H,T,R] = hough(BW,'RhoResolution',0.5,'Theta',-90:0.5:89.5);
imshow(H,[],'XData',T,'YData',R,'InitialMagnification','fit');
xlabel('\theta'), ylabel('\rho');
axis on, axis normal, hold on;
  • 1
  • 2
  • 3
  • 4

检测hough域极值点

P  = houghpeaks(H,50,'threshold',ceil(0.3*max(H(:))));
x = T(P(:,2));
y = R(P(:,1));
plot(x,y,'s','color','white');
  • 1
  • 2
  • 3
  • 4

检测直线

% Find lines and plot them
lines = houghlines(BW,T,R,P,'FillGap',7,'MinLength',100);
figure, imshow(I), hold on
max_len = 0;
for k = 1:length(lines)xy = [lines(k).point1; lines(k).point2];plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green');% plot beginnings and ends of linesplot(xy(1,1),xy(1,2),'x','LineWidth',2,'Color','yellow');plot(xy(2,1),xy(2,2),'x','LineWidth',2,'Color','red');% determine the endpoints of the longest line segmentlen = norm(lines(k).point1 - lines(k).point2);if ( len > max_len)max_len = len;xy_long = xy;end
end% highlight the longest line segment
plot(xy_long(:,1),xy_long(:,2),'LineWidth',2,'Color','cyan');
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

实验结果

r

- θ

空间及前50个极值点:

最终车道直线检测结果:


[注] 所有的代码可以在此处免费下载:http://download.csdn.net/detail/ws_20100/9492054

Hough Transform 的算法思想相关推荐

  1. Hough transform(霍夫变换)

    主要内容: 1.Hough变换的算法思想 2.直线检测 3.圆.椭圆检测 4.程序实现 一.Hough变换简介 Hough变换是图像处理中从图像中识别几何形状的基本方法之一.Hough变换的基本原理在 ...

  2. 【视觉算法】霍夫变换(Hough Transform)

    在进入正题之前,首先思考一个问题,在下图中,我们如何从散乱的点中寻找到直线? 有多少直线?哪些点属于哪些直线? 如果是找圆形呢? 霍夫变换(Hough Transform)能很好的解决这些问题,要理解 ...

  3. 霍夫(圆)变换(hough Transform/hough cirlce Transform)原理和实现

    一.霍夫(圆)变换的广泛使用和简要历史 霍夫变换是一种特征提取方法,被广泛应用在图像处理和计算机视觉应用中.霍夫变换是用来辨别找出物件中的特征,例如:线条.他的算法流程大致如下,给定一个物件.要辨别的 ...

  4. hough变换检测圆周_一文解读经典霍夫变换(Hough Transform)

    引言 本文讲述霍夫变换的一些内容,并加入一些理解性东西,参考了部分博客等相关性内容.希望能对霍夫变换有所了解,也希望看到的人如果发现错误及时帮忙纠正.博主水平有限,还望赐教. 历史和简介 历史 霍夫变 ...

  5. Kernel-based Hough transform (KHT)移植

    Kernel-based Hough transform KHT移植 简介 分析程序 移植到自己程序中并用OpenCV画出检测出的直线 附录 KHTOpenCV测试程序 Kernel-based Ho ...

  6. Hough Transform 霍夫变换检测直线

    Hough Transform 霍夫变换检测直线 从理论到代码,再从代码到理论 (1)理论之通俗理解: 1.在图像中检测直线的问题,其实质是找到构成直线的所有的像素点.那么问题就是从找到直线,变成找到 ...

  7. matlab温度数据怎么滤波_卡尔曼滤波算法思想理解 Kalman filter 第一篇

    卡尔曼滤波算法思想理解 Kalman filter 第一篇 最近在初步的理解目标跟踪的领域, 其中一个非常经典的算法卡尔曼滤波Kalman filter是需要有很好的理解才行, 由于已经脱离了学校,懂 ...

  8. JAVA工程师常用算法_算法工程师必须要知道的8种常用算法思想

    算法思想有很多,业界公认的常用算法思想有8种,分别是枚举.递推.递归.分治.贪心.试探法.动态迭代和模拟.当然8种只是一个大概的划分,是一个"仁者见仁.智者见智"的问题. 1.1 ...

  9. Algorithms_算法思想_递归分治

    文章目录 引导案例 递归的定义 什么样的问题可以用递归算法来解决 递归如何实现以及包含的算法思 递归的公式 斐波那契数列代码实现 递归的时间复杂度和空间复杂度 递 与 归 递归的优化 优化方式一:不使 ...

最新文章

  1. real6410 裸机实验- LED
  2. Flask 系列之 SQLAlchemy
  3. 计算机学生选课系统毕业论文,学生选课管理系统论文
  4. 手机论文查重软件哪个好?
  5. java则么实现md5解密_java的md5解密
  6. 计算机考研复习资料推荐
  7. 微信小程序之电子商场的设计以及实现
  8. 不是公网ip怎么搭建服务器
  9. Flutter PullToRefresh上下拉刷新控件
  10. tink.js # pixi辅助插件 — 中文翻译教程
  11. 转:GTD,Get Things Done(搞定时间管理)
  12. 计算机经常突然死机重启,家里电脑最近经常会出现重启死机的现象是什么原因?...
  13. 硬盘分区 硬盘分区 硬盘分区
  14. 脸部日常护理私家秘方
  15. redhat7 mysql lamp_RHEL7 yum安装配置LAMP服务器(Apache+PHP+MySql)
  16. conda\pip环境迁移处理记录学习
  17. 学Windows编程的好书
  18. 【参赛作品20】从零开始,快速认识实践使用openGauss
  19. [会写代码的健身爱好者成长史]之Jsoup的简单使用
  20. QQ、MSN、SKYPE、贸易通等监控软件IP-guard的破解办法汇总

热门文章

  1. should not buy processed foods on the street
  2. 自已编写C# DLL 绑定到unity进程进行单步调试
  3. mapper中的CDATA标签的用法
  4. python对文件夹内文件去重
  5. Hadoop入门进阶步步高(一)-环境准备
  6. 利用Inotify和Rsync将webproject文件自己主动同步到多台应用server
  7. Cacti 监控网络
  8. hdu 5636 Shortest Path(Floyd最短路)
  9. hdu 3790(最短路)
  10. POJ 1505(二分+贪心)