检测图像上相当亮的点

detect quite brighter spots on the image

我的图像有点嘈杂,背景不均匀。图像中有较亮的凸点,我需要检测它们。

我知道有很多圆形检测算法,但是环境和物体之间的差异太小了。 你有什么建议,如何分割亮点?或者有什么想法可以增加它们之间的强度差异?

更新:

OpenCV环境是C++。我尝试了具有许多参数的自适应阈值。

还不错,但图像包含很多其他黑点。而且有时斑点的面积和物体的面积差不多,这样我以后就分不清了。

要增加图像对比度,您可以看一下直方图均衡化 技术。

它会根据图像直方图重新分配图像的像素强度值,使低对比度区域可以获得更高的对比度。然后对图像执行强度阈值操作可能会产生更好的结果。供参考看看: http://en.wikipedia.org/wiki/Histogram_equalization

还有这个操作的OpenCV实现:

void equalizeHist(InputArray src, OutputArray dst)

和教程:http://docs.opencv.org/doc/tutorials/imgproc/histograms/histogram_equalization/histogram_equalization.html

通常,该技术是对图像进行模糊处理,使 small-scale 细节变得无关紧要,仅保留背景照明的 large-scale 差异。然后从原始图像中减去模糊图像以消除不均匀的照明,只留下可见的局部特征。

我比较喜欢的工具是ImageMagick,但是在OpenCV中原理是一样的。在这里,我克隆你的原始图像,将其模糊超过 8 个像素,然后从原始图像中减去模糊图像:

convert http://s8.postimg.org/to03oxzyd/example_image.png \( +clone -blur 0x8 \) -compose difference -composite -auto-level out.jpg

这里我模糊了超过 32 个像素,并从原始图像中减去模糊图像:

convert http://s8.postimg.org/to03oxzyd/example_image.png \( +clone -blur 0x32 \) -compose difference -composite -auto-level out32.jpg

关键字: 图像处理,模糊蒙版,不均匀照明。