在具有大量图像的迭代中使用im2bw

时间:2016-09-28 19:48:12

标签: matlab image-processing threshold

我正在使用Matlab从图像中提取数据,我在灰色图像中使用函数 im2bw 以供以后使用bwlabel但是阈值在所有图像中都不起作用,因为图像获得了噪声和获得的数据不具代表性。 如何配置退出该问题的阈值?函数 graytresh 没有给出一个好的阈值,还有其他方法可以解决这个问题吗? 我使用了很多图像(有时候更多的是一万张)而且我无法一个接一个地运行。 图像是游泳的鱼,我需要小心。 感谢您阅读我的问题!

我在图像bw中使用 graytresh ,如http://imgur.com/TEaWF1y - 有时图像上的失真太多了,带有图像https://www.dropbox.com/sh/xve7oe84xcfj9yt/AACA0dYrK_m7o8Oie0KWWR-2a?dl=0初始图像,带有失真的bin图像和bw图像的dropbox

2 个答案:

答案 0 :(得分:0)

有无数种方法可用于确定二值化阈值。这取决于图像。无法给出适用于任何图像的一般答案。

我建议您选择一组有代表性的图像并比较最常用的阈值处理方法的结果。

全局阈值也可能根本不合适。还可以尝试使用本地阈值方法。

阅读本文以获得有关阈值处理方法的广泛比较: http://pequan.lip6.fr/~bereziat/pima/2012/seuillage/sezgin04.pdf

答案 1 :(得分:0)

我尝试找到鱼,并且使用标准化的绿 - 蓝差异似乎得到了相当好的结果 - 这只是绿色和蓝色成分之间的差异,归一化到范围[0,1]。我使用的步骤如下:

  • 进行自动水平对比度拉伸,以便更好地解决问题
  • 计算归一化的绿 - 蓝差异,(绿 - 蓝)/(绿+蓝)
  • 阈值为25%

我刚刚在命令行中使用了 ImageMagick 。它安装在大多数Linux发行版上,可用于OSX和Windows。我相信你可以在Matlab中做同样的事情:

convert fishy.jpg -auto-level -fx "(g-b)/(g+b)" -threshold 25% result.jpg

enter image description here

如果我要处理10,000张图像,我会使用 GNU Parallel 来让所有CPU内核并行工作:

parallel 'convert {} -auto-level -fx "(g-b)/(g+b)" -threshold 25% results/{}' ::: fish*jpg