C++ 检测图像上较亮的点

C++ 检测图像上较亮的点,c++,opencv,image-processing,detection,C++,Opencv,Image Processing,Detection,我有一个有点嘈杂的图像,背景是不均匀的。图像中包含brigther凸点,我需要检测它们。 以下是示例图像的链接: 我知道有很多圆检测算法,但是环境和物体之间的差异太小了。 你有什么建议吗,如何分割Brigger点?或者有没有增加它们之间强度差异的想法 更新: OpenCV环境是C++。我尝试了带有许多参数的自适应阈值。结果如下: 这并不坏,但图像中包含许多其他黑点。有时斑点区域与物体接近,因此我以后无法区分。要增加图像对比度,您可以看看直方图均衡化技术 基于图像直方图,它将以低对比度区域可

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

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

更新:

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


这并不坏,但图像中包含许多其他黑点。有时斑点区域与物体接近,因此我以后无法区分。

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

基于图像直方图,它将以低对比度区域可以获得较高对比度的方式重新分配图像的像素强度值。然后,对图像执行的强度阈值操作可能会产生更好的结果。有关参考,请查看:

还有此操作的OpenCV实现:

void equalizeHist(InputArray src, OutputArray dst)

教程:

通常,该技术是模糊图像,使小比例细节变得无关,只保留背景照明中的大比例差异。然后从原始图像中减去模糊图像以消除不均匀照明,只留下局部特征可见

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

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

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

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


关键词:图像处理、反锐化遮罩、不均匀照明。

哪个OpenCV环境?Python还是C++?另外,您是否尝试过某种自适应阈值机制?你也可以发布原始图像吗?直方图均衡化不起作用。这是一场全球性的变革。此外,图像的对比度通常相同,因此直方图均衡化可能无法按预期方式工作。具体地说,它唯一能做的就是使那个微小的白点变得更白,但背景在对比度方面也不可避免地会被推向更白的一端。建议使用局部和自适应转换。很久没有看到这种情况了!这也称为反锐化掩蔽。干得好@库尔特菲弗-忘了!我同时也在做很多其他的事情,所以如果我没有马上投票给马克的答案而冒犯了你,那么我道歉。马克,谢谢你的回答。这是一种简单而有效的检测斑点的方法。@MarkSetchell供您参考,您使用“关键字:”的方法正在使用中