トランジスタ技術 2017年2月号

キーフレーズ

-3 -2 USB Arduino -4 MHz -1 LED 信号 Raspberry Pi 出力 FFW BSB 2017 コネクタ http:// ASB ラズベリー GPS モジュール 電圧 データ BBW UUW 000 周波数 SPII マイコン 機能 基板 アンプ 100 技術 入力 電流 プログラム duino 使用 電源 Linux 12V キット 接続 ビット 回路 ASU クロストーク 500 B-2 可能 SPI MOSFET 200 ポード BSU タイプ state 設定 セット センサ MAX 動作 対応 変換 プリント基板 コマンド co.jp インピーダンス 表示 MSB GNSS 24V .com ファイル レジスタ www 超音波 AAW 800 クロック 処理 BSF ビッチ 受信 ASF 最大 搭載 制御 カメラ 時間 CPU オーディオ シリアル 写真

目次ページ

徹底評価 / Pi Camera の生 800 万画素の画像データの取り出し方と評価 加します . ・ Raw データを取得できているか確認する スクリプト・ファイルの作成 camera. capture ('test—raw. jpg', bayer = True) リスト 1 のようなスクリプトを適当なテキスト・エ 同じようにスクリプトを実行するともう 1 枚の画像 デイタで作成します . スクリプト・ファイル名は が出来上がります . 試しに "ls ー al" コマンドでファ capture01. py としておきます . イルの大きさを確かめます . リスト 1 の内容をざっと説明します . 最初の 3 行は タイマとカメラ・モジュールを制御するパッケージを ファイルの名前やサイ ズなどが表示される ロードするコマンドです . 4 ~ 5 行目はキャプチャす る画像の解像度を設定し , モニタにプレビューを映し ー 1 pi pi 336808 Jul 21 21 : 18 test.jpg : 出すところです . 5 ~ 6 行目はプレビューのため , 2 秒 ー 1 pi pi 6740074 Jul 21 21 : 18 test— : 間待ってプレビューを停止します . 最後の行が JPEG ー raw. JPg ファイルを保存するコマンドです . プレビューを行う のは , 画像のチェックだけでなく露光の自動調整のた test—raw.jpg は test.jpg よりファイルが大きくなっ めです . ています . これはイメージ・センサの生の信号である このスクリプトを実行するのに , スクリプトが保存 Raw データが JPEG ファイルのメタ・データとして されているディレクトリで , コマンド・プロンプトか JPEG の内容の後に格納されていることを示していま ら , 次のコマンドを入力します . す . JPEG 画像は camera. resolution で設定された大き $ python3 capture01. py さになりますが , 同一ファイル中のメタ・データであ る Raw データはその設定にかかわらずイメージ・セ プレビューが 2 秒ほど表示された後 , そのディレク ンサの最大解像度の画像です . トリに通常の JPEG 画像が保存されています . 次に , リスト 1 の最後の行を次のように画像のファ イル名を変え , bayer というパラメータを True で追 1 バイト Raw データの先頭 メタ・データのヘッダ } 32768 バイト ( 使用せす ) (a) ファイル全体 JPEG 16 9 ! 8 : 7 ー 6 ー 5 ー 4 ! 3 先頭 1 画素目 ( Gb ) 2 画素目 ( B ) 最初の 3 画素目 ( Gb ) 4 画素分 を 9 8 ー 7 ー 6 ー 5 : 4 ー 3 : 4 画素目 ( B ) 1 2 右から 1 ~ 4 画素目の下位 2 ビット 5 画素目 ( Gb ) IO} 9 : 8 : 7 : 6 : 5 : 4 : 3 の上位の 8 ビット 6 画素目 ( B ) (b) Raw データ ( 直列データ中 ) の画素単位ビット配列 2592 ( VI ) 画素目 3280 ( V2 ) \Gb\ B \Gb - : 0 豆ト - ダミー・バイト G b : B : R : Gr R : Gr : R : Gr : R : Gr : R :Gb: B Gb: B :Gb\ B :Gb: B ℃ b の上位の 8 ビット メタ・データ・ バイト数 : 6404096 ( V 1 ) 10270208 ( V2 ) Raw データ 画像左上から始まり 右へ 1 行 , さらにそ の行単位を繰り返し 最下行まで順番に並 次の 4 画素分 画素目 2593 ( VI ) 3281 (V2) 画素目 1944 ( VI ) 2464 ( V2 ) 行 24 ( VI ) 28 ( V2 ) バイト 3240 ( VI ) 4100(V2))\ イト R : Gr : R : Gr : R : Gr : R 5038848 ( VI ) 8 ( VI ) 8081920 ( V2 ) 1 6 ( V2 ) ダミー行 画素目 行 (c) べイヤー配列の並び・・・ ( b ) の直列データの画像平面展開 : R : Gr 図 2 JPEG 画像メタ・データに格納された Raw データ・フォーマット このフォーマットさえわかれば Raw テータを自在 に扱えるようになる ンシスタ技術 2017 年 2 月号 121

