数字图像处理常用算法实现-霍夫线检测

本文介绍了霍夫线检测的基本原理,通过将笛卡尔坐标转换为极坐标,利用极坐标平面对图像中的直线进行检测。公式推导中阐述了点到直线的关系,并指出在hough空间中,多条曲线的交点表示一条直线。通过设置阈值确定多少交点形成一条直线。文章还附带了自测效果图。
摘要由CSDN通过智能技术生成

霍夫线检测原理:

笛卡尔坐标的点 <=> 极坐标的曲线
所谓极坐标平面化是指, 将ρ-θ的关系像x-y那样在平面内展开。
公式推导: x-y坐标中的点(x0, y0), 代入极坐标ρ-θ中得
这里写图片描述
ρ,θ就是一对hough空间的变量表示。若将ρ,θ看成直角坐标空间,一个点(x0, y0)就是一个关于ρ,θ的正弦曲线。同样,直线上的其他点(Xn,Yn)也会构成一组关于ρ,θ的正弦曲线,这样势必存在一个关于ρ,θ相交(即垂直点(r,θ))。于是乎, 一条直线能够通过在极坐标下寻找交于一点的曲线数量来检测,如果越多曲线交于一点,就意味着这个交点表示的直线由更多的点组成。我们可以通过设置直线上点的阈值来定义多少条曲线交于一点我们才认为检测到了一条直线。
这里写图片描述

template<typename T>
int myRound(T value)
{
    return (int)(value + (value >= 0 ? 0.5 : -0.5));
}
/*
函数名:doHoughLinesStandard
函数功能:标准霍夫直线检测的源码
函数参数:
    src-->输入的二值图像   lines-->输出的线的坐标(r,θ)
    rho-->极坐标r的步长    theta-->极坐标θ的步长
    threshold-->交点个数阈值 linesMax-->线条数的最大值
备注:
关于极坐标的维度方面,标准的维度空间范围:θ∈[-π/2,π/2],r∈[-D,D],D=(w^2+h^2)^(1/2).可以参见《数字图像处理第三版p755》
这里所映射的极坐标维度范围:θ∈[0,181],有效为[1,180],r∈[0,(2D+1)+1],有效为[1,(2D+1)],D=(w + h).
*/
void doHoughLinesStandard(Mat &src, vector<Vec2f>&lines,float rho, float theta, int threshold,int linesMax)
{
    float irho = 1 / rho;
    const int width = src.cols;
    const int height = src.rows;
    int
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值