создание свертки в matlab вручную

#matlab-figure

#matlab-рисунок

Вопрос:

Я хочу выполнить обработку изображений свертки в matlab без использования команды (conv2) Я хочу использовать команду (. ^) с циклом 2 for Я создаю этот код для создания фильтра LoG 5×5, но он не работает в этой строке (I (r, c) = sum(сумма ( Маска. *Я( (r-2):(c-2), (r 2):(c 2) ) ));)

 clc
clear;
Img = imread ('11.jpg');                                               %reading Image
for x = 1:size(Img,1)                                                  % converting to Gray 
    for y =1:size(Img,2)
        G (x,y)= (Img(x,y,1)*0.3   Img(x,y,2)*0.59   Img(x,y,1)* 0.11);
    end
end
Mask = [0,0,-1,0,0;0,-1,-2,-1,0;-1,-2,16,-2,-1;0,-1,-2,-1,0;0,0,-1,0,0]; % the mask
I=double(G);Mask=double(Mask);
% I=conv2(G,Mask);                                                      % masking quickly
for r = 3: size(I,1)-2                                                  %masking manualy
   for c = 3: size(I,2)-2
      I(r,c) =sum(sum( Mask.* I( (r-2):(c-2), (r 2):(c 2) ) ));
   end
end
imshow(Img);title('Orginal Image');
figure,imshow(G);title('Gray Image');
figure,imshow(uint8(I));title('Proccessed Image');
 

Ответ №1:

Отладка — хороший способ решить некоторые проблемы.

Когда c = 4, r = 3 (второй цикл в «для c = 3: size (I,2) -2»)

I((r-2):(c-2), (r 2):(c 2) ) представляет собой матрицу 2 * 2,

а маска — это матрица 5 * 5.

Итак, сообщение об ошибке: «Размеры матрицы должны быть согласованными».