С точки зрения вашего скоростного запроса, я бы предложил, чтобы ваш псевдомедианский фильтр был быстрее, потому что он не включает сортировку. Настоящий медианный фильтр требует, чтобы вы сортировали элементы и находили центральное значение, что занимает немало времени.
Причина, по которой ваши шумы соли и перца не устранены, заключается в том, что вы всегда поддерживаете их эффекты, потому что при использовании 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,[]);
РЕДАКТИРОВАТЬ: Вот результат выполнения кода:
РЕДАКТИРОВАТЬ 2: Вот основная теория (она не слишком математическая и основана исключительно на интуиции!)
Шум соли и перца существует в виде чисто белых и чисто черных пикселей, разбросанных случайным образом. Идея состоит в том, что каждое из «закрытых» и «открытых» изображений будет устранять одну половин - либо шум белой соли, либо шум черного перца - и значение пикселя в этом месте должно быть исправлено одной из операций. Мы просто не знаем, какой. Таким образом, мы знаем, что одно изображений как из «закрытых», так и «открытых» является «правильным» для этого пикселя, потому что операция должна была эффективно «медианить» этот пиксель правильно. Поскольку значение «неправильное» должно иметь точно такое же значение в этом пикселе (белое или черное), что и исходное изображение, вычитание его значения не влияет на исходное изображение. Только «правильный» (который отличается точной величиной, необходимой для возврата изображения к его предположительно правильному значению), является правильным, поэтому мы корректируем изображение в этом пикселе на соответствующую величину. Таким образом, если взять оригинальное изображение с шумом и добавить к нему оба различия, мы получим что-то с подавленным шумом.