「プラナー方式」の版間の差分
(→欠点) |
(→利点) |
||
(3人の利用者による、間の7版が非表示) | |||
1行目: | 1行目: | ||
− | ''' | + | '''プラナー'''([[英語]]:Planar)とは、[[コンピューターグラフィックス]]における二次元画像の表現方式のひとつである。 |
==概要== | ==概要== | ||
− | + | プラナーはある画像を表現する際に[[色空間]]の色成分ごとに分離した状態で保持している形式のことをいう。 | |
− | たとえば[[RGB]]であれば以下のように分離された形式で[[データ]] | + | たとえば[[RGB]]であれば以下のように分離された形式で[[データ]]が保持されているものをプラナー方式という。 |
*RRRRRRRRRRRRRRRR〜 | *RRRRRRRRRRRRRRRR〜 | ||
*GGGGGGGGGGGGGGG〜 | *GGGGGGGGGGGGGGG〜 | ||
*BBBBBBBBBBBBBBBB〜 | *BBBBBBBBBBBBBBBB〜 | ||
[[Photoshop]]などでいえば[[原色]]ごとに[[レイヤー]]があるような感じである。 | [[Photoshop]]などでいえば[[原色]]ごとに[[レイヤー]]があるような感じである。 | ||
− | |||
逆に分離されていないものを[[パックドピクセル]]方式という。 | 逆に分離されていないものを[[パックドピクセル]]方式という。 | ||
15行目: | 14行目: | ||
==利点== | ==利点== | ||
− | + | プラナーは色ごとに処理したい[[アルゴリズム]]において扱いやすい形式であるとされる。 | |
これには画像圧縮や画像認識などの多くが該当する。 | これには画像圧縮や画像認識などの多くが該当する。 | ||
− | 有名なところでは[[JPEG]] | + | 有名なところでは[[JPEG]]や[[JPEG2000]]といった画像圧縮アルゴリズムの多くが内部処理においてプラナー形式を採用している。たとえばJPEGの内部では、赤色を圧縮する、緑色を圧縮する、青色を圧縮するという感じで色ごとに処理するようになっている。また[[OpenCV]]も内部的にはプラナー方式を採用している(OpenCVが依存している[[Intel Image Processing Library]]がプラナー形式を採用している)。 |
− | + | ||
+ | [[Kinect for Windows v1]]の[[SDK]]もベータ版のころはプラナー方式を採用していたが、正式版では[[プログラマー]]が扱いやすいよう配慮したのか[[パックドピクセル]]に変更になっていた。 | ||
==欠点== | ==欠点== | ||
− | 一方で[[ピクセル]] | + | 一方で[[ピクセル]]単位で処理したい場合には、たとえばRGBのプラナー方式だと1[[ピクセル]]を得るのに3カ所もの[[データ]]にアクセスして、さらに合成した値を使用せねばならず、非常に効率が悪い。 |
<source lang="csharp"> | <source lang="csharp"> | ||
// プレーナーは面倒 | // プレーナーは面倒 | ||
31行目: | 31行目: | ||
| B[x,y] | | B[x,y] | ||
} | } | ||
− | + | </source> | |
+ | <source lang="csharp"> | ||
// パックドピクセルなら簡単 | // パックドピクセルなら簡単 | ||
Pixel GetPixel(x, y) | Pixel GetPixel(x, y) | ||
44行目: | 45行目: | ||
==主な採用事例== | ==主な採用事例== | ||
===PC-9801シリーズ=== | ===PC-9801シリーズ=== | ||
− | [[PC-9801シリーズ]]の[[GRAM]](今でいう[[VRAM]] | + | [[PC-9801シリーズ]]の[[GRAM]](今でいう[[VRAM]])はプラナー形式が採用されており、合成処理は[[ハードウェア]]内部で自動的に行われていた。 |
− | + | しかも[[RGB]]各色1[[ビット]]と濃淡1[[ビット]]という[[バイト]]単位ではなく[[ビット]]単位という鬼のように面倒な代物であった。 | |
− | + | プラナー形式で[[疑似スプライト]]を実現しようとするとアホみたいに面倒な処理が必要であり、[[ゲーム]]などには不向きであったため、多くの[[プログラマー]]は手軽に[[パックドピクセル]]形式で扱えるようにする[[ライブラリ]]を作っていた。 | |
==関連項目== | ==関連項目== |
2015年7月21日 (火) 06:26時点における最新版
プラナー(英語:Planar)とは、コンピューターグラフィックスにおける二次元画像の表現方式のひとつである。
概要[編集 | ソースを編集]
プラナーはある画像を表現する際に色空間の色成分ごとに分離した状態で保持している形式のことをいう。
たとえばRGBであれば以下のように分離された形式でデータが保持されているものをプラナー方式という。
- RRRRRRRRRRRRRRRR〜
- GGGGGGGGGGGGGGG〜
- BBBBBBBBBBBBBBBB〜
Photoshopなどでいえば原色ごとにレイヤーがあるような感じである。
逆に分離されていないものをパックドピクセル方式という。
- RGBRGBRGBRGBRGB〜
利点[編集 | ソースを編集]
プラナーは色ごとに処理したいアルゴリズムにおいて扱いやすい形式であるとされる。 これには画像圧縮や画像認識などの多くが該当する。
有名なところではJPEGやJPEG2000といった画像圧縮アルゴリズムの多くが内部処理においてプラナー形式を採用している。たとえばJPEGの内部では、赤色を圧縮する、緑色を圧縮する、青色を圧縮するという感じで色ごとに処理するようになっている。またOpenCVも内部的にはプラナー方式を採用している(OpenCVが依存しているIntel Image Processing Libraryがプラナー形式を採用している)。
Kinect for Windows v1のSDKもベータ版のころはプラナー方式を採用していたが、正式版ではプログラマーが扱いやすいよう配慮したのかパックドピクセルに変更になっていた。
欠点[編集 | ソースを編集]
一方でピクセル単位で処理したい場合には、たとえばRGBのプラナー方式だと1ピクセルを得るのに3カ所ものデータにアクセスして、さらに合成した値を使用せねばならず、非常に効率が悪い。
// プレーナーは面倒
Pixel GetPixel(x, y)
{
return R[x,y] << 16
| G[x,y] << 8
| B[x,y]
}
// パックドピクセルなら簡単
Pixel GetPixel(x, y)
{
return RGB[x,y];
}
最近の多くのプラットフォームではディスプレイへの表示はパックドピクセル方式が一般的である。 DirectXやOpenGLなどを駆使したコンピューターグラフィックスを表示することに主眼をおいているひとたちにはパックドピクセルが一般的である。
主な採用事例[編集 | ソースを編集]
PC-9801シリーズ[編集 | ソースを編集]
PC-9801シリーズのGRAM(今でいうVRAM)はプラナー形式が採用されており、合成処理はハードウェア内部で自動的に行われていた。 しかもRGB各色1ビットと濃淡1ビットというバイト単位ではなくビット単位という鬼のように面倒な代物であった。
プラナー形式で疑似スプライトを実現しようとするとアホみたいに面倒な処理が必要であり、ゲームなどには不向きであったため、多くのプログラマーは手軽にパックドピクセル形式で扱えるようにするライブラリを作っていた。