「プラナー方式」の版間の差分
imported>Mono Book 編集の要約なし |
Administrator (トーク | 投稿記録) 編集の要約なし |
||
| (3人の利用者による、間の3版が非表示) | |||
| 1行目: | 1行目: | ||
'''プラナー''([[英語]]:Planar)とは、[[コンピューターグラフィックス]]における二次元画像の表現方式のひとつである。 | '''プラナー'''([[英語]]:Planar)とは、[[コンピューターグラフィックス]]における二次元画像の表現方式のひとつである。 | ||
==概要== | ==概要== | ||
プラナーはある画像を表現する際に[[色空間]]の色成分ごとに分離した状態で保持している形式のことをいう。 | |||
たとえば[[RGB]]であれば以下のように分離された形式で[[データ]]が保持されているものをプラナー方式という。 | たとえば[[RGB]]であれば以下のように分離された形式で[[データ]]が保持されているものをプラナー方式という。 | ||
| 9行目: | 9行目: | ||
*BBBBBBBBBBBBBBBB〜 | *BBBBBBBBBBBBBBBB〜 | ||
[[Photoshop]]などでいえば[[原色]]ごとに[[レイヤー]]があるような感じである。 | [[Photoshop]]などでいえば[[原色]]ごとに[[レイヤー]]があるような感じである。 | ||
逆に分離されていないものを[[パックドピクセル]]方式という。 | 逆に分離されていないものを[[パックドピクセル]]方式という。 | ||
| 18行目: | 17行目: | ||
これには画像圧縮や画像認識などの多くが該当する。 | これには画像圧縮や画像認識などの多くが該当する。 | ||
有名なところでは[[JPEG]] | 有名なところでは[[JPEG]]や[[JPEG2000]]といった画像圧縮アルゴリズムの多くが内部処理においてプラナー形式を採用している。たとえばJPEGの内部では、赤色を圧縮する、緑色を圧縮する、青色を圧縮するという感じで色ごとに処理するようになっている。また[[OpenCV]]も内部的にはプラナー方式を採用している(OpenCVが依存している[[Intel Image Processing Library]]がプラナー形式を採用している)。 | ||
[[ | [[Kinect for Windows v1]]の[[SDK]]もベータ版のころはプラナー方式を採用していたが、正式版では[[プログラマー]]が扱いやすいよう配慮したのか[[パックドピクセル]]に変更になっていた。 | ||
[[ | |||
==欠点== | ==欠点== | ||
| 57行目: | 53行目: | ||
*[[パックドピクセル]] | *[[パックドピクセル]] | ||
[[category: コンピューター・グラフィックス]] | |||
2025年9月5日 (金) 08:06時点における最新版
プラナー(英語: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ビットというバイト単位ではなくビット単位という鬼のように面倒な代物であった。
プラナー形式で疑似スプライトを実現しようとするとアホみたいに面倒な処理が必要であり、ゲームなどには不向きであったため、多くのプログラマーは手軽にパックドピクセル形式で扱えるようにするライブラリを作っていた。