2017-07-31 36 views
1

(グレースケール)RAW画像を読み込み、表示するには、次のPythonの使用:PythonのRAW画像奇妙な市松柄

import numpy as np 
import matplotlib.pyplot as plt 
path = 'path\\to\\where\\image\\is\\downloaded' 
f = open(path,'rb') 
height = 2500 
width = 1000 
bin_image = np.fromstring(f.read(), dtype=np.uint16) 
bin_image.shape = (height, width) 
plt.imshow(bin_image) 
plt.show(block=True) 

bayer(RAW)データへのリンクがherebin_image.txt

見つけることが私のこの画像には、奇妙な縞模様の画像があります。 enter image description here

この原因はわかりません。

+0

表示しようとしている画像は何ですか?元の画像を投稿できますか? – Samer

+0

最小限で完全で検証可能な例を示す必要があります。これは、実際に実行するのに十分なコードと、画像などの必要なサポート資料を意味します。 –

+0

「RAW」画像とは、センサーから生まれた(調整されていない、補正されていない)ことを意味しますか?もしそうなら、あなたはおそらく調整/補正する必要があります。非RAW画像キャプチャを試したことがありますか? – barny

答えて

5

ベイヤーイメージは、各ピクセルが赤、緑、青のコンポーネントを持つ通常のRGBイメージとは異なります。代わりに、ベイヤー画像は、強度が変化する各画素位置で単色の赤、緑、または青の値を有する。これは、各ピクセルが特定の波長の光を捕らえることができるように、多くのセンサーでは一般的です。 Wikipedia entry on Bayer filtersが役に立ちます。

最初にde-Bayerに画像を挿入する必要があります。この画像は、これらの値をRGBに補間してから、グレースケールに変換して表示することができます。これは、あなたがcv2.cvtColor()で両方の手順を完了することができ、あなたがOpenCVのを使用していると仮定すると、OpenCVのタグを持っています

import numpy as np 
import matplotlib.pyplot as plt 
import cv2 

path = 'bin_image.txt' 
f = open(path,'rb') 
height = 2500 
width = 1000 
bin_image = np.fromstring(f.read(), dtype=np.uint16) 
bin_image.shape = (height, width) 
bin_image = cv2.cvtColor(bin_image, cv2.COLOR_BayerBG2RGB) 
bin_image = cv2.cvtColor(bin_image, cv2.COLOR_RGB2GRAY) 
plt.imshow(bin_image, cmap='gray') 
plt.show(block=True) 

De-bayered grayscale image

典型的なBayer画像が入る3つの異なる順序があります。 OpenCVでは、BayerBG(最も一般的)、BayerRG、およびBayerGRと表示されています。最良の結果を得るには、生の画像がどのパターンに保存されているかを把握する必要があります。

+0

ありがとうございます。これはまさに私が探していたものです。 – tomdertech

+0

私が持っているcolorMatricesを使用してイメージをカラーリングする方法の正しい方向を教えてください。 – tomdertech

+0

あなたの「カラーマトリクス」は何ですか? 'matplotlib'を使うと、異なるカラーマップを作成して、グレースケール値を他の色にマッピングすることができます。例については、[here](https://matplotlib.org/users/colormaps.html)を参照してください。私は 'cmap = 'gray''の行を変更するだけです。これがあなたが意味するものでなければ、より具体的にする必要があります。 –

関連する問題