медианный фильтр против псевдомедианного фильтра в Matlab

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

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

где b — квадратный плоский элемент структурирования, а NoisedIm — изображение, зашумленное шумом соли и перца.

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

Спасибо!


person Glove    schedule 11.07.2011    source источник


Ответы (1)


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

Причина, по которой ваш шум соли и перца не удален, заключается в том, что вы всегда поддерживаете их эффекты, потому что вы всегда используете как минимальное, так и максимальное значения внутри элемента структурирования, когда используете imclose и imopen. Поскольку вы просто взвешиваете каждый наполовину, если есть белый пиксель, вклад коэффициента 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,[]);

EDIT: Вот результат выполнения кода:

Подавление шума с солью и перцем

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

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

person aardvarkk    schedule 11.07.2011
comment
Спасибо! Я не уверен, что понял то, что вы сказали о псевдомедианном фильтре? так что мне тогда делать, есть ли что-то, что я должен изменить? - person Glove; 11.07.2011
comment
@biz Я добавил для вас пример кода, который, я думаю, работает немного лучше, чем просто выполнение линейной комбинации открытых и закрытых изображений, и все же должен значительно увеличить скорость по сравнению с чистой медианной фильтрацией. Однако он в значительной степени ориентирован на работу с шумом соли и перца ... - person aardvarkk; 11.07.2011
comment
@aaedvarkk Я не знаю, почему ваш код не генерирует изображение с шумоподавлением, и вы уверены, что это работает? Как вы думаете, вы могли бы вместо этого дать мне псевдомедианный фильтр? - person Glove; 11.07.2011
comment
@biz Код генерирует изображение с шумоподавлением. Я просто продолжаю заменять переменную img обработанными версиями. На рисунке, полученном в результате выполнения кода, нижнее правое изображение — это изображение с шумоподавлением. Я думаю, что он проделал довольно хорошую работу по устранению шума соли и перца, оставаясь при этом верным псевдомедианному подходу, который вы использовали. - person aardvarkk; 11.07.2011
comment
У меня есть вопрос. ваша модификация отличается от исходной вычитанием исходного (зашумленного) изображения, вместо того, чтобы брать половину суммы открытых и закрытых изображений. Как это лучше для шума соли и перца? - person Glove; 18.07.2011