2016-01-20 114 views
0

我有一張圖像,在執行預處理級別之後,我觀察到有大量負值隨機位於圖像中。從圖像中刪除負值

有什麼辦法可以去除那些不是零的負值,而是通過MATLAB中的一些平均操作?

要求:應用該操作後,我的圖像不應該高度失真。

+0

請張貼一些代碼與您的圖片 –

+0

我認爲如果您有負值,那麼您的圖像已經失真。 –

+0

改進格式 – davejal

回答

4

首先:如評論中所示,試着找出爲什麼你有負面的價值。然後決定,如果你想要這些值。如果是:將圖像重新縮放至[0,1]。如果您仍然想要移除這些像素並按照某個平均值取代它們,請按照您在問題中提出的建議,這裏有一個方法:

這樣的噪音稱爲「鹽椒&胡椒噪音」。這個有趣的名字的原因很明顯,一旦你看到它的圖像:在圖像上有白色(像素= 1)和黑色(像素= 0)點,看起來像鹽和胡椒粒。

Salt & Pepper Noise

在你的情況,如果我們假定負值是零,你只有圖像中的椒鹽噪聲。爲了解決這個問題,我們準備一些數據:我們讀取攝影師圖像並將其轉換爲雙倍(以允許負值)。然後我們隨機地將所有像素的1%反轉,所以它們是負的。

im = im2double(imread('cameraman.tif')); 
randmask = rand(size(im)) < 0.01; 
distIm = im - 2*randmask.*im; 

一種簡單和有效的方式來過濾鹽&椒鹽噪聲, 是使用中值濾波器(medfilt2),其 具有限定附近,例如中位值替換各像素的圖像中3×3。這個過濾器是你對抗椒鹽噪音的標準武器之一。

medfilt2(distIm); 

你甚至可以選擇哪些是小於零的像素,過濾器只適用於這些,使用roifilt2功能。這樣,你不碰「正確的」像素:

filtIm = roifilt2(distIm, distIm<0, @medfilt2); 

result

看起來不那麼糟糕,不是嗎?但請注意:如果您有大面積的負像素,那麼效果不佳,因爲這個鄰域的中位數仍然是負值。

+0

非常感謝您提供這個有效的插圖。再一次感謝你。我可以從中學到很多東西。 – Roma