mikeo_410


グレースケールへの変換

  実用的には、R,G,Bの単純平均を使うことで問題ないことのようです。
  また、L*a*b* や HSVなどの、輝度、明度を使うことも有効だと思います。

1.出力について 

  モニタに表示することや印刷などの「出力」については、R=G=B がグレーを表すことで間違いないようです。
  次に示す、どのグレースケール化の方法も、結果は R=G=B です。

2.単純平均

     R` <- (R+G+B) / 3
     G` <- (R+G+B) / 3
     B` <- (R+G+B) / 3

3.加重平均(1)

  「色について」「」「10.グレースケール」の例では、次のように演算しています。
   R = G = B = (306・R + 601・G + 116・B) / 1024
  これは、除算をシフトで行うつもりで変形したもので、
   R = G = B = (0.896・R + 1.76・G + 0.34・B) / 3
  と、加重平均を取っています。
  NTSC の輝度信号の算出がこのように生成されると言うことのようです。

4.加重平均(2)

  Wikipedia の「コンポーネント映像信号」には、輝度 Y を求める式として、次の2つの計算式が記されています。

  1. Y = 0.299・R + 0.587・G + 0.114・B
  2. Y = 0.2126・R + 0.7152・G + 0.0722・B

  最初の式は、
  Y = 0.299・R + 0.587・G + 0.114・B ≒ (0.896・R + 1.76・G + 0.34・B) / 3
  で、「加重平均(1)」です。

  2つ目の式は、HDTVでの輝度信号 Y の生成に基づくものと記されていました。
  Y = (0.6378・R + 2.1456・G + 0.2166・B) / 3
  の、加重平均です。

5.比較

  通常は単純平均で特に問題はないように思います。

6.加重平均の副次的な効果

  同じ値をセットして作った原色の帯は、加重平均の場合は形が残ります。

7.各計算方法の傾向

  RGBのRとBを0.5に固定し、Gだけを変化させて図示してみます。ここではRGBの各要素は、0-1 です。

 

  1. R<-0.5
  2. B<-0.5
  3. x<-seq(0,1,by=0.01)
  4. yn<-array(dim=length(x))
  5. y0<-array(dim=length(x))
  6. y1<-array(dim=length(x))
  7. L<-array(dim=length(x))
  8. V<-array(dim=length(x))
  9. i<-1
  10. for(G in x){
  11.   yn[i]<-(R+G+B)/3
  12.   y0[i]<-0.299*R + 0.587*G + 0.114*B
  13.   y1[i]<-0.2126*R + 0.7152*G + 0.0722*B
  14.   c <- hex2RGB(rgb(R,G,B))
  15.   lab<-as(c,"LAB");
  16.   L[i]<-lab©coords[1]/100
  17.   hsv<-as(c,"HSV")
  18.   V[i]<-hsv©coords[3]
  19.   i<-i+1
  20. }
  21. plot(x,yn,type="l",ylim=c(0,1),xlab="G",ylab="明るさ")
  22. lines(x,y0,type="l",col=2)
  23. lines(x,y1,type="l",col=3)
  24. lines(x,L,type="l",col=4)
  25. lines(x,V,type="l",col=5)
  26. title(main="RGB=(0.5,G,0.5)の明るさ")
  27. legend(0,y=1,c("単純平均","NTSC係数","HDTV係数","LabのL","HSVのV"),c(1,2,3,4,5))

 


横浜 不動産 プリウス 朝霞市 不動産 保険相談 不動産 船橋市