3

私は 2D 浮動小数点の numpy 配列を使用し、それらを高精度の .png ファイルとして保存しています (この点に到達した方法については、この質問を参照してください)。これを行うには、リンクされた質問のように、freeimage プラグインを使用します。

これにより、16 ビットで保存すると画像が反転する (左右と上下の両方) という奇妙な動作が発生します。この動作は、グレースケール イメージではなく、RGB または RGBA イメージでのみ発生します。コード例を次に示します。

from skimage import io, img_as_uint, img_as_ubyte
im = np.random.uniform(size=(256, 256))
im[:128, :128] = 1
im = img_as_ubyte(im)
io.use_plugin('freeimage')
io.imsave('test_1.png', im)

次の画像を作成します。

8 ビット グレースケール

これを 16 ビットで保存しようとすると、同じ結果が得られます (ただし、50 ではなく 99kb を使用するため、ビット深度が機能していることがわかります)。

次に、RGB 画像と同じことを行います。

im = np.random.uniform(size=(256, 256, 3))
im[:128, :128] = 1
im = img_as_ubyte(im)
io.use_plugin('freeimage')
io.imsave('test_1.png', im)

8 ビットの結果は次のとおりです。

8 ビット RGB

しかし、次のことを行う

im = img_as_uint(im)
io.use_plugin('freeimage')
io.imsave('test_1.png', im)

私にくれます

16 ビット RGB

これは、配列にアルファ レベルも含まれている場合に発生します。

含めることで修正できます

im = np.fliplr(np.flipud(im))

保存する前に。ただし、これはかなり奇妙な動作であり、あまり望ましくないように思えます。なぜこれが起こっているのか、それが意図されているのか、何か考えはありますか? 私が見る限り、それは文書化されていません。

4

0 に答える 0