在图像上检测到相当明亮的斑点

时间:2015-01-11 20:51:06

标签: c++ opencv image-processing detection

我的图像有点嘈杂,背景不均匀。图像包含更多的凸点,我需要检测它们。 这是一个示例图像的链接:

我知道有很多圆检测算法,但环境和对象之间的差异太小。 你有什么建议吗,如何分割这个地方?或者任何增加它们之间强度差异的想法?

更新

OpenCV环境是C ++。我尝试了许多参数的自适应阈值。结果如下:

它还不错,但图像中还包含很多其他黑点。有时斑点区域与物体的位置相同,所以这样我以后就无法区分了。

2 个答案:

答案 0 :(得分:3)

通常,该技术是使图像模糊,使得小尺度细节变得无关紧要,并且仅保留背景照明中的大规模差异。然后从原件中减去模糊图像以消除不均匀照明,只留下局部特征。

我首选的工具是ImageMagick,但OpenCV的原理相同。在这里,我克隆原始图像,将其模糊超过8个像素,然后从原始图像中减去模糊图像:

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

enter image description here

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

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

enter image description here

答案 1 :(得分:-2)

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

基于图像直方图,它将以低对比度区域获得更高对比度的方式重新分配图像的像素强度值。然后对图像执行的强度阈值处理操作可能会产生更好的结果。如需参考,请查看: 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