【数字图像处理】霍夫(Hough)变换

系列文章目录

本系列主要是在阅读论文时的学习笔记,在遇到较为经典的数字图像处理的算法和知识点,对其进行整理和总结,主要包括原理,方法,算法等。(希望可以坚持下来)

系列文章目录如下:

暂时还没(持续更新)

目录

系列文章目录

绪论

一、霍夫变换原理

1.1 y = kx + b

1.2 r = xcosθ + ysinθ

1.3 使用原理

二、实现步骤

引用

绪论

霍夫变换是一种较为经典的检测简单形状如线段和圆形、椭圆等的方法。采用的基本思想是累加投票的思想。

一、霍夫变换原理

在笛卡尔坐标系(平面直角坐标系)中表示一条直线的方法有两种:

  1. y = kx + b
  2. r = xcosθ + ysinθ

1.1 y = kx + b

在此,常用的方法是第一种,已知确定的k0、b0就可以确定一条直线。由此引入霍夫空间。在笛卡尔坐标系空间下,横坐标为x,纵坐标为y,而在霍夫空间的坐标系下,横坐标为k,纵坐标为b,要表示霍夫坐标系下的直线采用的方法是:b = xk + y 。

那对于一条已知的确定的直线:y = k0x +b0,在霍夫坐标系下有已知一点(k0, b0)与其对应。而相对应的若在霍夫坐标系下有直线:b = -x0k + y0,在直角坐标系下有已知一点(x0, y0)与其对应。在此要注意负号是因为在进行对应是y = kx + b对应的是b = -xk + y 。相关的对应关系如下图所示:

【数字图像处理】霍夫(Hough)变换

标题笛卡尔坐标系中一已知直线对应霍夫坐标系中的一点

【数字图像处理】霍夫(Hough)变换

标题霍夫空间中的一已知直线对应笛卡尔坐标系中一点

所以得出映射关系:

  • 笛卡尔坐标系中一已知直线映射霍夫坐标系中的一点
  • 霍夫空间中的一已知直线映射笛卡尔坐标系中一点

1.2 r = xcosθ + ysinθ

而在笛卡尔坐标系中有一特殊存在:x = a(垂直于x轴的直线,k无穷大),在这种情况就无法在一般的霍夫坐标系中找到一点与其对应,这时要将坐标转换成极坐标的形式(ρ-θ),ρ是原点到直线的垂直距离,θ是直线的垂线与横轴逆时针方向的夹角,垂直线的角度为0,水平线的角度为180度。在霍夫空间中坐标系的横坐标变为θ,纵坐标变为ρ。

映射关系如下图所示:

【数字图像处理】霍夫(Hough)变换

极坐标下的相互映射关系

所以映射关系变为:

  • 笛卡尔极坐标系内的一已知点映射到霍夫空间中是一曲线
  • 霍夫空间极坐标系内的一已知点映射到笛卡尔空间中是一直线

1.3 使用原理

目的: 找笛卡尔空间中的线条

  1. 笛卡尔空间转换到霍夫空间,将笛卡尔空间中的点,转换成霍夫空间中的直线(曲线)
  2. 很多的点被转换成直线(曲线),这些线会产生交点。
  3. 在霍夫空间找交点最多的点,这个点的霍夫坐标值就是笛卡尔空间中的线条的k和b(ρ和θ)。

; 二、实现步骤

假设有一个100×100像素的图片,现在使用霍夫变换检测图片中的直线:
1、创建一个二维数组,初始化所有值为0。数组的行表示r,列表示θ。 即创建了一个在霍夫空间中的极坐标系。数组尺寸的大小决定着结果的准确性。如果我们希望直线的角度的精度为1度,那这个数组的列就设置为180列,每列是一度,依次从0度到180度。数组的行表示r,如果我们希望直线的精度达到像素级别的,r的最大值就应该等于图像的对角线距离( 即认为图像的左上角为图像原点,图像中点到原点的距离即为r),所以r就从0取到图像的对角线长度值。这个数组我们又称为累加器。
2、遍历原图中的每一个点,计算每个点在θ取0-180之间的每个r,如果这个数值在上述累加器中存在相应的位置,则在该位置上加1。 遍历后即获得了在霍夫空间中极坐标系中的很多曲线。
3、搜索累加器中的最大值,( 即找到2中获取的霍夫空间中极坐标系中的很多曲线的交点)并找到这个最大值对应的r和θ,就可以将图像中直线表示出来了。

引用

相关参考及引用:

  1. opencv学习笔记(十六):霍夫变换
  2. 第16章:霍夫变换

Original: https://blog.csdn.net/shisniend/article/details/125809795
Author: dahei_zy
Title: 【数字图像处理】霍夫(Hough)变换

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/641009/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球