【问题标题】:Matlab convert image from gray to binaryMatlab将图像从灰度转换为二进制
【发布时间】:2012-03-19 03:40:50
【问题描述】:

在 Matlab 中,我想对灰度图像进行阈值化以将其转换为黑白图像:

for k=1:Y
  for i=1:X
    if gray(i,k)>T
      gray(i,k)=1;
    else
      gray(i,k)=0;
    end
  end
end

你认为T的值应该是多少?

【问题讨论】:

  • 为 T 选择一个值(实际上,特别是只选择 一个 值)确实是一个相当困难的问题,上次我查看了有关该主题的新研究论文.
  • 此外,它在很大程度上取决于您的应用程序以及您将使用的特定数据的性质。你能扩展一下你的问题描述吗?
  • 正如他们所提到的,二值化算法数量众多。对于使用全局阈值的简单示例,您可以尝试旧的备用方法,Otsu 的方法:en.wikipedia.org/wiki/Otsu's_method 但如果不实际查看您的数据,没有人能够告诉您 T 的好值。
  • 这取决于你想对输出做什么。是给人看的吗?做什么机器检测?打印?投影? ...
  • 这类问题也请访问 dsp.stackexchange.com! :)

标签: matlab image-processing


【解决方案1】:

如果我是你,我会使用中位数:

gray=double(gray>median(gray(:)))

PS:一般来说你应该使用这个更高效的代码:

gray=double(gray>T)

【讨论】:

  • 这是一个非常糟糕的主意。带有图形的典型教科书页面可能是 60% 的白色、30% 的灰度图像和 10% 的文本。页面的中间是纯白色的!所以你的图像是纯黑色的。
  • 当然,没有一种简单的解决方案可以适用于所有情况。但是,使用中位数在许多情况下都可以正常运行。因此,这不是一个“非常糟糕的主意”。超过一半的图像饱和的情况非常罕见。
【解决方案2】:

内置函数 im2bw 将 level 作为参数之一。因此,我们可以使用它进行转换,而不是使用 for 循环。默认级别为 0.5。

发件人:http://www.mathworks.com/help/images/ref/im2bw.html

im2bw

根据阈值将图像转换为二值图像

语法

BW = im2bw(I, level)
BW = im2bw(X, map, level)
BW = im2bw(RGB, level)

【讨论】:

    【解决方案3】:

    Dusty 使用 Otsu 方法的答案已内置在 MATLAB 中。

    以下代码来自关于graythresh 函数(实现Otsu 的方法)的MATLAB 页面。

    I = imread('coins.png');
    level = graythresh(I);
    BW = im2bw(I,level);
    imshow(BW)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-01
      • 2013-12-16
      • 1970-01-01
      • 2019-12-01
      • 2011-02-28
      • 2015-12-07
      • 1970-01-01
      • 2023-01-30
      相关资源
      最近更新 更多