【直线检测】【matlab】基于Hough变换的直线检测
这里写自定义目录标题
- 1引言
- 2实施
- 2.1卷积
- 2.2用一个For循环进行卷积
- 2.3边缘检测
- 2.4Hough变换
- 2.5找直线
- 3讨论
- 代码结构图
- 测试结果
原创文章作者:无敌三角猫。如若转载,请注明出处:古月居 https://www.guyuehome.com/37662
1引言
该程序实现了一些基本的图像处理算法,并将它们组合在一起,构建了一个基于霍夫变换的直线检测器。该程序能够在图像中找到直线段的起始点和结束点。像大多数视觉算法一样,Hough变换使用了一些参数,它们的最优值是具有数据依赖性(即一组参数值在一幅图像上工作得很好,可能对另一幅图像来说不是最好的)。通过在测试图像上运行代码和调优参数,它获得了每个图像的最佳值,从而获得了良好的性能。
● Hough Transform based line detector :基于Hough变换的直线检测器。
● straight line segments in images:图像中的直线。
● optimal values are data dependent:最优参数具有数据依赖性。
2实施
2.1卷积
编写一个函数,将图像与给定的卷积滤波器进行变换。
function [img1]=myImageFilter(img0,h)
作为输入,该函数接受存储在矩阵h中的卷积滤波器和灰度图像(img0)。函数的输出应该是与img0相同大小的图像img1,它是由img0和h卷积得到。您可以假设滤波器h沿两个维度都是奇数大小。您将需要处理图像边缘的边界情况。例如,当您在图像的左上角放置卷积掩膜时,大多数滤波器掩膜将位于图像之外。一种可能的解决方案是对图像进行处理,使位于图像边界之外的像素与位于图像内部的最近像素具有相同的强度值。
2.2用一个For循环进行卷积
请编写一个只使用一个for循环进行卷积的函数,并将其保存到ec/目录。(如果您在Q3.1中已经这样做了,好的,只需复制一个并保存到EC/。)此外,简单地描述一下你在写作中是如何实现的。插图有助于理解是高度鼓励的。
function [img1]=myImageFilterX(img0,h)
为了只使用一个循环,我将2D数组转换成了1D数组,然后使用它们的映射关系。其他代码与2.1完全相同。看.m文件夹ec下。
2.3边缘检测
编写一个函数,以查找图像中的边缘强度和方向。在您的写作中包含给定图像之一的功能输出。
function [Im Io Ix Iy]=myEdgeFilter(img,sigma)
该函数将输入灰度图像(img)和σ(标量)。Sigma是高斯平滑核在边缘检测前使用的标准差,函数将输出边缘幅值图像Im,边缘方向图像Io,以及x方向和y方向上的滤波响应Ix和Iy。
2.4Hough变换
编写将Hough变换应用于边缘幅值图像的函数。
function [H, rhoScale, thetaScale] = myHoughTransform(Im, threshold, rhoRes, thetaRes)
Im是边缘幅值图像, threshold(标量)是用来忽略像素的边缘强度阈值,该类像素具有低边缘滤波器响应。rhoRes(标量)和ThetaRes(标量)分别是HoughTransform累加器沿ρ轴和θ 轴的分辨率。例如,如果theaRes=5°和,则沿θ轴的线带数为360/5=72。H是Hough变换累加器,包含图像中所有可能的直线“选票”数。rhoscale和thetaScale是myHoughTransform生成Hough变换矩阵H的p和θ 值数组。例如,
2.5找直线
function [rhos, thetas] = myHoughLines(H, nLines)
H是Hough变换累加器;RhoRes和taRes是累加器分辨率参数,nLine是返回的行数。Output lineRho和lineTheta都是nline x 1向量,它们分别包含图像中所找到的线条的参数(p和θ)。
(1) Fillgap:如果有不连续的线条需要连接在一起,则将Fillgap设置为相对较高的价值。另一方面,如果有一些不应该在一起的线连接,然后将fillgap设置为一个小值,就像我们在图6中所做的那样。
(2) Minlength:如果图像只有较长的线条,而不是几条较短的线条,则Minlength应该是大的,反之亦然。(3)变化"最小长度": Minlength = 10(左)和Minlength = 30(右),通过增加线的最小长度可以消除图片中的短噪声线。 根据不同的图片,情况也不同。
3讨论
我的代码可以用一个参数对所有的图像,但结果并不理想。
从上图可以看出: (3)阈值:如果边缘图像中图像的线条不清晰,我们应该将阈值设置为 一个相对较低的值来增强它。同样,我们应该设置一个更高的阈值来降低噪音,如果边缘已经足够清晰。
(4) thetaRes和rhoRes:增加这些值可以在Hough投票中获得更好的分辨率图片,在我的代码中rhoRes=pi/180和thetaRes=2工作得最好。
(5) nLine:如果图像中有很多直线需要匹配,那么应该选择一个较大的nLine。 如果有一些线,但大部分是曲线,nLines不应该设置太高。
(6)Fillgap:如果有不连续的线条需要连接在一起,则将Fillgap设置为a 相对较高的价值。另一方面,如果有一些不应该在一起的线连接,然后将fillgap设置为一个小值,就像我们在图6中所做的那样。
(7)Minlength:如果图像只有较长的线条,而不是几条较短的线条,则Minlength应该是大的,反之亦然。
在改变分辨率之前,强制条款部分造成的问题最多。 因为如果分辨率较低,应在附近的霍夫峰仅视为一个峰。所以,有些线找不到。改变分辨率后,问题解决了。但是,对于每个元素在霍夫矩阵中,仍然存在一个问题它的外围可能存在相同的值。我们只能将值设置为0时,有一个值大于它在邻域。所以它可能导致在最后的线拟合过程中有双线。有一种解决方法,就是检查是否有相邻元素中相同的元素只保留其中一个,但它需要一个循环。我的最佳性能参数包括在上面的记录中,还有另一对不同图像的参数。如果对所有的图像只应用一对参数,那将是:
Sigma = 2; threshold = 0.03;
rhoRes = 2; thetaRes = pi/180;
nLines = 50; ‘FillGap’ = 6; ‘MinLength’ = 15;
The effect of single parameter has already been stated above.
代码结构图
测试结果
原创文章作者:无敌三角猫。如若转载,请注明出处:古月居 https://www.guyuehome.com/37662
【直线检测】【matlab】基于Hough变换的直线检测相关推荐
- 【图像检测-道路检测】基于hough变换实现道路检测直线检测附matlab代码
1 内容介绍 随着遥感技术和计算机技术的飞速发展,遥感图像的采集变得越来越容易,遥感图像中的物体特征识别及检测变得越来越重要,直线是图像中物体基本的特征之一,研究图像中直线的检测算法对计算机视觉和模式 ...
- MATLAB实战系列(二十三)-基于hough变换的直线检测(附MATLAB源代码)
前言 本文借鉴公众号 工科男的Matlab学习日志大佬的内容,加入个人的部分理解. Hough变换的定义 : Hough变换的基本原理是将影像空间中的曲线变换到参数空间中,通过检测参数空间中的极值点, ...
- 基于Hough变换的直线和圆的检测与提取
学数字图像处理有挺长时间了,正好最近这段时间有空,学习了一下Hough变换,作了几个比较简单的东西,分享出来,希望能和大家一起学习,也希望各位能提出宝贵的意见,共同进步,文采不好,欢迎拍砖,下面正式进 ...
- 皮带撕裂检测matlab,基于机器视觉的皮带纵向撕裂检测方法
基于机器视觉的皮带纵向撕裂检测方法 [技术领域] [0001] 本发明设及一种带式输送机皮带纵向撕裂检测方法,尤其设及一种基于机器视觉 的非接触式的皮带纵向撕裂检测方法. [背景技术] [0002] ...
- 基于matlab的Hough变换图像直线检测算法仿真
目录 1.算法仿真效果 2.MATLAB源码 3.算法概述 4.部分参考文献 1.算法仿真效果 matlab2022a仿真结果如下:
- MATLAB中hough反变换,matlab中hough变换
hough 变换提取直线(Matlab 实现) Hough 变换提取直线一.实验目标实现用 Hough 变换检测直线的算法二.实验内容 1.读入图像选取有较多直线及部分曲线以作对比的...... j= ...
- hough变换检测直线 matlab,Matlab实现Hough变换检测图像中的直线
Hough变换的原理: 将图像从图像空间变换至参数空间,变换公式如下: 变换以后,图像空间与参数空间存在以下关系: 图像空间中的一点在参数空间是一条曲线,而图像空间共线的各点对应于参数空间交于一点的各 ...
- 图像分割实战之基于Hough变换提取图像中的直线
图像分割的依据是基于图像中各区域具有不同的特性(比如,灰度.颜色.纹理).图像分割的目的是将图像划分成若干具有相近或相同特性的子区域,以便继续在分割成的相关区域中提取目标,并进而根据目标的特征或结构信 ...
- matlab人眼虹膜定位,基于Hough变换的人眼虹膜定位方法
基于Hough变换的人眼虹膜定位方法 matlab 2021-2-12 下载地址 https://www.codedown123.com/64459.html 图像处理源代码,基于Hough变换的人眼 ...
- matlab使用hough变换函数进行车道检测
1.导入图片后进行预处理,包括灰度图.滤波.突出边缘.二值化.边缘检测方法有:'gaussian', 'sobel', 'prewitt', 'laplacian', 'log', 'average' ...
最新文章
- 【重磅】杨强,陈云霁团队提名2020年度国家科学技术奖!!!
- AJAX技术入门 第五节 Javascript高级知识
- 有道python网课怎么样-如何用python“优雅的”调用有道翻译?
- IIS日志作用与分析
- c 语言 while break,26 C 语言中的break和continue - C 语言基础教程
- 【华为云技术分享】基于自动机器学习的心脏病预测模型(1)
- python键盘监听
- 打开运行PS、AI等软件时卡在启动窗口的解决办
- 507 LOJ 「LibreOJ NOI Round #1」接竹竿
- 主成分分析和因子分析_简单易懂!一文理清主成分分析思路
- R语言查看某个R包版本号
- 自顶向下语法分析的作业
- RMAN-06004、RMAN-20011
- Bluecoat Web无法正常显示页面解决方案
- 2021-07-02-MySQL必知必会-笔记
- 机械手表,石英手表,智能手表怎么选最好,哪种更适合佩戴?
- tkinter 小说编写器,文本编辑器,小说阅读器
- (windows图形化界)粘滞键后门
- 电视量价齐跌,小米电视率先跌回5字头,或促使电视跌回白菜价
- GIF Movie Gear 4.12 版本出炉了
热门文章
- C# HttpClient Multipart 上传文件
- 多窗口文件管理软件 Q_Dir
- JAVAWeb项目 微型商城项目-------(二)数据库设计
- 每天一道剑指offer-二叉树中和为某一值的路径
- android的子菜单是否支持嵌套,Android的两种菜单
- python如何保存源文件_python处理document文档保留原样式
- python整数类型进制表示_Python的基本数值类型
- hadoop在windows上的环境配置及HDFS API编程示范
- Excel文件导入mysql数据库
- xposed hook 静态函数_Xposed 实现原理分析