![9de1ea1bae567b1bfb3a668175c738a7.png](https://i-blog.csdnimg.cn/blog_migrate/cba93403cbaedff8794d3c49a41de33e.jpeg)
写在前面:
前几天写的第一篇文章收获了35个赞(目前)确实给了我挺大的鼓舞的哈哈哈,感觉写文章也挺锻炼自己能力的,也算是把它当笔记写吧
最近笔者开始着手开发一个新的项目,其中第一步就用了很多数字图像的知识,包括灰度图变换、canny边缘检测、霍夫变换等,想起来前几天的数字图像处理文章,索性在写一篇关于霍夫变换的吧,也好借这个机会用代码和效果图来帮大家感受霍夫变换算法的强大
关于环境:
笔者所使用的开发环境是Ubuntu16.04 + Pycharm + opencv4,前面两个应该大家都知道是什么吧,Ubuntu为一款较为流行的linux操作系统,Pycharm则是一款较为先进的python开发编译器,其中opencv是计算机视觉领域必备的一个计算机视觉库,全程为Open Source Computer Vision Library,强烈推荐对于计算机视觉感兴趣的同学可以开始了解一下 (ps:今天发现了一个pycharm暗黑系主题插件:Material Theme UI,简直好看哭了,这里安利一波,贴一下效果图)
![6d77b04116a10a00d33407bc524aae08.png](https://i-blog.csdnimg.cn/blog_migrate/92e978e224a813f737181edb4d09fb14.jpeg)
一.前言
在我们开始深入学习霍夫变换算法之前,我们先简单了解一下什么是霍夫变换以及霍夫变换的应用举例
1.霍夫变换到底是个什么啥呀
霍夫变换是一种特征检测(feature),被广泛应用在图像分析(image analysis)、计算机视觉(computer vision)以及数位影像处理 (digital image processing)。 经典的霍夫变换是侦测图片中的直线,之后,霍夫变换不仅能识别直线,也能够识别任何形状,常见的有圆形、椭圆形。
让我们想象一下,现在叫大家在一副图片中找出一条直线或者圆,相信对于大家应该都是一件相当容易的事,但是对于计算机来说,一副图像所呈现的只是灰度值从0-255的庞大矩阵而已,它可不容易知道复制的矩阵中哪些是直线哪些不是,霍夫变换便是帮助计算机'看到'图像中的直线或圆的一种算法
其基本思想为:
将传统的图像从x y轴坐标体系变换到参数空间(m, b)或者霍夫空间(Hough space)中,通过在参数空间(parameter space)或可称为累加空间(accumulator space)中计算局部最大值从而确定原始图像直线或圆所在位置
(下面用一个具体应用来让大家有个直观的理解)
2.霍夫变换的具体应用实例
霍夫变换最初较为成功的应用体现在机场跑道检测,如图 1-1 、图 1-2所示,图中为基于霍夫变换的对机场的机场跑到检测
![77f3e9ccb096b387ea0b77f14422cd77.png](https://i-blog.csdnimg.cn/blog_migrate/4d77d5f3e26573466706b40fc7d3428f.jpeg)
![aa91447a1e52fa057c4651b87938a711.png](https://i-blog.csdnimg.cn/blog_migrate/0012828ccbac8d7af1ca476eae5469b8.jpeg)
二.霍夫变换
常见的霍夫变换可归为以下两种:
1).基于笛卡尔坐标空间的霍夫变换
2).基于极坐标空间(二维直线霍夫空间)的霍夫变换
下面让我们来一一介绍这两种霍夫变换算法,以下文章仅包括霍夫变换中直线检测部分,如对圆检测或椭圆检测有兴趣的同学可自行去查阅资料哈
![d144a5a748da85500090d79266464285.png](https://i-blog.csdnimg.cn/blog_migrate/48621b991c241b2cccc7c4279f21177a.jpeg)
(贴张很酷炫的霍夫变换可视图)
1.基于笛卡尔坐标空间的霍夫变换
在我们从初中就开始使用的平面直角坐标中,一条直线的表示通常用