2016-09-30 48 views
2

我想在衛星SAR圖像中去除斑點噪聲。我沒有得到任何在SAR圖像中去除斑點噪聲的程序包。我已經嘗試pyradar,但它與python 2.7一起工作,我正在使用python 3.5在Windows上處理Anaconda。 Rsgislib也可用,但它在Linux上。 Joseph meiring在github上也提供了一個Lee過濾器代碼,但它無法工作。 : https://github.com/reptillicus/LeeFilterPython中的斑點(Lee濾波器)

請問,任何人都可以共享python腳本的斑點過濾器或如何進行python斑點過濾器設計。

回答

5

這是一個有趣的小問題。爲什麼不從定義中寫出它,而不是試圖爲它找到一個庫?

from scipy.ndimage.filters import uniform_filter 
from scipy.ndimage.measurements import variance 

def lee_filter(img, size): 
    img_mean = uniform_filter(img, (size, size)) 
    img_sqr_mean = uniform_filter(img**2, (size, size)) 
    img_variance = img_sqr_mean - img_mean**2 

    overall_variance = variance(img) 

    img_weights = img_variance**2/(img_variance**2 + overall_variance**2) 
    img_output = img_mean + img_weights * (img - img_mean) 
    return img_output 

如果你不想窗口是大小x尺寸的正方形,只需更換uniform_filter用別的東西(卷積磁盤,高斯濾波器等)。只要計算img_meanimg_square_mean,任何類型的(加權)平均濾波器都可以。

李過濾器似乎相當老式的過濾器。它在邊緣表現不好,因爲對於任何有邊緣的窗口來說,方差將遠遠高於整體圖像方差,因此(未濾波圖像相對於濾波圖像的)權重要接近1

一個例子:

from pylab import * 
import numpy as np 
img = np.random.normal(0.5, 0.1, (100,100)) 
img[:,:50] += 0.25 
imshow(img, vmin=0, vmax=1, cmap='gray') 
imshow(lee_filter(img, 20), vmin=0, vmax=1, cmap='gray') 

Noisy image with edge Lee filtered

正如你所看到的降噪總體很好,但沿着邊緣弱得多。

我對SAR不熟悉,所以我不知道Lee過濾器是否具有某些功能,使其特別適用於SAR斑點,但您可能需要考慮現代邊緣感知的除霧器,如引導過濾器或雙邊過濾器。

+0

非常感謝!!!!亞歷克斯,其實我是這個領域的新手,並沒有找到一份好的文學作品。感謝很多!!!!!!!! –

+1

@Shubham_geo不客氣。我增加了一些筆記和一個例子。 –

+0

pyradar軟件包似乎是我擁有的圖像的一個問題,您能否指點我們到正確的位置,我們可以在這裏找到所有過濾器的定義,就像您上面的過濾器一樣? https://pyradar-tools.readthedocs.io/en/latest/examples.html#example-of-filtros – bicepjai