Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image processing 查找“;“明亮像素的分数”;图像中(阈值?)_Image Processing_Grayscale_Threshold - Fatal编程技术网

Image processing 查找“;“明亮像素的分数”;图像中(阈值?)

Image processing 查找“;“明亮像素的分数”;图像中(阈值?),image-processing,grayscale,threshold,Image Processing,Grayscale,Threshold,我有大量的灰度图像,在较暗的背景上显示明亮的“纤维”。我试图量化纤维的“数量”。由于它们几乎在任何地方重叠,因此无法计算纤维的数量,因此我想简单地计算白色纤维的面积分数与完整图像相比有多大(例如,这一个是55%的白色,另一个纤维较少的只有43%的白色,等等)。换句话说,我想量化图像中纤维的密度 示例图片: 高密度: 低密度: 我认为一个简单的(自适应)阈值过滤器可以很好地完成这项工作,它只需将图像转换为纯黑白,然后计算白色像素的分数。然而,我的答案似乎几乎完全取决于我选择的阈值。我用大量不同的阈

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

示例图片:

高密度:

低密度:

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

这显然不是一个好方法,因为我的结果与我选择阈值的方式有极大的偏差,因此完全无用。此外,我有大约100张这样的图片,我并不期待尝试手动为所有这些图片选择“正确”的阈值


如何改进此方法?

由于图像复杂,纤维轮廓模糊,因此获得“精确”测量的希望不大

因此,重要的是实现可重复性,即确保始终为相同的纤维密度指定相同的测量值,即使可能在不同的照明条件下,并且为不同的密度指定不同的测量值

这排除了人为干预调整阈值的可能性

我最好的建议是依靠大津阈值,它非常擅长于寻找有意义的背景和前景强度,并且与光照无关


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

只不过是呼应了@YvesDaoust的想法,并提供了一些具体的例子

您可以使用ImageMagick生成图像的直方图,ImageMagick安装在大多数Linux发行版上,可用于OSX和Windows。我只是在命令行中这样做,但是运行一些测试并查看Yves的建议对您的效果非常强大和容易

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

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

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

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

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

这不是一个了不起的区别!嗯。。。我试着加入一个中值滤波器来减少噪音,但那没有帮助。您是否有可用的PNG图像以避免令人讨厌的人工制品?

谢谢。我认为轮廓的模糊性正是我面临的问题,因为增加阈值似乎只会导致考虑更多的纤维(例如,计算更多的模糊边缘),因此它如此依赖于阈值是有道理的。没有专门解决这个问题的方法吗?模糊性在所有图像中都应该非常相似,所以也许有一种算法可以观察从黑到白的梯度,并选择一些中间值作为“边缘”?我不知道这是如何通过头脑风暴来实现的。“我将研究大津阈值”。@NickThissen:不要担心模糊边缘,只需使用经验测量。重复性比任何一种“正确性”都更重要。
convert 1.gif -format "%[fx:int(mean*100)]" info:
50

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