私は 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)
次の画像を作成します。
これを 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 ビットの結果は次のとおりです。
しかし、次のことを行う
im = img_as_uint(im)
io.use_plugin('freeimage')
io.imsave('test_1.png', im)
私にくれます
これは、配列にアルファ レベルも含まれている場合に発生します。
含めることで修正できます
im = np.fliplr(np.flipud(im))
保存する前に。ただし、これはかなり奇妙な動作であり、あまり望ましくないように思えます。なぜこれが起こっているのか、それが意図されているのか、何か考えはありますか? 私が見る限り、それは文書化されていません。