mikeo_410


colorspaceパッケージのRGB

1.R,G,Bの値

  colorspaceパッケージでは、RGB()と大文字が使われています。各値は、[0..1]です。
  R言語の標準のrgbは、小文字で書かれ、各値は、これもデフォルトは[0..1]です。
  しかし、両者には違いがあります。

  1. > # 標準のrgb
  2. > rgb(32,64,96,maxColorValue=255)
  3. [1] "#204060"
  4. > rgb(32/255,64/255,96/255)
  5. [1] "#204060"
  6. > # colorspaceパッケージのRGB
  7. > RGB(32/255,64/255,96/255)
  8.              R         G         B
  9. [1,] 0.1254902 0.2509804 0.3764706
  10. > hex(RGB(32/255,64/255,96/255))
  11. [1] "#5B819F"

  rgb()の世界では、[0..1] は、単に 255 で割って、正規化しています。
  RGB()は、どうなっているか見ます。
  まず、RGB()で、通常の[0..255]のRGBの値をどう扱うのか示します。 

  1. > # (32,64,96)に相当する16進文字のcolorを得ます
  2. > rgb(32,64,96,maxColorValue=255)
  3. [1] "#204060"
  4. > # その値をcolorspaceのRGBにします
  5. > hex2RGB("#204060")
  6.               R          G         B
  7. [1,] 0.02056092 0.06567053 0.1398741
  8. > # そのRGBを16進文字に戻します
  9. > hex(hex2RGB("#204060"))
  10. [1] "#204060"

  R の標準のcolorである16進文字を介せば変換・復元することが分かります。

  以下のような演算で、[0..255] の RGBを [0..1] に変換しています。 

  1. n255 <- function(t) 
  2. { 
  3.   t <- t/255
  4.   if(t > 0.03928) d <- ((t + 0.055) / 1.055)^2.2 
  5.   else d <- t / 12.92 
  6.   return(d) 
  7. }

  実行してみます。colorspaceのRGBの各値と一致します。

  1. > hex2RGB("#204060")
  2.               R          G         B
  3. [1,] 0.02056092 0.06567053 0.1398741
  4. > n255(32) # R
  5. [1] 0.02056092
  6. > n255(64) # G
  7. [1] 0.06567053
  8. > n255(96) # B
  9. [1] 0.1398741

  この変換は、与えられる値が2.2のガンマ補正された値だと言う考えに依るのだと思います。

  16進文字列に変換しないで、RGBの各値を使う場合は、逆の変換が必要になります。 

  1. > r255 <- function(u)
  2. + {
  3. +     if (u > 0.00304) d <- 1.055 * (u^(1 / 2.2)) - 0.055
  4. +     else d <- 12.92 * u;
  5. +     return(round(d*256))
  6. + }
  7. > 
  8. > r <- hex2RGB("#204060")
  9. > r255(r©coords[1])
  10. [1] 32
  11. > r255(r©coords[2])
  12. [1] 64
  13. > r255(r©coords[3])
  14. [1] 96

※ colorspaceのRGBは、計算上算出される値を返すので、[0..1] の範囲以外の値を返すことがあります。

 

 

 


千葉市 不動産 包丁 横浜 不動産 保険 見直し 足立区 不動産