・ Bayer 配列 STEP2 Raw データの構造をみてみる 図 2 ( c ) の Bayer 配列の並びに示すように , Raw デ ータのうち画素の色名がついた部分だけが信号として ・取り出したデータの内部 有効です . 前述したメタ・データがどのようなフォーマットで このフォーマットを参考に , Raw データの処理に 格納されているか解説します . 図 2 に Raw データの 役立ててください . フォーマットを示します . STEP3 イメージ・センサの 図 2 (a) のようにファイル全体の後方がメタ・デー 感度を調べる タになっていて , 32 , 768 バイトのヘッダから始まり , そのあと最後までが Raw データです . ・感度を求めるために必要な係数「変換効率」 こでは , 500 万画素のイメージ・センサ OV5647(OmniVison Raw データが取得できるとカメラ・モジュールに Technologies 社 ) を搭載するカメラ・モジュール VI 組み込まれたイメージ・センサのさまざまな性能を詳 と 800 万画素のイメージ・センサ IMX219 ( ソニー ) を しく解析できます . 感度を調べてみましよう . 搭載する V2 の両方を記載しました . イメージ・センサそのものも感度を表現する基準は いくつか存在します . 近年のスマートフォン用イメー ・画素の配列 ジ・センサなどでは , 緑色の信号を出す画素に注目し 図 2 (b) のように Raw データは 4 画素を 1 つにまとめ て Ce/()x ・ s)] という単位で表される感度基準が標 た 5 バイトが直列に並びます . 5 バイトのうち 1 ~ 4 バ 準です ( e は電子の数を表す慣例的な単位 ). これは , イト目は 4 画素の上位 8 ビット , 残りの 1 バイトには イメージ・センサの撮像面が 1 ⅸになる光を 1 秒間露 下位 2 ビットが 4 画素分入っています . この直列並び 光したとき , 図 2 に示した緑の信号を出す Gr / Gb 画素 の Raw データは , 画像の行単位で区切られ , 画像 1 行 に現れる信号電子の数を表します . の後部はダミー・バイトがあり , Raw データ全体の 感度を測るのに電子の数をとらえるので , 難しいこ 最後にもダミー行が存在します . とのように思われるかもしれません . しかし , 光や電 流の持つショット・ノイズという性質を用いると間接 的ですが , 簡単に電子の数をかなり正確に求めること こでは詳細を省きますが , 画素に発生 ができます . する信号である電子のその数Ⅳに対して , そのショッ ト・ノイズはである性質を利用してディジタル信 号値と電子数を関係づける変換効率が導けます . 変換 効率は 1 画素に発生している信号電子の数を求めるた めの係数です . Raw データから電子の数を知るには , イメージ・ センサが出す Raw データのディジタル値 [DN] * 1 と 電子数 Ce] の関係が分かっていればこと足ります . この関係を変換効率と呼び , 単位は CDN/(e ・ Gain)] です . 加はイメージ・センサ内部の信号増幅率 ( ゲ イン ) を表します . ・変換効率を求める 準備 カメラ・レンズの前に適当な紙を置き , 逆側から適 当な照明器具で照らします ( 写真 1 ). こうすることで 画角全体がほば均一な信号の Raw データが得られま す . 均一でなければならないかというとそうではない こは適当で構いません . ので , スクリプト作成と実行 * 1 DigitalNumber の略 . イメージ・センサの出力は 2 進数の ディジタル値で表されるため単位として DN が用いられる . 10 ピットならば 1024 階調の数値で表される 白い紙 にを当 を イ ラ し変被 を 利数紙 0 Ⅵの白 L-M 、、 > 09 旧め O め一 「 > 09 「 > 09 の よ ュ る 7 MA > 09 モ る均 メ 白 力いろ しと全 真生る像る 写発測画て Pi Camera 122 ンシスタ技術 2017 年 2 月号

