「グレースケール変換」の版間の差分
ナビゲーションに移動
検索に移動
imported>Administrator |
imported>Administrator |
||
24行目: | 24行目: | ||
G = 0.587 | G = 0.587 | ||
B = 0.114 | B = 0.114 | ||
+ | |||
+ | == 緑色だけ使う方法 == | ||
+ | 前述のRec.709やRec.601の変換方法で使用している輝度値を見ると「緑色(G)」の数字が特出して大きい。ならば「細かいことを考えず緑色だけ抽出すればよくね?」「赤と青を緑に置き換えれば灰色じゃん」という手法もある。 | ||
+ | |||
+ | float gray = color.green; | ||
+ | |||
+ | float3 gray = float3(color.green, color.green, color.green); | ||
+ | |||
+ | この手法は動画に対してリアルタイムで遅延なく超高速でアンチエイリアシングを掛ける「[[FXAA]]」で使われている。浮動小数点演算を伴わないどころか変数のコピーしか発生しないので超高速で処理できる。「正確さ」よりも「速さ」が重要な場合はこれでいいのだ。 | ||
== 関連項目 == | == 関連項目 == |
2019年9月24日 (火) 08:29時点における版
グレースケール変換とは、カラー画像をクレースケール画像に変換する処理をいう。
一般的にグレースケールは「輝度を一定の数値範囲に丸め込んだもの」なので、「輝度」を求める計算式とほぼ同じである。
Rec.709輝度値を使った方法
PCにおけるRGBで表現されるカラー画像をグレースケール画像に変換する方法の中でももっとも手軽だとされている方法がこれ。輝度値がRec. 709に準拠している場合に使用できる。よほど特殊なコンピューターでもない限り準拠している。
グレースケール変換用の輝度値
R = 0.2126 G = 0.7152 B = 0.0722
各ピクセルのRGB値と上記のRec709輝度値のドット積をとるとグレースケールになる。
const float3 luma = float3(0.2126, 0.7152, 0.0722); loop (全ピクセル) { float gray = dot(color.rgb, luma); }
Rec. 601輝度値を使った方法
アナログテレビの時代はちょっと違った。
グレースケール変換用の輝度値
R = 0.299 G = 0.587 B = 0.114
緑色だけ使う方法
前述のRec.709やRec.601の変換方法で使用している輝度値を見ると「緑色(G)」の数字が特出して大きい。ならば「細かいことを考えず緑色だけ抽出すればよくね?」「赤と青を緑に置き換えれば灰色じゃん」という手法もある。
float gray = color.green;
float3 gray = float3(color.green, color.green, color.green);
この手法は動画に対してリアルタイムで遅延なく超高速でアンチエイリアシングを掛ける「FXAA」で使われている。浮動小数点演算を伴わないどころか変数のコピーしか発生しないので超高速で処理できる。「正確さ」よりも「速さ」が重要な場合はこれでいいのだ。