Медианный фильтр против псевдомедианского фильтра в Matlab - PullRequest
3 голосов
/ 11 июля 2011

Кто-нибудь знает, почему псевдомедианский фильтр работает быстрее, чем медианный фильтр?Я использовал medfilt2.m для медианной фильтрации и реализовал свой собственный псевдомедианский фильтр:

b = strel('square',3);
psmedIm = (0.5*imclose(noisedIm,b)) + (0.5*imopen(noisedIm,b));

, где b - квадратный плоский структурирующий элемент, а noisedIm - изображение, зашумленное шумом соли и перца.*

Также я не понимаю, почему изображение, сгенерированное с использованием псевдомедианского фильтра, не обесценивается.

Спасибо!

1 Ответ

4 голосов
/ 11 июля 2011

С точки зрения вашего скоростного запроса, я бы предложил, чтобы ваш псевдомедианский фильтр был быстрее, потому что он не включает сортировку. Настоящий медианный фильтр требует, чтобы вы сортировали элементы и находили центральное значение, что занимает немало времени.

Причина, по которой ваши шумы соли и перца не устранены, заключается в том, что вы всегда поддерживаете их эффекты, потому что при использовании imclose и imopen вы всегда используете значения min и max внутри структурирующего элемента. , Поскольку вы просто взвешиваете каждый пополам, если есть белый пиксель, вклад коэффициента 0,5 от функции max увеличит значение пикселя, и наоборот для черных пикселей.

РЕДАКТИРОВАТЬ : Вот небольшая демонстрация, которую я сделал, которая поможет вашему псевдомедианцу вести себя немного лучше с шумом соли и перца. Большая разница в том, что он пытается использовать «лучшие части» открытых и закрытых изображений, а не заставлять их бороться с этим. Я думаю, что это достаточно хорошо для устранения соли и перца, которые вы использовали в качестве примера.

img = imread('cameraman.tif');
img = imnoise(img, 'salt & pepper', 0.01);

subplot(2,2,1); imshow(img);

b = strel('square', 3);
closed = double(imclose(img, b));
opened = double(imopen(img, b));

subplot(2,2,2); imshow(closed,[]);
subplot(2,2,3); imshow(opened,[]);

img = double(img);
img = img + (closed - img) + (opened - img);

subplot(2,2,4); imshow(img,[]);

РЕДАКТИРОВАТЬ: Вот результат выполнения кода:

Salt and pepper noise reduction

РЕДАКТИРОВАТЬ 2: Вот основная теория (она не слишком математическая и основана исключительно на интуиции!)

Шум соли и перца существует в виде чисто белых и чисто черных пикселей, разбросанных случайным образом. Идея состоит в том, что каждое из «закрытых» и «открытых» изображений будет устранять одну половин - либо шум белой соли, либо шум черного перца - и значение пикселя в этом месте должно быть исправлено одной из операций. Мы просто не знаем, какой. Таким образом, мы знаем, что одно изображений как из «закрытых», так и «открытых» является «правильным» для этого пикселя, потому что операция должна была эффективно «медианить» этот пиксель правильно. Поскольку значение «неправильное» должно иметь точно такое же значение в этом пикселе (белое или черное), что и исходное изображение, вычитание его значения не влияет на исходное изображение. Только «правильный» (который отличается точной величиной, необходимой для возврата изображения к его предположительно правильному значению), является правильным, поэтому мы корректируем изображение в этом пикселе на соответствующую величину. Таким образом, если взять оригинальное изображение с шумом и добавить к нему оба различия, мы получим что-то с подавленным шумом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...