【问题标题】:How do I invert a grayscale image and convert it to a binary image?如何反转灰度图像并将其转换为二进制图像?
【发布时间】:2011-02-28 04:19:54
【问题描述】:

【问题讨论】:

  • 我不了解 matlab,但是如果您可以反转第一张图像中的白色方块而不是让它保持相同的颜色,那肯定会更容易。也许您需要做的就是在绘制之前调整绘图设置?

标签: matlab image-processing


【解决方案1】:

这取决于你的输入矩阵是什么类型。

如果它是一个逻辑矩阵,你可以简单地使用

invImg = ~img;

如果你有 0 到 n 范围内的标量值,请使用

invImg = n - img;

编辑:

如果您想要黑白图像,请尝试以下操作(也许您需要使用 level 参数):

invImg = ~im2bw(img, 0.5);

【讨论】:

  • 网格仍然存在。他们只是非常虚弱。
  • 这是因为网格线在白色背景图像中不是黑色的,它们是灰色的。
【解决方案2】:

我在处理您在上面发布的第二张图片时遇到了一些问题。由于它是 JPEG 格式,因此图像压缩似乎使线条和文本变得模糊,这使得以您想要的方式对其进行阈值处理变得复杂。

我改为返回您在 the previous related question 上发布的索引颜色 GIF 图像,将其转换为灰度(使用 Image Processing Toolbox 中的函数 IND2GRAY),然后将其转换为反转的黑白图像匹配您在上面发布的第一张图片的格式。这是我使用的代码:

[X,map] = imread('original_chart.gif');  %# Load the indexed color image
img = ind2gray(X,map);                   %# Convert the image to grayscale
reversedImage = img < max(img(:));       %# Convert to reversed black and white

这就是reversedImage 的样子:

【讨论】:

【解决方案3】:

只翻转颜色图怎么样?

颜色图(翻转(颜色图));

【讨论】:

    【解决方案4】:

    看起来第三个情节与上面第二个情节相反。

    要考虑的一件事是您用于绘制图像 image() imagesc()imshow() imagesc() 进行自动缩放,imshow() 将使用颜色图。

    要考虑的另一件事是输入图像本身。它的范围是 0 - 255、0 - 1.0 还是 RGB?根据它是什么,反过来会有所不同。

    【讨论】:

      【解决方案5】:

      您的图像不是黑白二值。里面也是灰色的。

      从您的编辑来看,您似乎认为要关闭的任何像素以及要打开的任何像素(即,将其转换为纯二进制黑白图像),这应该可以满足您的要求:

      newImg = zeros(size(img));
      newImg(img > 0) = 0;    % <-- This line is not really needed
      newImg(img = 0) = 1;
      

      请注意,第二行并不是绝对必要的,因为无论如何新图像都被初始化为 0,它只是为了显示到底发生了什么。

      【讨论】:

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