YUV420形式の画像ファイルを回転させてみたい 1



OpenCVの超有名画像(^_^;)

一口にYUV形式の画像といっても、

いくつかのパターンが存在する。

画像加工しようにも

メモリ制約が厳しく、OpenCVなどの

便利なライブラリを組み込んで使えない... 

そんな時のために、泥臭く1ピクセルずつコピーしていきながら

回転後の画像データを作成する、なんて処理を考えてみた。

そもそもYUVとは?
画像をあつかう話なので、色の表現の規格なのだろうという想像はできる。

それぞれ、輝度(Y)と、輝度との色差(輝度と青の差:U、輝度と赤の差:V)を意味しており、

特段、何かの略というわけでもないようだ。

白黒テレビからカラーテレビに移り変わっていくあたりから、使われ始めたらしい。

人間の目は色の変化よりも明るさの変化に敏感で、色差成分を減らしても

不自然だと感じにくいという視覚特性を活かして、画像を圧縮するための技術である。

サンプリング度合いによって、 YUVの割合が 4:4:4, 4:2:2, 4:1:1, 4:2:0

などといくつか種類がある。

4:4:4が圧縮なしの高画質で、現在よく使われているのが 4:2:0 なんだとか。

Webで調べても、わかりやすく説明しているサイトには中々めぐり合わない。


さて、今回グルグル回したいのは、YUV420でサンプリングされた画像である。

さらに、あまり難しくならないように、データの持ち方が、Y ⇒ U ⇒ V の順で

都合よく並んでいるタイプのもののみを扱う。

イメージ的には、こうなる。

   YYYY
   YYYY
   UUVV


画像回転の話を少々
なぜか、タブレットで真っ直ぐに向けて撮ったはずの画像が

後で確認すると上下反転しているなんてことはないだろうか。




普通に撮影すると、jpeg画像としてカメラに記録されるが、

実はその時にExif情報という撮影日、撮影機器、解像度などの詳細な

画像情報も一緒に記録している。

ここに画像の回転方向を表すOrientationという情報が含まれている。

分かりにくいのであるが、どうすれば正しい向きになるのかを表す数値である。

Orientation
  1.  そのまま

  2.  上下反転

  3.  180度回転

  4.  左右反転

  5.  上下反転して、さらに時計回りに270度回転

  6.  時計回りに90度回転

  7.  上下反転して、時計回りに90度回転

  8.  時計回りに270度回転

つまり、先の後でビューアでみると上下逆になっているのは、

撮影時の持ち方やブレによって、おそらくジャイロセンサが

その様な向きであると検出しているからなのだろう。


せっかく調べたので、回転させるプログラムの指定パラメータとして利用する。


ところで、肝心のYUV形式の画像をみるためのソフトというのが

なかなか見つからない...

30日のトライアル版であるが、結構使えるのでご紹介

YUVTool に同梱されている YUVplayer

http://www.sunrayimage.com/index.html




サンプル画像を開いてみたところ


この形式の画像を扱いたい

YUV-420-progressive-planar  

<IYUV,  I420>


その次は、好きなjpeg画像を変換するためのツールが必要だ。

これも、なかなか YUV 420 にできるものが見つからない...

Converseen これはフリーで使えるようだ。

http://converseen.fasterland.net/




なぜか Formats指定が

YUV
 - (CCIR 601 4:1:1 or 4:2:2)

なのだが、

これで変換してできた


ファイルを先のYUVplayerで開いてみると...

期待通りになった!!!





これでようやく

確認準備が整ったので

次回は回転させる

プログラムを

試してみたい。