「グレースケール変換」の版間の差分

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

2019年9月24日 (火) 08:32時点における最新版

グレースケール変換とは、カラー画像をクレースケール画像に変換する処理をいう。

一般的にグレースケールは「輝度を一定の数値範囲に丸め込んだもの」なので、「輝度」を求める計算式とほぼ同じである。

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)」の数字が特出して大きい。ならば「細かいことを考えずRGBの緑色だけ抽出すればよくね?」「赤と青を緑に置き換えれば灰色じゃん」という手法もある。

float gray = color.green;
float3 gray = float3(color.green, color.green, color.green); 

この手法は動画に対してリアルタイムで遅延なく超高速でアンチエイリアシングを掛ける「FXAA」で使われている。浮動小数点演算を伴わないどころか変数のコピーしか発生しないので超高速で処理できる。「正確さ」よりも「速さ」が重要な場合はこれでいいのだ。

関連項目[編集 | ソースを編集]