画像計測のためのRaw現像
このページでは「PythonのRawPyモジュールを用いた画像計測に適したRaw現像処理」について解説します。
作成日:2024/06/05
- はじめに
デジタルカメラによる撮影画像から輝度計測を行うには、計測に適した現像処理を行う必要があります。撮影画像は一般的にJPEG形式の画像ファイルでカメラストレージに保存されますが、JPEG形式の画像はすでに現像処理が行われています。現像処理はイメージセンサーによる計測値を元に、明るさやコントラスト、ホワイトバランスなどの画像調整を行うものです。また現像処理はメーカーごとに設定が異なり、多くは画像の見栄えを重視した処が行われています。そのため画像計測を行うには、現像前のRAW形式の計測データをカメラから取得し、自分で現像処理を行う必要があります。
[ 注 意 書 き ]
・参考 Program の環境(python 3.8)
・以下のプログラムをコピーする時は、全角やスペースが含まれていないか注意してください。
・Rawファイルの形式によっては正しく動作しない可能性があります。
2. Python プログラム
2-1. モジュールのインポート
# Rawデータを現像するためのモジュール
import rawpy
import rawpy.enhance
# 画像の保存や確認に使用するモジュール
import tifffile as tif
import numpy as np
import matplotlib.pyplot as plt
2-2. Rawデータの読み込み
Fname = "DJI_20231228115106_0018"
IFile1 = rawpy.imread(Fname + '.DNG')
OFile1 = Fname + '.tif'
# カメラに保存されているホワイトバランス
wbo = IFile1.camera_whitebalance
print("Eライト:",wbo)
wbd = IFile1.daylight_whitebalance
print("Dライト:",wbd) # デフォルト
2-3. 現像処理の設定
# デベイヤの設定(こちらを使用する)
RawPyParameters1 = rawpy.Params(
#階調と色空間
output_bps = 16,
output_color = rawpy.ColorSpace.raw, # raw=0
# ブラックレベル
user_black = [0,0,0,0],
# スケール調整の有無
no_auto_scale = False,
# 露出
no_auto_bright = True,
#ホワイトバランス(用途に合わせて使い分ける)
#use_camera_wb = True,
#use_auto_wb = False,
user_wb = [1.0,1.0,1.0,0.0],
# デモザイク
demosaic_algorithm = rawpy.DemosaicAlgorithm.LINEAR,
#階調の応答特性
gamma = [1.00,0.00] #ガンマ無し
)
2-4. 現像処理の関数
# RawPyを使った現像処理の関数
def RawPostprocess(Paramnum,raw_original):
RGB_original = raw_original.postprocess(params=Paramnum)
hight, width, channel = RGB_original.shape
raw_original.close()
return RGB_original, hight, width, channel
2-5. 現像処理
# 画像の読み込みと現像処理
RGB_original, hight, width, channel = RawPostprocess(RawPyParameters1,IFile1)
2-6. 画像の確認と保存のための関数
# 現像した画像を確認する(引数1=表示する画像)
def ImageShowRGB_16(Image):
Image2 = (Image / 65536 * 255).astype(np.uint8) # 8bitのデータ形式に変換
plt.figure(figsize=(8,8))
plt.imshow(Image2)
plt.show()
# Tiff形式で画像を保存する(引数1=保存先,引数2=保存する画像)
def ImSaveInTiff(OFile,Image):
tif.imwrite(OFile,Image)
2-7. 画像の確認と保存
# 画像を表示
ImageShowRGB_16(RGR_original)
# Tifファ入りで保存
ImSaveInTiff(OFile1,RGR_original.astype('uint16'))
3. 参考資料
ゼロから作るRAW現像 , 大泉宗徳(@MuneOiz),技術書展6, 2019.
WEBページ制作メモ:
・プログラム以外にソフトウェアを使った方法は?
・RawPy以外のモジュールはある?