💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
⛳️赠与读者
👨💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能解答你胸中升起的一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。
或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎
💥1 概述
基于Canny边缘检测算法和霍夫变换的硬币边缘检测研究
一、研究背景
在图像处理领域,边缘检测是一项关键技术,它能够提取图像中物体的轮廓信息,对于后续的目标识别、形状分析等任务具有重要意义。硬币作为常见的目标物体,准确检测其边缘对于许多应用场景,如自动售货机的硬币识别、硬币计数系统等至关重要。Canny边缘检测算法以其良好的抗噪性能和精准的边缘提取能力被广泛应用,而霍夫变换则能够在检测特定形状(如圆形)方面发挥重要作用。本研究旨在结合这两种算法实现对硬币边缘的有效检测。
二、相关算法原理
(一)Canny边缘检测算法
Canny边缘检测算法由John F. Canny于1986年开发,它是一个多级边缘检测算法,同时创立了边缘检测计算理论来解释其工作原理。该算法主要包含以下5个步骤:
- 应用高斯滤波来平滑图像:目的是去除图像中的噪声干扰,使后续的边缘检测结果更加准确。
- 找寻图像的强度梯度(intensity gradients):通过计算图像在x和y方向的梯度,确定图像中灰度变化较大的区域,这些区域通常对应着物体的边缘。
- 非最大抑制(non - maximum suppression)技术:在梯度幅值图像上,只有梯度方向上的局部最大值点才被保留,其他点被抑制,以此消除边缘的误检,即本来不是边缘但被检测出来是边缘的情况。
- 使用双阈值的方法来决定可能的(潜在的)边界:设置两个阈值,高阈值和低阈值。高于高阈值的点被确定为强边缘点,低于低阈值的点被抑制,而介于两者之间的点根据其与强边缘点的连接情况来决定是否保留。
- 利用滞后技术来跟踪边界:从强边缘点开始,通过连接与强边缘点相连的弱边缘点,形成完整的边缘轮廓。
(二)霍夫变换算法
三、实验过程
(一)图像预处理
首先,需要对输入包含硬币的图像进行预处理,以便更好地进行后续的边缘检测和霍夫变换。这一步可能包括灰度化处理(如果输入图像是彩色图像),将彩色图像转换为灰度图像,以简化计算;还可能涉及降噪处理,如使用高斯滤波去除图像中的噪声,使图像更加平滑,减少噪声对边缘检测的影响。
(二)Canny边缘检测
利用Canny边缘检测算法对预处理后的图像进行边缘提取。
(三)霍夫变换检测硬币
在得到Canny边缘检测结果后,利用霍夫变换对图像中的圆形(硬币)进行检测。
(四)非极大值抑制
由于霍夫变换可能会产生重复的圆形检测结果,需要使用非极大值抑制算法来排除冗余的圆形。该算法基于圆形的得分(例如圆周上边缘点的个数),对所有检测到的圆形进行排序,并保留得分最高的圆形作为最终结果。在OpenCV的霍夫圆检测实现中,已经在一定程度上进行了相关的优化处理,但在一些复杂情况下,可能还需要进一步手动实现非极大值抑制来提高检测的准确性。
四、实验结果与分析
具体以代码运行结果为准。
通过对不同图像进行实验,观察Canny边缘检测算法和霍夫变换算法结合后的硬币边缘检测效果。
(一)不同阈值对Canny边缘检测的影响
当调整Canny边缘检测的阈值时,发现较低的阈值会检测出更多的边缘信息,但也会引入更多的噪声和不相关的边缘;而较高的阈值则会导致一些真实的边缘被遗漏,检测到的边缘数量减少。例如,当threshold1 = 20
,threshold2 = 60
时,图像中出现了许多细小的、可能是噪声引起的边缘;而当threshold1 = 100
,threshold2 = 300
时,一些硬币的边缘细节丢失。
(二)霍夫变换参数对硬币检测的影响
霍夫变换中的参数如dp
、minDist
、param1
、param2
、minRadius
和maxRadius
对硬币检测结果有显著影响。dp
值过大可能会导致检测不到足够的圆,过小则可能会增加计算量并产生过多的误检;minDist
设置过小会导致多个检测圆重叠,过大则可能遗漏一些相邻较近的硬币;param1
和param2
取值不合适会影响圆心和半径的检测准确性;minRadius
和maxRadius
如果设置不当,会导致过大或过小的硬币无法被检测到。
五、结论
本研究通过结合Canny边缘检测算法和霍夫变换算法,实现了对硬币边缘的有效检测。Canny边缘检测算法能够准确提取图像中的边缘信息,为后续的霍夫变换提供了良好的基础;而霍夫变换则能够在边缘图像中准确检测出圆形的硬币。然而,算法的性能受到多个参数的影响,需要根据具体的图像特点和应用需求进行合理调整。在未来的研究中,可以进一步探索如何优化参数选择,提高算法的鲁棒性和准确性,以适应更复杂的图像场景和实际应用需求。
📚2 运行结果
2.1 Canny边缘检测实现
通过网盘分享的文件:运行结果.rar
链接: 百度网盘 请输入提取码
提取码: uvkg
--来自百度网盘超级会员v6的分享
2.2 霍夫变换实现
通过网盘分享的文件:运行结果.rar
链接: 百度网盘 请输入提取码
提取码: uvkg
--来自百度网盘超级会员v6的分享
部分代码:
def thresholding(image, low_threshold, high_threshold): # 创建一个全零矩阵,与输入图像大小相同,用于存储阈值处理后的结果 thresholded_image = np.zeros_like(image) # 将低阈值和高阈值之间的像素设置为强边缘(255) strong_edges = (image >= high_threshold) # 将低阈值以下的像素设置为弱边缘(50) weak_edges = (image >= low_threshold) & (image < high_threshold) # 将强边缘和弱边缘合并到输出图像中 thresholded_image[strong_edges] = 255 thresholded_image[weak_edges] = 50 return thresholded_image def detect_coins(image_path): # 读取输入图像 image = cv2.imread(image_path) # 将图像转换为灰度图 gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # print(gray) # 对灰度图进行高斯模糊 blurred = cv2.GaussianBlur(gray, (5, 5), 0) # print(blurred)
🎉3 参考文献
文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。(文章内容仅供参考,具体效果以运行结果为准)
[1]付宁,乔立岩,彭喜元.基于改进K-means聚类和霍夫变换的稀疏源混合矩阵盲估计算法[J].电子学报, 2009, 37(0z1):92-96.
[2]庞存锁,侯慧玲,韩焱.基于霍夫变换的高速微弱目标检测算法[J].电子与信息学报, 2012, 34(3):4.
[3] Lei X , Chao C , Ping Z C ,et al.New fast algorithm of Hough transform detection of circles一种用Hough变换检测圆的快速算法*[J].计算机应用研究, 2007, 24(10):197-199.DOI:10.3969/j.issn.1001-3695.2007.10.061.
🌈4 Python代码实现
资料获取,更多粉丝福利,MATLAB|Simulink|Python资源获取