Я запустил твой код и получил эффект, который ты описал. Посмотрите, как все выглядит светлее:
Рисунок 1 - Оригинал слева, оригинальное преобразование Робертса справа
Изображение в моей системе было действительно насыщенным. Мое изображение было uint8, и операции выдвигали изображение за 255 или ниже 0 (для отрицательной стороны), и все стало светлее.
Изменяя строку кода в imread для преобразования в double, как в
Img = double(rgb2gray( imread(filename)));
(обратите внимание, что мое изображение было цветным, поэтому я также выполнил конвертацию в rgb. Вы можете использовать
Img = double(( imread(filename)));
Я получил улучшенное изображение:
Оригинал слева, исправленный код справа.
Обратите внимание, что я мог бы также получить этот результат, используя 2d свертку, а не ваш цикл:
Robertsx = [1,0;0,-1];
Robertsy = [0,-1;1,0];
dataR = conv2(data, Robertsx) + conv2(data, Robertsy);
figure(2);
imagesc(dataR);
colormap gray
axis image
Для следующего результата:
