Я не знаю, как реализовать медианный фильтр со скользящим окном (ядром) в MATLAB.Мне нужно знать, как выглядит реализация, чтобы я мог попытаться реализовать алгоритм BSE (блочное умное стирание), который очень похож на медианный фильтр.Мне нужно, чтобы стереть несколько черно-белых пикселей.Я знаю, что есть функция medfilt2 (), но мне нужно знать, как она реализована.
Алгоритм BSE работает следующим образом:
Алгоритм BSE основан на медианной технологии и занимает местопикселя с экстремальным значением (черный или белый) медианным значением окружающих его пикселей.
1) Для окна NxN с центром в тестовом пикселе, где обычно должно быть N, и следует предложить большее значение.
2) Если f (i, j) = 0 или f (i, j) = 255, f (i, j) - пиксель абсолютного экстремального значения, который необходимо оценить;переходите к шагу 3. В противном случае значение f (i, j) не изменяется;перейдите к шагу 4.
3) При обнаружении пикселя экстремального значения его уровень серого заменяется медианным значением окна.
4) Процедура повторяется для следующего окна.
Я понял, что мне нужно реализовать медианный фильтр с условием проверки, является ли текущее значение пикселя 0 или 255. Если это так, я изменяю это значение на медианное значение соседних пикселей.,
Я не знаю, достаточно ли я ясен, но мне нужна помощь с этим:).
Текущий алгоритм BSE:
function [outimg] = medianfilt(img,sz)
green = img(:,:,2);
[rows,cols] = size(green); % get size of grayscale image
pad = sz-1; % padding to be added
nimg = zeros(rows+pad,cols+pad); % padded image
nimg(pad/2+1:rows+pad/2, pad/2+1:cols+pad/2) = green;
outimg = zeros(rows,cols); % output / median filtered image
for x = pad/2 + 1 : cols + pad/2 % loop over columns
for y = pad/2 + 1 : rows + pad/2 % loop over rows
if nimg(y,x) == 0 || nimg(y,x) == 255
win = nimg(y-pad/2:y+pad/2, x-pad/2:x+pad/2); % get mxm window
outimg(y-pad/2,x-pad/2) = median(win(:)); % find median
else
outimg(y-pad/2,x-pad/2) = nimg(y,x);
end
win = nimg(y-pad/2:y+pad/2, x-pad/2:x+pad/2); % get mxm window
outimg(y-pad/2,x-pad/2) = median(win(:)); % find median
end
end
imshow(outimg);
end