当前位置:网站首页>Hough Transform 霍夫变换原理
Hough Transform 霍夫变换原理
2022-07-04 17:50:00 【a little cabbage】
Hough Transform 霍夫变换
原理
在笛卡尔坐标系中,一条直线由两个A=(x1, y1)和B=(x1, y2)确定,如下图:
将直线y=kx + b可写成关于(k, q)的函数表达式:
对应的变换通过图形直观的表示如下图:
变换后的空间我们叫作霍夫空间。即:笛卡尔坐标系中的一条直线,对应于霍夫空间中的一个点。反过来,同样成立,霍夫空间中的一条线,对应笛卡尔坐标系中的一个点,如下图所示:
我们再来看下A、B两个点,对应霍夫空间的情形:
A映射到霍夫空间中是一条直线,B也映射到霍夫空间中的一条直线,这两条直线在霍夫空间中有一个交点。这个交点就表示了笛卡尔坐标系中由A、B两点所构成的直线的斜率和截距。
再看一下三点共线的情况,如下图:

可以看出,如果笛卡尔坐标系的点共线,那么这些点在霍夫空间中对应的直线交于一点。
如果不止一条直线,如下图所示:

我们选择尽可能多的直线汇成的点,上图中三条直线汇成A、B两点,将其对应回笛卡尔坐标系中的直线如下图所示:
到这里,我们似乎已经完成了霍夫变换的求解,但如果像下图这种情况时:
上图中,直线的斜率是不存在的。为了解决这个问题,我们考虑将笛卡尔坐标系转为极坐标。
在极坐标下是一样的,极坐标中的点对应霍夫空间的线,这是的霍夫空间参数不再是(k, q)了,而是(ρ, θ)的空间,ρ是原点到直线的垂直距离,θ表示直线的垂线与横轴顺时针方向的夹角,垂直线的角度为0度,水平线的角度是180度。

我们只需要求得霍夫空间中的交点的位置,即可得到原坐标系下的直线。
实现流程
假设有一个大小是100x100的图片,使用霍夫变换检测图片中的直线,则步骤如下:
直线都可以用(ρ, θ)表示,首先创建一个2D数组,我们可以叫作累加器,初始化所有制为0,行表示ρ,列表示θ。

该数组的大小决定了结果的准确性,若希望角度的精度为1度,那就需要180列。对于ρ,最大值为图片对角线的距离,如果希望精度达到像素级别,行数应该与图像的对角线距离相等。取二值图轮廓边缘的的第一个点(x, y),将其带入直线的极坐标公式中,然后遍历θ的取值:0,1,2,…,180,分别求出对应的ρ值,如果这个数值在上述累加器中存在对应的位置,则该位置加1。
取二值图轮廓边缘的的第一个点(x, y),重复上述步骤,更新累加器。
搜索累加器中的最大值,并找到对应的(ρ,θ),就可将图像中的直线表示出来。
边栏推荐
- The 15th youth informatics competition in Shushan District in 2019
- [uniapp] uniapp development app online Preview PDF file
- In flinksql, in addition to data statistics, is the saved data itself a state
- node_exporter部署
- Unity adds a function case similar to editor extension to its script, the use of ContextMenu
- SSL证书续费相关问题详解
- Build your own website (15)
- Nebula importer data import practice
- LM10丨余弦波动顺势网格策略
- Technologie de base de la programmation Shell IV
猜你喜欢

Scala basic tutorial -- 18 -- set (2)

Scala basic tutorial -- 13 -- advanced function

Go微服务(二)——Protobuf详细入门

性能优化之关键渲染路径
Summary and sorting of 8 pits of redis distributed lock
关于判断点是否位于轮廓内的一点思考

Basic tutorial of scala -- 16 -- generics

2022CoCa: Contrastive Captioners are Image-Text Fountion Models

升级智能开关,“零火版”、“单火”接线方式差异有多大?

Rookie post station management system based on C language
随机推荐
[go ~ 0 to 1] read, write and create files on the sixth day
Build your own website (15)
ftp、sftp文件传输
工厂从自动化到数字孪生,图扑能干什么?
Uni app and uviewui realize the imitation of Xiaomi mall app (with source code)
Guys, for help, I use MySQL CDC 2.2.1 (Flink 1.14.5) to write Kafka and set
更安全、更智能、更精致,长安Lumin完虐宏光MINI EV?
My colleagues quietly told me that flying Book notification can still play like this
DeFi生态NFT流动性挖矿系统开发搭建
Shell 編程核心技術《四》
Send and receive IBM WebSphere MQ messages
A method of using tree LSTM reinforcement learning for connection sequence selection
基于C语言的菜鸟驿站管理系统
876. 链表的中间结点
Shell 编程核心技术《一》
Caché JSON 使用JSON适配器
C#实现定义一套中间SQL可以跨库执行的SQL语句(案例详解)
Is the securities account opened by qiniu safe?
使用canal配合rocketmq监听mysql的binlog日志
《工作、消费主义和新穷人》的微信读书笔记