islogical (img) возвращает false на инвертированном двоичном изображении? - PullRequest
1 голос
/ 09 марта 2019

Я написал свою собственную функцию преобразования интенсивности, чтобы найти инверсию изображения:

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'), оно не работает из-за логического (изображение), возвращающего false (я проверял).Он возвращает true, когда я проверяю его с помощью встроенной функции imcomplement.Я исправил проблему, используя if all(image(:) == 0 |image(:) == 1) вместо логического условия, и, кажется, оно работает просто отлично, но я не могу понять, почему логический метод не будет работать и почему он продолжает возвращать false.

1 Ответ

1 голос
/ 09 марта 2019

Чтобы инвертировать логическое изображение, используйте оператор логического отрицания:

EnhancedImage = ~image;

При использовании арифметики (1 - image) выходные данные являются числовыми, а не логическими.Логические матрицы - это отдельный класс, который не считается числовым, но они автоматически превращаются в числовые матрицы для применения арифметических операций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...