如何反转灰度图像并将其转换为二进制图像?

时间:2010-06-05 15:06:13

标签: matlab image-processing

5 个答案:

答案 0 :(得分:5)

这取决于输入矩阵的类型。

如果是逻辑矩阵,您只需使用

即可
invImg = ~img;

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

invImg = n - img;

修改

如果您想要黑白图像,请尝试以下操作(可能需要使用级别参数):

invImg = ~im2bw(img, 0.5);

答案 1 :(得分:3)

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

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

[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的样子:

alt text

答案 2 :(得分:3)

如何只是翻转色彩图?

颜色表(flipud(颜色映射));

答案 3 :(得分:1)

看起来第3张情节与上面第2张相反。

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

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

答案 4 :(得分:1)

您的图片不是二进制黑色&amp;白色。那里也有灰色。

根据您的编辑,您似乎关闭任何像素,以及任何关闭的像素(即,将其转换为直接的二进制黑白图像),这应该做你想要的:

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

请注意,第二行并非严格必要,因为无论如何新图像都被初始化为0,它只是为了显示究竟发生了什么。