我試圖消除這種圖像中的正弦噪聲:卸下與巴特沃斯正弦噪聲濾波器
這裏是它的DFT譜(施加日誌和任意強度縮放之後):
我已經有一個巴特沃思濾波器適用於此圖像。它會敲掉中頻峯值。加載完成後,我正在小心地將它從[0..255]縮放到[0..1.0]。這裏的過濾器:
的結果是不是很大:
我的問題:
- 爲什麼仍噪聲中剩餘的一個顯著量圖片?
- 爲什麼結果比原始圖像更暗?過濾器顯然不會觸及DC術語,所以我期望平均強度是相同的。
- 爲什麼過濾器只取出一些的峯?它來自一本教科書,所以我傾向於認爲它是正確的,但是譜中還有其他高峯 - 它們是否也是噪音的一部分?我試圖用同心過濾器去除它們,但是它沒有做太多的事情,使得圖像變得無法識別。
我拍攝了岡薩雷斯和伍茲的書Digital Image Processing的圖像(裁剪)和過濾器。在他們的例子中,週期性噪聲被濾波完全消除,並且圖像的平均強度保持不變。
用於裝載圖像和濾波器我的源代碼,DFT,濾波,IDFT低於:
import cv
def unshift_crop(comp, width, height):
result = cv.CreateImage((width, height), cv.IPL_DEPTH_8U, 1)
for x in range(height):
for y in range(width):
real, _, _, _ = cv.Get2D(comp, x, y)
real = int(real) * ((-1)**(x+y))
cv.Set2D(result, x, y, cv.Scalar(real))
return result
def load_filter(fname):
loaded = cv.LoadImage(fname, cv.CV_LOAD_IMAGE_GRAYSCALE)
flt = cv.CreateImage(cv.GetSize(loaded), cv.IPL_DEPTH_32F, 2)
width, height = cv.GetSize(loaded)
for i in range(width*height):
px, _, _, _ = cv.Get1D(loaded, i)
#cv.Set1D(flt, i, cv.Scalar(px/255.0, 0))
cv.Set1D(flt, i, cv.Scalar(px/255.0, px/255.0))
return flt
if __name__ == '__main__':
import sys
fname, filt_name, ofname = sys.argv[1:]
img = cv.LoadImage(fname, cv.CV_LOAD_IMAGE_GRAYSCALE)
width, height = cv.GetSize(img)
src = cv.CreateImage((width*2, height*2), cv.IPL_DEPTH_32F, 2)
dst = cv.CreateImage((width*2, height*2), cv.IPL_DEPTH_32F, 2)
cv.SetZero(src)
for x in range(height):
for y in range(width):
px, _, _, _ = cv.Get2D(img, x, y)
px = float(px) * ((-1) ** (x+y))
cv.Set2D(src, x, y, cv.Scalar(px, 0))
cv.DFT(src, dst, cv.CV_DXT_FORWARD)
flt = load_filter(filt_name)
cv.Mul(dst, flt, src)
cv.DFT(src, dst, cv.CV_DXT_INV_SCALE)
result = unshift_crop(dst, width, height)
cv.SaveImage(ofname, result)
EDIT
有在過濾器虛分量是原始源的一個錯誤加載爲零。這是導致結果圖像比實際顯示更暗的原因。我已經解決了這個問題並評論了相關的一行。
使用固定源和過濾器@提供×69(是的,我知道這是不是一個真正的巴特沃斯濾波器,但在這個階段,我很高興地嘗試任何事情),這是結果:
比我剛開始時要好,但仍然不如我希望的那麼好。任何人都可以打敗它嗎我懷疑把更多的缺口拿出來,其餘的高峯可能會有一些好處。
EDIT 2
我已經聯繫筆者。這是他們的響應:
的問題是,在 使用的圖像的實驗浮點, 而在書中示出的一個( 在 下載提供的原始)是8位。這是必需的印刷 等
爲了重複實驗, 你必須先從無噪聲 圖像,然後你自己的噪聲加到 它。
+1對於一個完全解釋好的問題 – macarthy 2011-03-02 12:42:30
爲什麼不顯示過濾圖像的dft? – highBandWidth 2011-03-02 21:02:49
@highBandWidth,因爲從濾波器和輸入圖像的DFT(通過乘法)確定它是微不足道的。 – misha 2011-03-02 23:07:05