2011-03-11 178 views
4

我有一个二进制图像,需要将所有的黑色像素转换为白色像素,反之亦然。然后我需要将新图像保存到文件中。有没有办法做到这一点,而不是简单地遍历每个像素并翻转其价值?如何在MATLAB中反转二进制图像?

+0

向我们展示一些代码! – Benjamin 2011-03-11 18:49:02

+0

这取决于[你正在处理什么样的图像](http://www.mathworks.com/help/techdoc/creating_plots/f2-10709.html)(RGB,索引,灰度,二进制),但是答案可能已经在这里覆盖:[我如何反转灰度图像并将其转换为二进制图像在MATLAB?](http://stackoverflow.com/questions/2980860/how-do-i-invert-a-灰度图像,并将它转换为二进制图像在MATLAB中) – gnovice 2011-03-11 18:49:03

+0

@gnovice我正在处理二进制图像。我想要移动图像中的所有像素,并将0改为1,反之亦然,但我不是Matlab专家,我不知道如何去做。感谢您的回复。 – 2011-03-11 18:55:30

回答

15

如果你只用零和一的二进制图像binImage,有一些简单的方法来得到反效果:

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

然后,只需使用功能IMWRITE保存倒影。

+0

非常感谢。 – 2011-03-11 19:18:51

1

您可以使用imcomplement matlab函数。说你有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 
-2

[文件名,路径名] = uigetfile({ '* BMP。'}, '文本作为图像');

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 
+0

与前面介绍的解决方案相比,这是一个非常低效的解决方案,甚至不考虑所请求的图像保存。 – mikkola 2015-11-30 17:29:08

0

在Matlab中,通过使用not我们可以1的转换成0和0到1的

inverted_binary_image = not(binary_image) 
+0

'not'函数在使用'〜'运算符时正是所谓的。 – gnovice 2017-11-01 16:13:18

相关问题