Learn as if you were to live forever

勉強の記録(画像処理,DeepLearning,ときどき英語)

raw画像を見てみる

今日はRAW画像を読み込んで表示してみるとどう見えるのかを確認してみます。

RAW画像は画像処理が行われていない生の画像で、レンズの収差やセンサーの特性がそのまま記録されています。まだ人の目で見たのとは程遠い画像になっていて、カメラの画像処理エンジンまたは現像ソフトなどで調整する必要があります。

 

この記事ではRAW画像を読み込んで表示するのが目標です。

RAW画像の読み込みについてはMOIZさんの記事を参考にしました。

uzusayuu.hatenadiary.jp

 

最近散歩で撮影したEOSM100のRAW画像を読み込んでみることにします。

以下はRAW画像と一緒に記録したJPEG画像です。

この画像のRAW画像を読み込んでみます

 

画像を読み込む前にRAW画像を読みこむライブラリrawpyをインストールします。

!pip install rawpy

rawpyの詳細については以下のサイトに詳しい説明がありました。

letmaik.github.io

RAW画像のさまざまな情報を抜き出したり補正するプログラムの説明がまとめられていて、画像処理のプログラムを書くときによく参照します。

 

次にいつも通り、読み込みたい画像をアップロードします。

from google.colab import files
uploaded_file = files.upload()
uploaded_file_name = next(iter(uploaded_file))

RAW画像を読み込むと前回JPEG画像を読み込んだ時よりもアップロードに時間がかかります。それはRAW画像には圧縮されていないたくさんのデータが含まれているためです。ローカルで作業すればそういう時間はかからないのにと、google colabの不便さをちょっと感じました。

 

読み込まれたらRAW画像を読み込みます。

import rawpy
raw = rawpy.imread(uploaded_file_name)

この後に行う画像処理のために、rawをコピー*1し、配列にします。

import numpy as np
raw_image = raw.raw_image.copy()
h=raw.sizes.raw_height
w=raw.sizes.raw_width
raw_array = np.array(raw_image).reshape([h, w]).astype('float')

そして画像を表示してみます。

import matplotlib.pyplot as plt
plt.imshow(raw_array/np.max(raw_array))

以下が読み込んだ画像です。

読み込んだRAW画像

暗くて色もJPEG画像とは全然違います。

さらに拡大してみます。

plt.imshow(raw_array[1500:1600,3650:3750]/np.max(raw_array))

x=3650〜3750,y=1500〜1700を切り取りました

画像を拡大してみると市松模様*2になっています。

このraw画像を人の目で見た時のような画像にするためにはこの後いろいろな処理が必要になります。

どんな処理が必要になるかは次の記事に続きます。

 

*1:どうしてコピーするのかは別の時に説明を書く予定です

*2:今回読み込んだ画像はでベイヤーセンサーのカメラなのでRAW画像が市松模様になります。rawpyのドキュメントを見るとFoveonセンサーについての記載もあるのでFoveonセンサーも読み込めるのかもしれません。Foveonセンサーは3層センサーなのでベイヤーセンサーとは違った結果が出てきそうです。機会があったら読み込んでみたいと思います。