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

Posted

技术标签:

【中文标题】如何在 MATLAB 中反转二进制图像?【英文标题】:How can I invert a binary image in MATLAB? 【发布时间】:2011-07-13 17:12:13 【问题描述】:

我有一个二值图像,需要将所有黑色像素转换为白色像素,反之亦然。然后我需要将新图像保存到文件中。有没有办法做到这一点,而不是简单地循环每个像素并翻转它的值?

【问题讨论】:

这取决于what sort of image you're dealing with(RGB、索引、灰度、二进制),但答案可能已经在这里涵盖:How do I invert a grayscale image and convert it to a binary image in MATLAB? @gnovice 我正在处理二进制图像。我想移动图像中的所有像素,只需将 0 更改为 1,反之亦然,但我不是 Matlab 专家,我不知道该怎么做。感谢您的回复。 【参考方案1】:

如果您有一个只有 0 和 1 的二进制图像 binImage,有许多简单的方法可以将其反转:

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

然后只需使用函数IMWRITE保存倒影即可。

【讨论】:

【参考方案2】:

您可以使用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

【讨论】:

【参考方案3】:

在 Matlab 中,通过使用not,我们可以将 1 转换为 0,将 0 转换为 1

inverted_binary_image = not(binary_image)

【讨论】:

not 函数正是使用 ~ 运算符时调用的函数。【参考方案4】:
[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

【讨论】:

与前面介绍的解决方案相比,这是一个非常低效的解决方案,甚至不考虑请求的图像保存。

以上是关于如何在 MATLAB 中反转二进制图像?的主要内容,如果未能解决你的问题,请参考以下文章

Matlab - 如何使用二值图像屏蔽 3-D 图像

matlab用代码生成的图片如何显示误差系数

如何在matlab中实现灰度形态检测灰度图像上的圆形物体?

如何在Matlab中反转矩阵矩阵?

如何使用 Findpeaks 在 Matlab 中正确绘制山谷

如何在 MATLAB GUI 中的函数之间传递值?