この記事について

「Bayer さんに敬意を表して」

  • 現在販売されているCCDカメラのうち、多くはBayerパターンというものを使っています。
  • 高い業務用のカメラは3CCDと、RGBそれぞれにCCDセンサを持っているのですが、それだと値段が全然違います。
  • そこで考案されたのが、Bayerパターンです。
  • この方法だと、各ピクセルごとに、RGBのそれぞれの色が割り当てられます。格子状に並んでるので、緑を2回使って、格子状に並べます。
  • こんな具合に並べます。
  • この状態の画像をBayer画像、もしくはRAWフォーマットと呼びます。
  • RAW(=生)と呼ばれるのは、センサに一番近い状態の生の情報だからでしょう。(未調査)

Bayerからカラー画像へ

  • このBayer画像、見てみるとこんな感じです。
    bayer.png
  • 拡大してみるとこんな感じです
    BayerEnlarge.png
  • 言葉で表すと「ポツポツと斑点がある感じのグレースケール画像」です。
  • そう。CCD1枚で得られた光の強度を記録した画像なので、グレースケール画像です。
  • OpenCV風に言うと、CV_8UC1です*1
  • しかも、技術者や開発者ならともかく、Bayerの画像をもらって喜ぶユーザはまずいません。なので、これをRGBに変換する必要があります。
  • OpenCVで言えば、cv::cvtColor という関数があります。これの引数の中に、ちゃんと宣言されています。(宣言はimgproc.hpp内)
  1. // Demosaicing
  2. COLOR_BayerBG2BGR = 46,
  3. COLOR_BayerGB2BGR = 47,
  4. COLOR_BayerRG2BGR = 48,
  5. COLOR_BayerGR2BGR = 49,
  6.  
  7. COLOR_BayerBG2RGB = COLOR_BayerRG2BGR,
  8. COLOR_BayerGB2RGB = COLOR_BayerGR2BGR,
  9. COLOR_BayerRG2RGB = COLOR_BayerBG2BGR,
  10. COLOR_BayerGR2RGB = COLOR_BayerGB2BGR,
  11.  
  12. COLOR_BayerBG2GRAY = 86,
  13. COLOR_BayerGB2GRAY = 87,
  14. COLOR_BayerRG2GRAY = 88,
  15. COLOR_BayerGR2GRAY = 89,
  16.  
  17. // Demosaicing using Variable Number of Gradients
  18. COLOR_BayerBG2BGR_VNG = 62,
  19. COLOR_BayerGB2BGR_VNG = 63,
  20. COLOR_BayerRG2BGR_VNG = 64,
  21. COLOR_BayerGR2BGR_VNG = 65,
  22.  
  23. COLOR_BayerBG2RGB_VNG = COLOR_BayerRG2BGR_VNG,
  24. COLOR_BayerGB2RGB_VNG = COLOR_BayerGR2BGR_VNG,
  25. COLOR_BayerRG2RGB_VNG = COLOR_BayerBG2BGR_VNG,
  26. COLOR_BayerGR2RGB_VNG = COLOR_BayerGB2BGR_VNG,
  27.  
  28. // Edge-Aware Demosaicing
  29. COLOR_BayerBG2BGR_EA  = 135,
  30. COLOR_BayerGB2BGR_EA  = 136,
  31. COLOR_BayerRG2BGR_EA  = 137,
  32. COLOR_BayerGR2BGR_EA  = 138,
  33.  
  34. COLOR_BayerBG2RGB_EA  = COLOR_BayerRG2BGR_EA,
  35. COLOR_BayerGB2RGB_EA  = COLOR_BayerGR2BGR_EA,
  36. COLOR_BayerRG2RGB_EA  = COLOR_BayerBG2BGR_EA,
  37. COLOR_BayerGR2RGB_EA  = COLOR_BayerGB2BGR_EA,
  • こいつらを使うことで、BayerパターンをRGBの3レイヤ画像、CV_8UC3に変換してくれます
  • この変換の方法はそれこそ色々あるのですが、一番簡単な方法は、近傍の画素から補完する方法です。 <画像TBW>
  • これでそこそこの性能が出ますし、画質に特化したのでなければこれでとりあえずRGB画像に復元できます。
  • 当然エッジ近辺でモザイク状にノイズが出ますが、最近はセンサの目も細かくなったので、結構気にならないレベルで復元してくれたりします。
  • ちなみにOpenCVの実装では、Edge AwareなBayer補完が実装されています。(詳細は知らん)

RGBからBayerへの逆変換

  • OpenCVの色変換は、大体可逆変換です。
    1. COLOR_BGR2HSV      = 40,
    2. COLOR_HSV2BGR      = 54,
  • こんな感じに、BGR2***←→***2BGRと大体対になって定義されています。
  • しかし、Bayerだけは逆変換が実装されていません。
  • まぁ、上記の理由を考えれば、大体分かりますよね。
  • ただ、Bayer画像は、元のBayerパターンがわかれば、大体Bayer画像に復元できます。
  • ちなみに、Bayerパターンは、以下の 4種類あります。
  • Bayer(RG)
  • Bayer(GB)
  • Bayer(GR)
  • Bayer(BG)
  • 例えば、赤の画素。Bayer(RG)の一番左上の画素は、赤の画素ですが、この座標のR成分は、そのままBayer画像の値を代入していたりします。
  • 同様に、GとBの画素に関しても同じことを繰り返すだけで戻せます。
  • なので、適切なBayerパターンを選んで上げれば、それだけでBayerパターンに戻せます。
  • 実は最初に掲載した画像は、lenaを無理やりBayerパターンに変換したものです。
  • lenaのBayer画像がもし現存してたら、かなりレアだったんでしょうが、よく考えたら当時はまだアナログだったかな?

Bayerさんに敬意を表して

  • さて、このBayerパターンは実はBayerさんが考案されて、そこから名前を取ってます。
  • Bryce E. Bayerさん、1929年8月15日-2012年11月13日。そう。実は昨年の暮れに亡くなられたのです。
  • ご冥福をお祈りすると同時に、Bayerパターンについて何か書かなきゃ!と思って、この記事を書いています。
  • あと、CVAdventCalendarの先陣を切らなきゃ!と思ってこの記事を書いています。
  • そのBayerパターンに関して知ったことがあったので、書いてみました。

最後に

  • 12月1日が動きがなかったのは、ちょっと残念でしたが、Computer Vision Advenct Calendar 2013はここから頑張っていきましょう!

Computer Vision Advent Calendar 2012


*1 ちなみに、真面目な話をすると、RAWフォーマットでは、10bitや12bitなど、もう少し高階調のフォーマットだったりするので、8U=8bitでは収まらなかったりします

添付ファイル: fileBayerEnlarge.png 827件 [詳細] filebayer.png 806件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-12-09 (月) 00:31:28 (2138d)