isologic(img)在反向二进制图像上返回false?

时间:2019-03-09 15:37:46

标签: matlab image-processing

我编写了自己的强度转换函数以查找图像的逆向:

function EnhancedImage = transform(image,transformation)
if transformation == "inverse"
    if islogical(image)
        EnhancedImage = 1 - image;
        disp("Binary");
    elseif size(image,3) == 1
        EnhancedImage = 255 - image;
        disp("GreyScale");
    end
end
end

如果我向其发送二进制图像,则该功能可以正常工作

im = imread('cameraman.tif');
img = transform(im2bw(im),'inverse');

但是,当我再次反转生成的图像transform(img,'inverse')时,由于isologic(image)返回false(我检查了),所以它不起作用。当我使用内置的补偿函数检查它时,它返回true。我通过使用if all(image(:) == 0 |image(:) == 1)代替了等轴测条件来解决了这个问题,它似乎可以正常工作,但是我无法弄清楚为什么等轴测逻辑将不起作用,以及为什么它总是返回false。

1 个答案:

答案 0 :(得分:1)

要反转逻辑图像,请使用布尔求反运算符:

EnhancedImage = ~image;

使用算术(1 - image)时,输出为数字而不是逻辑。逻辑矩阵是一个单独的类,不算作数字,但它们会自动转换为数字矩阵以应用算术运算。