Создание медианного фильтра

Мне дали изображение с "пятнистым шумом", моя задача - удалить каждый слой отдельно, а затем рекомбинировать чистое изображение. Мне не разрешено использовать med2flt() только медианный фильтр. Я уже разделил 3 разных слоя: красный, зеленый и синий, но не знаю, как применить к ним медианный фильтр. Как бы я это сделал?


person user2762870    schedule 30.10.2013    source источник
comment
Вам разрешено использовать colfilt или nlfilter? Проблема очень проста с этими функциями.   -  person chappjc    schedule 31.10.2013


Ответы (1)


Используя nlfilter

Если вам разрешено использовать nlfilter, вы можете попробовать использовать flt = @(x) median(x(:)) в качестве функции фильтра. Вы найдете больше информации об этом, если наберете doc nlfilter.

Написание собственного

Возможно, это упражнение посвящено тому, как самостоятельно реализовать операцию фильтрации. Во-первых, вы можете захотеть выделить память для отфильтрованного изображения с помощью imf = zeros(size(im, 1) - 2, size(im, 2) - 2); Это изображение немного меньше, потому что один из способов обработки краев — их отбрасывание. Затем рассмотрите две петли for поверх x и y для изображения im, как в

for x = 1 : size(im, 2) - 2
    for y = 1 : size(im, 1) - 2
        roi = im(y : y + 2, x : x + 2);
        imf(y, x) = median(roi(:));
    end
end

roi сохраняет локальную окрестность 3x3 im, а median(roi(:)) позволяет вычислить медиану этих 9 значений интенсивности.

person s.bandara    schedule 30.10.2013