2017-01-03 13 views
2

rawpyでPythonでraw DNGピクチャを処理しようとすると、奇妙な結果に終わります。私のカメラは14ビットの原画像を生成しつつDNG rawピクチャが16ビットの深さでインポートされましたが、予期しないplt.show()結果

import rawpy 
import imageio 
from matplotlib import pyplot as plt 

path = '/home/stefan/AIJ/RAW.DNG' 
with rawpy.imread(path) as raw: 
    rgb = raw.postprocess() 
plt.imshow(rgb) 
plt.show() 

結果は、8ビット値を持つRGB画像アレイです。私は同じファイルをインポートすることが可能であるが、16ビットで出力していることを理解一部googleingから

enter image description here

rgbアレイを可視化

は、期待される結果を与えます。

私は後処理機能で、次のパラメータを使用:

rgb = raw.postprocess(output_bps=16,demosaic_algorithm=None,output_color = rawpy.ColorSpace.Adobe) 

は今rgb配列は、16ビットの値が含まれていますが、次のように結果を可視化:

enter image description here

誰かがどのように教えてもらえ私は最初の結果と似ていますが、16ビットの値を扱うような視覚化を得ることができましたか?

私のカメラは16ビットではなく14ビットイメージを生成していますが、パラメータoutput_bpsを14に変更すると、視覚化の結果はさらに悪化します。

ありがとうございます!

要望に応じて、PENTAX K-5の生の画像を追加しますが、それは18MBで、フォーラムには2MBの制限があります(ファイルを渡す別の方法かもしれません)。

+0

生ファイルは共有できますか?通常のカメラでは、デモザイク処理を必要としないDNGを出力する可能性は低いです...または通常のカメラではありませんか? –

+0

なぜデモザイク処理を適用しない場合、ColorSpace.Adobe? – Piglet

+0

これは私が自発的に自分自身に尋ねたことですが、この写真はデモザイクする必要がありますか?しかしoutput_bps = 8ビットのために出力は大丈夫です、私は考慮しませんでした。 – noste99

答えて

1

imshowには16ビットRGBイメージが表示されないため、イメージの読み取り方法とは関係ありません。あなたが視覚的に16ビット画像の読み込みの結果を確認することに興味があるのであれば、私は、各バンドの

plt.imshow(rgb[:, :, 0]) 

などで、個別に検査帯のいずれかをお勧めします。またはrgbを8ビットに変換して表示すると、

rgb8 = (rgb/256).astype('uint8') 
plt.imshow(rgb8) 
+0

ありがとうjdmcbr!私はあなたの提案された解決策を注意深くチェックします。私はPyQtGraphモジュールが16ビットの画像を視覚化できることをウェブ上でいくつか検索しました。誰かがこのモジュールの経験がありますか? St – noste99

+0

親愛なるJDMCBR、あなたが提案したものはうまく動作します。どうもありがとう。私はPyQtGraphを見ていて、これは有望だと思います。 – noste99

+0

よかった、うれしかった。私の限られた経験である 'pyqtgraph'は、' matplotlib'の代わりにそれを使うよう勧めていませんでしたが、うまくいくと思っています。 – jdmcbr

関連する問題