就你的速度查詢而言,我建議你的pseudomedian過濾器更快,因爲它不涉及排序。真正的中值過濾器要求您對元素進行排序並找到中心值,這需要相當長的時間。
爲什麼你的鹽和胡椒的噪音沒有被消除的原因是你總是保持它們的效果,因爲當你使用imclose
和imopen
時,總是使用結構元素中的最小值和最大值。因爲你只是加權一半,如果有一個白色像素,來自max
函數的0.5因子貢獻將使像素值上升,反之亦然黑色像素。
編輯:下面是我做的一個快速演示,它可以幫助你的pseudomedian更好地處理鹽和胡椒噪聲。最大的區別是,它試圖使用已打開和已關閉圖像的「最佳部分」,而不是讓它們將它打出來。我認爲它消除你用作示例的鹽和胡椒噪音效果很好。
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:(!這不是過分的數學完全是靠直覺爲主)這裏的基本理論
鹽和胡椒粉的噪音是隨機散佈的純白色和純黑色像素。這個想法是,'封閉'和'打開'的圖像將分別消除一半的 - 無論是白鹽噪聲還是黑胡椒噪聲 - 並且該位置的像素值應該由操作。我們只是不知道哪一個。所以我們知道其中一個的「閉合」和「開放」兩個圖像對於該像素是「正確的」,因爲該操作應該有效地「正確地」對該像素進行「中位數」。由於「不正確」的圖像在原始圖像中應該具有與該像素完全相同的值(白色或黑色),因此減去其值不會影響原始圖像。只有「正確的」(它將圖像返回到其假定的正確值所需的精確量不同)是正確的,所以我們在該像素處調整圖像的相應量。因此,採取嘈雜的原始圖像,並增加它們的差異給我們帶來的噪音減少了很多。
謝謝!我不確定我有什麼你說的pseudomedian過濾器?那麼我該怎麼做呢,我有什麼需要改變的嗎? – Glove
@biz我爲你添加了一個代碼示例,我認爲它的效果比打開和關閉圖像的線性組合效果要好一些,而且應該高於純中值濾波的速度。它的重點是與鹽和胡椒噪音工作,雖然... – aardvarkk
非常感謝你! – Glove