#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.
Итак, сообщение об ошибке: «Размеры матрицы должны быть согласованными».