Hough Transform 的算法思想
1.Hough Transform 的算法思想
在直角坐标系和极坐标系中,点、线是对偶关系。
即直角坐标系中的点是极坐标系中的线,直角坐标系中的线是极坐标系中的点。反之也成立。
如下图所示,想要检测图像中的直线,可以转化为检测极坐标系中的点(θ,r)
。
2.Hough空间的表示
如下图所示,图像中直线的表示,由斜率和截距表示,而极坐标中用(θ,r)
表示,并且存在下式关系:
对于点 (x0,y0),代入上式,在极坐标中就是一条线(很多对 (θ,r)点):
r,θ
就是一对Hough空间的变量表示。
旋转的 θ
不容易表示,若将 r,θ 看成直角坐标空间。一个点 (x0,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 的算法思想相关推荐
- Hough transform(霍夫变换)
主要内容: 1.Hough变换的算法思想 2.直线检测 3.圆.椭圆检测 4.程序实现 一.Hough变换简介 Hough变换是图像处理中从图像中识别几何形状的基本方法之一.Hough变换的基本原理在 ...
- 【视觉算法】霍夫变换(Hough Transform)
在进入正题之前,首先思考一个问题,在下图中,我们如何从散乱的点中寻找到直线? 有多少直线?哪些点属于哪些直线? 如果是找圆形呢? 霍夫变换(Hough Transform)能很好的解决这些问题,要理解 ...
- 霍夫(圆)变换(hough Transform/hough cirlce Transform)原理和实现
一.霍夫(圆)变换的广泛使用和简要历史 霍夫变换是一种特征提取方法,被广泛应用在图像处理和计算机视觉应用中.霍夫变换是用来辨别找出物件中的特征,例如:线条.他的算法流程大致如下,给定一个物件.要辨别的 ...
- hough变换检测圆周_一文解读经典霍夫变换(Hough Transform)
引言 本文讲述霍夫变换的一些内容,并加入一些理解性东西,参考了部分博客等相关性内容.希望能对霍夫变换有所了解,也希望看到的人如果发现错误及时帮忙纠正.博主水平有限,还望赐教. 历史和简介 历史 霍夫变 ...
- Kernel-based Hough transform (KHT)移植
Kernel-based Hough transform KHT移植 简介 分析程序 移植到自己程序中并用OpenCV画出检测出的直线 附录 KHTOpenCV测试程序 Kernel-based Ho ...
- Hough Transform 霍夫变换检测直线
Hough Transform 霍夫变换检测直线 从理论到代码,再从代码到理论 (1)理论之通俗理解: 1.在图像中检测直线的问题,其实质是找到构成直线的所有的像素点.那么问题就是从找到直线,变成找到 ...
- matlab温度数据怎么滤波_卡尔曼滤波算法思想理解 Kalman filter 第一篇
卡尔曼滤波算法思想理解 Kalman filter 第一篇 最近在初步的理解目标跟踪的领域, 其中一个非常经典的算法卡尔曼滤波Kalman filter是需要有很好的理解才行, 由于已经脱离了学校,懂 ...
- JAVA工程师常用算法_算法工程师必须要知道的8种常用算法思想
算法思想有很多,业界公认的常用算法思想有8种,分别是枚举.递推.递归.分治.贪心.试探法.动态迭代和模拟.当然8种只是一个大概的划分,是一个"仁者见仁.智者见智"的问题. 1.1 ...
- Algorithms_算法思想_递归分治
文章目录 引导案例 递归的定义 什么样的问题可以用递归算法来解决 递归如何实现以及包含的算法思 递归的公式 斐波那契数列代码实现 递归的时间复杂度和空间复杂度 递 与 归 递归的优化 优化方式一:不使 ...
最新文章
- real6410 裸机实验- LED
- Flask 系列之 SQLAlchemy
- 计算机学生选课系统毕业论文,学生选课管理系统论文
- 手机论文查重软件哪个好?
- java则么实现md5解密_java的md5解密
- 计算机考研复习资料推荐
- 微信小程序之电子商场的设计以及实现
- 不是公网ip怎么搭建服务器
- Flutter PullToRefresh上下拉刷新控件
- tink.js # pixi辅助插件 — 中文翻译教程
- 转:GTD,Get Things Done(搞定时间管理)
- 计算机经常突然死机重启,家里电脑最近经常会出现重启死机的现象是什么原因?...
- 硬盘分区 硬盘分区 硬盘分区
- 脸部日常护理私家秘方
- redhat7 mysql lamp_RHEL7 yum安装配置LAMP服务器(Apache+PHP+MySql)
- conda\pip环境迁移处理记录学习
- 学Windows编程的好书
- 【参赛作品20】从零开始,快速认识实践使用openGauss
- [会写代码的健身爱好者成长史]之Jsoup的简单使用
- QQ、MSN、SKYPE、贸易通等监控软件IP-guard的破解办法汇总