リスト 2 変換効率計算用画像キャプチャの python スクリプト 画像が白飛びしない範囲で画像の信号が大から小ま で任意の間隔で変化する 10 通りの JPEG と Raw デー タ・ファイルを 2 枚ずつ SD メモリ・カードに保存する 1 : 5 : $ ) 2 : 5 3 : 5 : $ ) 4 : 5 : $ ) b 土 t and ( raw ( : ′ 5 : 5 : $ ) ′ b 土 t and ( r aw ( : ′ 5 : 5 : $ ) ′ filename jpeg—raw ss' 十 str(j + 1) + ーーー十 str(j + 1) 十 '•jpg for 土 in range ( 2 ) : time. sleep(l) # インターバル camera. shutter—speed = int (ExpSpd) ExpSpd = ( j + 1 ) / Nexp ☆ Rexp ☆ Aut0ExpSpd for j in range (Nexp) : AutoExpSpd = camera. exposure_speed # # # Raw キャプチャ # # # ー OFF' camera. exposure mode camera. shutter speed = Camera. exposure_speed ###AE 解除 ### camera. stop_preview ( ) s1eep(5) camera. start_preview ( ) # # # プレビュによる AE # # # Rexp = 3 # Auto 時の露光時間に対する Raw キャプチャ時の最大露光時間 camera. shutter_speed ′ー [us] つ print い露光時間 - print(' ファイル名 =%s' % filename) # 表示 camera. capture (filename ′ bayer=True) 徹底評価 / Pi Camera の生 800 万画素の画像データの取り出し方と評価 # # # Python)t ッケージ # # # from picamera import PiCamera camera = PiCamera ( ) from time import sleep # # # 初期値 # # # camera. framerate = 10 # フレーム・レード # 主 SO 感度設定 camera. 土S0 = Nexp = 10 # 露光時間の数 リスト 3 オープンソー スの科学計算ソフトウェア SciLab のスクリプト 変換効率を計算する CIear ′ raw=matrix(raw ′ 3264 ′ 1952 ) ー mclose(fdi) raw=mget(6371328,'uc',fdi) ms e e k ( ー 63 7132 8 ′ fdi ′ " end" ) fdi = mopen (fnamei, ー rb') jpeg—raw—ss" + string(i) 十一 for j raw2 = z e ro s ( 1 9 4 4 ′ 2 5 92 ′ 2 ) for 土 = 1 : 10 stacksize(). 5e8) raw = raw ( 1 : 19 4 4 ′ 1 : 32 4 の ー + string(j) 十 " ・ jpg" 1 : 4 : $ ′ r a w 2 ( : repmat(bin2dec("00000011" 2 : 4 : $ ′ r a w 2 ( : repmat ()i n2 de c ( " 0 01100 " ) ′ 19 4 4 ′ 64 8 ) ) / 4 ー 3 : 4 : $ ′ r a w 2 ( : repmat(bin2dec("00110000" 4 : 4 : $ ′ r a w 2 ( : repmat(bin2dec("11000000") ′ 1944 ′ 648 ) ) / 64 ー end sig(i) =mean( raw2(: var ( 土 ) = variance ( raw2 ( : end r a W ( ・ ′ 19 4 4 ′ 6 4 8 ) ) / 1 6 ー r a W ( ・ て a W ( ・ ′ 1 9 4 4 ′ 6 4 8 ) ) / 1 ー r a W ( ・ ☆ 4 ☆ 4 ☆ 4 十 十 b 土 t a n d ( r a w b 土 t a n d ( r a w ′ 1 ) + raw2 ( : ′ 2 ) ) / 2 ー〃信号平均値 ′ 2 ) ) / 2 ー〃分散 1 ) ー raw2 ( : disp(reg1in(sig(1:6) ' , var(1:6) ' ) ) ー〃変換効率の計算結果表示 ( 6 ポイント使用 ) = 用意ができたら , リスト 2 に示すような Python ス クリプトを実行します . これは , 画像が白飛びしない 範囲で , 画像の信号が大から小まで適当な間隔で変化 する 10 通りの JPEG と Raw データ・ファイルを 2 枚ず っ SD メモリ・カードに保存する制御です . この例は , カメラ・モジュール VI を使う場合のパラメータ設定 になっています . 計算実行 * 2 キャプチャされる JPEG 画像はアナログ・ゲイン (camera. analog—gain) とディジタル・ゲイン (camera. digital—gain) が有効 である . Raw データは ISO 感度がゲインの代わりになっている ンタ技術 2017 年 2 月号 出来上がった Raw データ付き JPEG ファイルを使っ て , 変換効率の計算を実行します . 前述した Python スクリプトのキャプチャ文によるデータの送り先をフ ァイルではなくストリームにすれば続けて変換効率計 算の処理ができます . ここではコードがかさむので , オ ープンソースの科学計算ソフト SciIab で計算しました . JPEG メタ・データとして格納されている Raw デー タを切り出し , 図 2 に示したフォーマットに従って R, Gr, Gb, B の色別に信号の平均値とノイズの分散を 信号レベルの違う 10 通りについて求めます . 式で表 すなら変換効率 4 CDN/(e ・ Gain)] は , 信号の平均 123