3

PIL の ImageFilter は、カーネルまたはマスクでフィルタリングした後、ピクセル値 (カーネルではない) を 0 から 255 の間で正規化する方法を教えてください。 ,1,1 ))

私のコードは次のようでした:
画像のインポート
画像フィルターをインポート
Horiz = ImageFilter.Kernel((3, 3), (-1,-2,-1,0,0,0,1,2,1), scale=None, offset=0) #ソーベル マスク
im_fltd = myimage.filter(水平)
4

2 に答える 2

1

答えは次のドキュメントにありKernelます。

scale 引数が指定されている場合、各ピクセルにカーネルを適用した結果が scale 値で除算されます。デフォルトは、カーネルの重みの合計です。

編集:ゼロで割るとうまくいかないので、少し実験して、スケールがゼロのときに何が起こるかを発見しました。結果の値はすべて<= 02550> 0なります。

あなたの場合、代わりにスケール1とオフセットを使用することをお勧めし128ます。

PSソースscaleを見て、パラメータの計算を確認できます:

    if scale is None:
        # default scale is sum of kernel
        scale = reduce(lambda a,b: a+b, kernel)
于 2013-04-09T17:58:02.433 に答える
1

マークの上記の回答は、ゼロ加算カーネルがスケール引数 0 または None で使用されているか、または渡されていない/言及されていない場合に何が起こるかに関する彼の理論を述べています。[0,255] の範囲にないカーネル、スケール、およびオフセットを適用した後に、PIL が計算されたピクセル値を処理する方法について説明します。計算されたピクセル値を正規化する方法についての私の理論は、単純に次のようにすることです。結果の値 <= 0 はすべて 0 になり、> 255 はすべて 255 になります。

于 2013-04-11T19:22:38.983 に答える