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