在图像中找到“明亮像素的分数”(阈值?)

时间:2016-03-24 10:33:45

标签: image-processing grayscale threshold

我有大量的灰度图像,在较暗的背景上显示明亮的“光纤”。我试图量化纤维的“量”。由于它们几乎在任何地方重叠,因此不可能计算纤维的数量,因此我想简单地计算白纤维的面积分数与整个图像的比较大(例如,这一个是55%白色,另一个纤维较少的一种只有43%的白色等。换句话说,我想量化图像中纤维的密度。

示例图片:

高密度:https://dl.dropboxusercontent.com/u/14309718/f1.jpg

密度较低:https://dl.dropboxusercontent.com/u/14309718/f2.jpg

我认为一个简单的(自适应)阈值滤波器可以很好地完成这项工作,只需将图像转换为纯黑/白,然后计算白像素的分数即可。但是,我的答案似乎几乎完全取决于我选择的阈值。我通过采用大量不同的阈值进行了一些快速实验,发现在所有图片中,白色像素的分数几乎完全是阈值的线性函数。换句话说 - 根据我选择的门槛,我可以得到大约10%到90%之间的任何答案。

这显然不是一个好方法,因为我的结果非常偏向于我如何选择阈值,因此完全没用。此外,我有大约100个这样的图像,我不期待尝试手动选择所有这些图像的“正确”阈值。

如何改进此方法?

2 个答案:

答案 0 :(得分:2)

由于图像复杂且纤维的轮廓模糊,因此没有希望得到一个"精确的"测量

重要的是实现可重复性,即确保相同的光纤密度始终指定相同的测量值,即使在不同的光照条件下也是如此,并且不同的密度分配不同的测量值。

这排除了人为干预调整阈值。

我最好的建议是依靠Otsu阈值处理,它非常擅长于找到有意义的背景和前景强度,并且非常适合照明。

应避免在Otsu之前增强对比度,因为二值化与对比度增强相通(因此没有真正的好处),但对比度增强会通过在地方饱和来降低图像质量。

答案 1 :(得分:0)

真正回应@YvesDaoust的想法 - 并提供一些具体的例子......

您可以使用ImageMagick生成图像的直方图,ImageMagick安装在大多数Linux发行版上,可用于OSX和Windows。我只是在命令行执行此操作,但它功能强大且易于运行某些测试,并了解Yves的建议如何为您服务。

# Make histograms for both images
convert 1.jpg histogram:h1.png
convert 2.jpg histogram:h2.png

enter image description here

enter image description here

是的,它们相当双峰 - 所以Otsu阈值应该找到一个最大化类间差异的阈值。使用Fred Weinhaus网站here

中的脚本otsuthresh
./otsuthresh  1.jpg 1.gif
Thresholding Image At 44.7059%

./otsuthresh  2.jpg 2.gif
Thresholding Image At 42.7451%

enter image description here

enter image description here

计算每张图片中白色像素的百分比:

convert 1.gif -format "%[fx:int(mean*100)]" info:
50

convert 2.gif -format "%[fx:int(mean*100)]" info:
48

不是那么精彩的区别!嗯......我尝试添加中值滤波器来降低噪音,但这没有用。你有没有像PNG一样的图像,以避免讨厌的人工制品?