адаптивная эрозия и расширение в Matlab - PullRequest
0 голосов
/ 28 апреля 2018

Я внедряю адаптивное расширение и эрозию. Это дополнительный вопрос от этого более раннего. Я написал этот код:

%% dilation and erosion

f = input('Enter the input image for dilation: ');
f_dil = zeros(size(f));
f_ero = zeros(size(f));
padf = padarray(f,[M M],'replicate','both');
padfrow = size(padf,1);
padfcol = size(padf,2);

for i = M+1:padfrow-M
    for j = M+1:padfcol-M
       W = SE{i-M,j-M}.*padf(i-M:i+M,i-M:i+M);
       f_dil(i-M,j-M) = max(max(W));
       f_ero(i-M,j-M) = min(min(W));
    end
end

Но я не получаю хорошие размытые и расширенные результаты. Я не знаю, может быть, код, используемый для вычисления LST и собственных значений, имеет проблему!

Это пример изображения и его расширение с моим кодом:

tire.tif

tire_dil.tif

1 Ответ

0 голосов
/ 28 апреля 2018

Ваша проблема в линии

W = SE{i-M,j-M}.*padf(i-M:i+M,i-M:i+M);

Вы используете i для индексации в обоих направлениях изображения. Там должно быть j там.

Кроме того, при умножении на SE ваш минимум всегда будет равен 0, что приведет к тому, что эрозия станет черной. Вам нужно использовать SE для индексации:

W = padf(i-M:i+M,j-M:j+M);
W = W(SE{i-M,j-M});
...