10

衛星 SAR 画像でスペックル ノイズを除去しようとしています。SAR 画像でスペックル ノイズを除去するパッケージがありません。私はpyradarを試しましたが、それはpython 2.7で動作し、Windowsでpython 3.5を使用してAnacondaに取り組んでいます。Rsgislib も利用できますが、Linux 上にあります。Joseph meiring も github で Lee フィルター コードを提供していますが、機能しません。: https://github.com/reptillicus/LeeFilter

親切に、だれでもスペックル フィルターの python スクリプト、または python でスペックル フィルターの設計を進める方法を共有できます。

4

2 に答える 2

17

これは楽しい小さな問題です。そのためのライブラリを見つけようとするのではなく、定義から書いてみませんか?

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 / (img_variance + overall_variance)
    img_output = img_mean + img_weights * (img - img_mean)
    return img_output

ウィンドウをサイズ x サイズの正方形にしたくない場合は、uniform_filter別のもの (ディスクによる畳み込み、ガウス フィルターなど) に置き換えてください。img_meanと の両方を計算するのに同じである限り、任意のタイプの (重み付けされた) 平均化フィルターを使用できますimg_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')

エッジのあるノイズのある画像 リーフィルター

ご覧のとおり、ノイズリダクションは全体的に非常に優れていますが、エッジに沿ってはるかに弱くなります.

私は SAR に詳しくないので、Lee フィルターに SAR のスペックルに特に適した機能があるかどうかはわかりませんが、ガイド付きフィルターやバイラテラル フィルターなどの最新のエッジ認識デノイザーを調べてください。

于 2016-09-30T08:01:15.530 に答える