2016-06-01 14 views
1

イメージをnumpyで処理していて、ある時点でイメージを拡大縮小します。numpyイメージの倍数を掛けたときのオーバーフローを防ぐ

明るい領域に黒い斑点が現れると、結果が醜いように見えることがあります。これは、8ビット画像RGBピクセルの数値オーバーフローが原因であると考えられます。 天井演算子を適用する方法はありますか?乗算が> 255の場合、255にクリップされます。(信号が負になるとは思わないのでフロア関数には興味がありません)

I私はループ内のすべてのピクセルをテストできることを知っていますが、配列処理の厄介な哲学には従わないでしょう。

ご迷惑をおかけして申し訳ありません。

おかげで、 ゲルト

答えて

1

は、あなたはそれがexactelyことを行い、numpy.clip()を使用することができます。

しかし、画像はおそらくどちらかというと美しくはありません。通常は、画像値を[0,255]の範囲のバイトから[0,1]の範囲(暗黙の場合でも)に変換し、gamma correctionを適用します。

+1

'clip()'は整数のオーバーフローを助けません。オーバーフローが既に発生しているので、乗算後にクリップするのは遅すぎます。たとえば、16ビットの整数や浮動小数点の入力をアップキャストして、乗算を行い、* then *クリップを実行する必要があります。 –

+0

@warrenWeckesser 'clip'、つまり' scaled = img.clip(0,255 // factor)* factor'のようになります。 –

+0

コメントはあなたが正しいです。 2番目のパラグラフでは、暗黙的な最終的なアドバイスは、バイトから浮動小数点への変換、操作の実行、そしてその後の変換だけです。 – heltonbiker

関連する問題