目标检测(直方图均衡+霍夫变换)

文章介绍了通过直方图均衡化提升图像对比度,然后使用霍夫变换检测图像中的圆形,以此来识别珍珠。这种方法能有效检测出完整形态的珍珠,但可能遗漏边缘不完整的珍珠。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:请检测出下图中的珍珠。

直方图均衡(equalizeHist)是一种图像处理技术,用于增强图像的对比度。该技术的原理是通过对图像的灰度值进行重新分配,使得灰度值分布更均匀,从而使得图像的对比度得到增强。

直方图均衡的过程如下:

统计图像中每个灰度值出现的次数,得到图像的灰度值分布直方图;

计算出每个灰度级的概率密度函数(PDF);

计算出每个灰度级的累积分布函数(CDF);

根据CDF对每个像素点的灰度值进行重新分配,使得重新分配后的灰度值分布更均匀。

直方图均衡可以使得图像中的细节更加清晰,从而提高图像的质量和信息量。但是,直方图均衡也会导致图像中噪声和背景的增强,从而降低图像的视觉质量。因此,在实际应用中,需要根据具体情况选择合适的图像增强方法。

霍夫变换(Hough Transform)是一种在数字图像处理中,用于检测特定形状的算法。它最初由霍夫(Hough)于1962年提出,用于检测直线。后来,霍夫变换被扩展用于检测各种形状,如圆、椭圆等。

其基本原理是将图像中的像素点在参数空间中进行映射,从而在参数空间中形成一条曲线,当曲线在某些位置交叉时,则说明在原始图像中存在所要检测的特定形状。参数空间可以是直线的极坐标空间,也可以是圆或椭圆的参数空间。

先对原图的灰度图像进行直方图均衡化提升图像对比度,再进行霍夫变换,从而可较好地实现检测图中的珍珠。

import cv2

# 读取图像并转换为灰度图像
img = cv2.imread('2-1.jpg')

h = img.shape[0]
w = img.shape[1]
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 对直方图进行均衡化
equ = cv2.equalizeHist(gray)

# 运行HoughLines函数以检测直线
edges = cv2.Canny(equ, 100, 300, apertureSize=3)
cv2.imshow('edges', edges)
# 运行HoughCircles函数以检测圆圈
circles = cv2.HoughCircles(edges, cv2.HOUGH_GRADIENT, 1, minDist=50, param1=1000, param2=14, minRadius=30, maxRadius=60)
# 绘制检测到的圆圈
sum_circle = 0
for circle in circles[0]:
   x, y, r = circle
   cv2.circle(img, (x, y), r, (0, 0, 255), 2)
   sum_circle += 1
print('图中珍珠的数量为:', sum_circle)
# 显示结果
cv2.imshow('image', img)
cv2.imwrite('result.png', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

结果图:

 可以看到,通过对原图灰度图像进行直方图均衡后再进行霍夫变换,可以检测出图中所有形态完整的珍珠,除了左右边缘的两个被截断的形态不完整的珍珠没有被检测到,总体效果还是不错的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

F0reverBound

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值