自己实现的简单霍夫圆变换

这篇博客介绍了如何利用霍夫变换实现图像中的圆检测。首先,通过灰度转换、高斯模糊和Canny边缘检测预处理图像。接着,详细解释了霍夫圆变换的原理,它利用霍夫空间统计可能存在的圆。最后,展示了实现霍夫圆变换的代码,包括创建三维数组、标记操作和阈值判断,并指出未应用非极大值抑制可能导致参数调整的局限性。
摘要由CSDN通过智能技术生成

简单的基于圆霍夫变换

实验目的

实现基于霍夫变换的图像园检测(边缘检测可以使用opencv的canny函数),即在图片中检测到可能存在的园。

实验步骤

首先我们在本次实验中的目的是基于园霍夫变换,霍夫变换实验前我们要进行灰度,高斯模糊,canny边缘检测三项操作,灰度转换是因为我们要进行边缘检测输入应该是一个灰度图像,所以我们的首要操作是对图像的灰度操作,高斯模糊目的是减少整个图像中的噪点对实验结果的影响。Canny边缘检测会输出一个二值图,三种操作的实现可以使用opencv自带的函数:
灰度转换 cvtColor(imagesource,imageoutput,btype)其中要注意的是在opencv的3版本中btype与2版本会有不同,下面是在二和三版本的各种转化的btype:
在这里插入图片描述
然后高斯模糊使用GaussianBlur函数,具体使用方式可以参考相关资料。
canny边缘检测也可以使用canny函数,具体使用和参数可以参考相关资料。canny边缘检测输出的是一个二值化后的图像,即整个图像中只有两种熟知的像素点信息。

霍夫园变换原理

基于上面实现的canny边缘检测,我们来理解霍夫圆变换,霍夫圆变换其实是使用霍夫空间来实现的一种对于所有可能情况的统计。霍夫空间按照我的理解来说是一个方便于我们统计数据的空间,如在基于直线的霍夫变换中我们可以将一条直线转换为霍夫空间上的一个点,而基于圆的霍夫空间则是对二值化上的每一个非0点的可能存在的园上的点的统计。
即我们的二值化图像对应于二维的信息,而我们霍夫空间是对应三维信息,即将我们的图像二维空间作为底面,检测的圆的半径作为高的增长变化,半径增加1,我们的高增加1,然后通过设定我们的半径最大最小范围,二值化上的每一个非0点可以对应到霍夫空间上的以该非0点为顶点或顶点圆心的圆锥或圆台,通过统计霍夫空间上的每一个点的数值可以看到通过该点的园的数量,然后使用一个阙值就可以得到一个园上的点数大于阙值的园。

霍夫变换实现

在实现过程中我使用的是一个vector来定义的三位数组,定义方式为:

 vector<vector<vector<int>>>gassionspace(m, vector<vector<int>>(n, vector<int>(z, 0)));  //设立一个m*n*z的数组 初始值为0

然后是对每一种可能存在的园的情况的标记操作:

for (int r = 0; r < z; r++)
   {  
       for (int i = 0; i < m; i++)
       {
           for (int j = 0; j < n; j++)
           {
               if (cannyimg.at<uchar>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值