Использование оператора Робертса на изображении - PullRequest
0 голосов
/ 09 июля 2011

Этот алгоритм предназначен для применения к изображению оператора Робертса и сохранения результата в новом файле.

Вместо этого этот код выводит точно такое же изображение, что и входные данные.

Я новичок в Matlab, поэтому ваши советы и отзывы о моем коде приветствуются.

Я знаю, что для этого есть встроенная функция, я делаю это как упражнение.

function [] = Roberts(filename)
%somehow, it outputs the exact same image back.
%I know that this doesn't include the y component of the Roberts operator'

Img = imread(filename);
NewImg = Img;

SI = size(Img);

I_W = SI(2)
I_H = SI(1)

Roberts = [1,0;0,-1];

M_W = 2;
y = 0;
x = 0;
M_Y = 0;
M_X = 0;
%I initialized these counters here, because Matlab told me that these variables were
%used before they were initialized. This is strange, because they are initialized in the for loop, correct?
    for y=0 :1: y<I_H
        for x=0 :1: x<I_W 

            S = 0;

            for M_Y = 0 :1: M_Y < M_W
                for M_X = 0 :1: M_X < M_W

                    if (x + M_X - 1 < 0) || (x + M_X - 1 > I_W)
                       S = 0;      
                       disp('debug: tried to go beyond the image, value of that component, set to 0');

                    elseif (y + M_Y - 1 < 0) || (y + M_Y - 1 > I_H)
                       S = 0; 
                       disp('debug: tried to go beyond the image, value of that component, set to 0');

                    else
                        S = S + Img(x + M_X - 1, y + M_Y - 1) * Roberts(M_X,M_Y);
                    end
                end

            end

            NewImg(x,y) = S;
        end


    end  


imwrite(NewImg,'Roberts.bmp');
end

РЕДАКТИРОВАТЬ - у меня есть еще один вопрос - в этом примере, если бы сказал, что x = Img (x, y), получило бы пиксель в строке x, столбце y или пиксель в строкеу, столбец х?

1 Ответ

2 голосов
/ 09 июля 2011

Это не то, что вы думаете:

for y=0 :1: y<I_H

Вы действительно хотите:

for y = 0:I_H
...