Matlab 霍夫变换 ( Hough Transform) 直线检测
PS:好久没更新,因为期末到了,拼命复习中。复习久了觉得枯燥,玩玩儿霍夫变换直线检测
霍夫变换的基本原理不难,即便是初中生也很容易理解(至少在直线检测上是这样子的)。
霍夫变换直线检测的基本原理:(不配图了,自己在白纸上画画,理解更深刻)
一步一步来:
1、在白纸上画出一个直角坐标系,任意给出一个点;
2、那么,对于点(x0,y0),经过这个点的直线必定满足y0=k*x0+b, 其中k是直线的斜率,b是直线的截距;
3、上式可以化成b=y0-k*x0, 可以看作是以-x0为斜率,以y0为截距,在k-b空间上的一个直线方程(k,b为变量);
4、可见,k-b空间上的一条直线, 代表了x-y空间经过特定点的所有直线,而x-y上的特定直线责备k-b空间上的特定点表示;
利用这个原理,我们可以通过一下方法检测可能出线的直线:
1、得到一副边缘图像;
2、对图像中的每一个边缘点,在k-b空间中画出一条直线;
3、在各直线的交点,我们采取“投票”(vote)的方法,即累加:n条直线的交点,改点的值为n;
4、遍历k-b空间,寻找出先局部最大值(极值)的点,这些点的坐标(k,b)就是图像中可能出线的直线的斜率和截距;
为了容易理解,这里采用了直线的斜截表达法。
事实上这种方法并不使用,因为某些直线的斜率很大的甚至不存在。
实际操作中,检测直线的霍夫变换使用含极坐标参数的直线表示型式,简称极坐标式(不是极坐标方程,因为还是在笛卡尔坐标下表示)

其中的两个参数的意义如下图:

这样,每条直线对应于theta-p空间下的一条正弦曲线,同样采用投票求极值的方法寻找曲线
霍夫变换直线检测的matlab实现:
这里涉及到三个函数:hough,houghpeaks,houghlines:
1、[H,T,R] = hough(BW,'Theta',20:0.1:75) ; (输入二值图像BW,角度范围与步进(最大,[-90, 90)),返回 H-霍夫空间,T-theta,R-p);
2、PEAKS = houghpeaks(H,NUMPEAKS) ;(输入霍夫空间和极值数量,返回极值的坐标)
3、LINES=houghlines(BW,T,R,Peaks) ; (返回lines是一个包含图像中线段首末点、p、theta的结构体)
代码:
I=imread('1.jpg');
Ihsv=rgb2hsv(I);
Iv=Ihsv(:,:,); %提取v空间
Ivl=Iv(:end,:); %截取下半部
Iedge=edge(Ivl,'sobel'); %边沿检测
Iedge = imdilate(Iedge,ones());%图像膨胀
%新建窗口,绘图用
figure ()
imshow(Iedge);
hold on
%左方直线检测与绘制
%得到霍夫空间
[H1,T1,R1] = hough(Iedge,'Theta',:0.1:);
%求极值点
Peaks=houghpeaks(H1,);
%得到线段信息
lines=houghlines(Iedge,T1,R1,Peaks);
%绘制线段
for k=:length(lines)
xy=[lines(k).point1;lines(k).point2];
plot(xy(:,),xy(:,),'LineWidth',);
end
%右方直线检测与绘制
[H2,T2,R2] = hough(Iedge,'Theta',-:0.1:-);
Peaks1=houghpeaks(H2,);
lines1=houghlines(Iedge,T2,R2,Peaks1);
for k=:length(lines1)
xy1=[lines1(k).point1;lines1(k).point2];
plot(xy1(:,),xy1(:,),'LineWidth',);
end
hold off
输入图像:

输出图像:

嘛,结果还是令人满意的嘛~
接下来要准备考试了,7月11号考完,之后想做一个手部识别,所以可能会玩玩haar特征检测器和光流法跟踪,大概就这样。
Matlab 霍夫变换 ( Hough Transform) 直线检测的更多相关文章
- Hough Transform直线检测
本文原创,如转载请注明出处. Hough Transform 是一种能提取图像中某种特定形状特征的方法,可以将其描述成一种把图像空间中的像素转换成Hough空间中直线或曲线的一种映射函数.通过利用Ho ...
- 灰度图像--图像分割 霍夫变换(Hough Transform)--直线
学习DIP第50天 转载请标明本文出处:http://blog.csdn.net/tonyshengtan ,出于尊重文章作者的劳动,转载请标明出处!文章代码已托管,欢迎共同开发:https://gi ...
- 第三章 霍夫变换(Hough Transform)
主要内容: 霍夫变换的作用 霍夫变换检测直线的原理 霍夫变换检测圆的原理 OpenCV中的霍夫变换 1.霍夫变换检测直线原理 霍夫变换,英文名称Hough Transform,作用是用来检测图像中的直 ...
- 霍夫变换(Hough Transform)
霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法.最基本的霍夫变换是从黑白图像中检测直线(线段). 我们先看这样一个问题: 设已知一黑白图像上画了一条直线,要求出这 ...
- 霍夫变换Hough
http://blog.csdn.net/sudohello/article/details/51335237 霍夫变换Hough 霍夫变换(Hough)是一个非常重要的检测间断点边界形状的方法.它通 ...
- Python+OpenCV图像处理(十四)—— 直线检测
简介: 1.霍夫变换(Hough Transform) 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法.主要用来从图像中分离出具有某种相同特征的几何形状(如,直线 ...
- 【python+opencv】直线检测+圆检测
Python+OpenCV图像处理—— 直线检测 直线检测理论知识: 1.霍夫变换(Hough Transform) 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进 ...
- python实现直线检测
目录: (一)原理 (二)代码(标准霍夫线变换,统计概率霍夫线变换) (一)原理 1.霍夫变换(Hough Transform) 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也 ...
- Win8 Metro(C#)数字图像处理--2.38Hough变换直线检测
原文:Win8 Metro(C#)数字图像处理--2.38Hough变换直线检测 [函数名称] Hough 变换直线检测 HoughLineDetect(WriteableBit ...
随机推荐
- JQ中的延迟对象deferred中的promise等的使用
一.什么是deferred对象? 开发网站的过程中,我们经常遇到某些耗时很长的javascript操作.其中,既有异步的操作(比如ajax读取服务器数据),也有同步的操作(比如遍历一个大型数组),它们 ...
- c#创建、安装、卸载、调试windows服务的简单事例
最近工作中用到了windows服务,对其有深刻理解和丰富经验谈不上,本篇文章只是简单陈诉用c#创建.安装.卸载.调试windows服务的步骤. 一.创建windows服务 1.用VS创建windows ...
- tensorflow 学习(一)
改系列只为记录我学习 udacity 中深度学习课程!! 1. 整个课程分为四个部分,如上图所示. 第一部分将研究逻辑分类器,随机优化以及实际数据训练. 第二部分我们将学习一个深度网络,和使用正则化技 ...
- http://www.cnblogs.com/ACMer/p/5170255.html
http://www.cnblogs.com/ACMer/p/5170255.html
- 白话学习MVC(八)Action的执行二
一.概述 上篇博文<白话学习MVC(七)Action的执行一>介绍了ASP.NET MVC中Action的执行的简要流程,并且对TempData的运行机制进行了详细的分析,本篇来分析上一篇 ...
- 【转】PHP实现连贯操作
[第一种方案 __call] 我们在使用一些框架(如ThinkPHP)编码的时候,常用到这样的代码. M('User')->where(array('id'=>1))->field( ...
- JS实时数据运算
应朋友需要制作的一个小页面 <script type="text/javascript"> function cal(ida,idb,idc,idd) { var nu ...
- 将java项目转换成Web项目
http://www.cnblogs.com/kaige123/p/5866446.html 在项目上点击右键,进入Properties配置,点击Project Facets,再点击Convert t ...
- lucene5.5 field
lucene常见Field IntField 主要对int类型的字段进行存储,需要注意的是如果需要对InfField进行排序使用SortField.Type.INT来比较,如果进范围查询或过滤,需要采 ...
- 基于ubuntu-2.6.35内核的SDIO-WiFi驱动移植
一.移植环境: 1.主机:Ubuntu 10.10发行版 2.目标机:FS_S5PC100平台 3.交叉编译工具:arm-cortex_a8-linux-gn ...