如何在MATLAB中反转二进制图像?

5
我有一张二进制图像,需要将所有黑色像素转换为白色像素,反之亦然。然后,我需要将新图像保存到文件中。是否有一种方法可以在不循环每个像素并翻转其值的情况下完成这项任务?

这取决于您正在处理什么类型的图像(RGB、索引、灰度、二进制),但答案可能已经在这里涵盖了:如何在MATLAB中反转灰度图像并将其转换为二进制图像? - gnovice
@gnovice 我正在处理二进制图像。我想遍历图像中的所有像素,将0改为1,将1改为0,但我不是Matlab专家,也不确定如何做。感谢您的回复。 - Ofir A.
4个回答

16

如果你有一个仅包含0和1的二值图像binImage,有很多简单的方法可以将其反转:

binImage = ~binImage;
binImage = 1-binImage;
binImage = (binImage == 0);

然后,只需使用函数IMWRITE保存反转图像即可。


3
您可以使用Matlab函数imcomplement。假设您有一个二进制图像b,那么:
bc = imcomplement(b); % gives you the inverted version of b
b = imcomplement(bc); % returns it to the original b
imwrite(bc,'c:\...'); % to save the file in disk

1
在Matlab中,通过使用not,我们可以将1转换为0,0转换为1
inverted_binary_image = not(binary_image)

“not”函数正是在使用“~”运算符时调用的内容。 - gnovice

-2
[filename, pathname] = uigetfile({'*.bmp'},'Text as image');

img=imread(filename);
img=im2double(img);
[r,c,ch]=size(img);
%imshow(img);
invert_img=img;
if(ch==1)
 for i=1:r
    for j=1:c
        if(invert_img(i,j)==0)
          invert_img(i,j)=1;
        else
          invert_img(i,j)=0;
        end
    end 
end
end

1
与之前提出的解决方案相比,这是一种非常低效的解决方案,甚至没有考虑到所要求的图像保存。 - mikkola

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接