2016-09-30 60 views
2

私は衛星SAR画像でスペックルノイズ除去を試みています.SAR画像でスペックルノイズ除去を行っているパッケージはありません。私はpyradarを試しましたが、Python 2.7で動作し、WindowsでPython 3.5を使用してAnacondaで作業しています。また、Rsgislibは利用可能ですが、Linux上にあります。 Joseph meiringもgithubでLeeのフィルタコードを与えていますが、動作しません。 : https://github.com/reptillicus/LeeFilterPythonのスペックル(リーフィルター)

スペックルフィルタ用のPythonスクリプトを共有したり、Pythonでスペックルフィルタ設計を進める方法を教えてください。

答えて

5

これは少し問題です。ライブラリを見つけようとするのではなく、定義からそれを書いてみましょう。あなたは、ウィンドウがサイズxサイズの二乗にしたくない場合は、単に(ETCディスクとの畳み込み、ガウスフィルタ、)何か他のものでuniform_filterを置き換える

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 

img_meanimg_square_meanの両方を計算する場合と同じであれば、任意のタイプの(重み付けされた)平均化フィルタが実行されます。

Leeフィルタは、フィルタとしてかなり古風なようです。エッジがあるウィンドウでは、分散が全体的な画像の分散よりもはるかに大きくなるため、フィルタリングされた画像に対する相対的なフィルタリングされていない画像の重み付けが行われているため、エッジでうまく動作しません例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

ありがとうございました!!!!アレックス、実際に私はこのドメインに新しいですし、良いliterature.Thanksたくさん!!!!!!!!を見つけることができませんでした –

+1

@Shubham_geoようこそ。私はいくつかのノートと例を追加しました。 –

+0

pyradarパッケージは、私が持っている画像の問題であるようですが、上記のフィルタのようにすべてのフィルタの定義を見つけることができる適切な場所を教えてください。 https://pyradar-tools.readthedocs.io/en/latest/examples.html#example-of-filtros – bicepjai