グレイスケール変換
ソースは、ここにあげたけど。
デモはこちら(サンプル画像はないので各自用意)
https://mith-mmk.github.io/wasm/sample2.html
グレイスケール化の係数はいくつかあり、このサンプルで複数を実装した。
const GrayscaleWeights: [(f64,f64,f64);6] = [
(0.299_f64, 0.587_f64, 0.114_f64), //JPEG,BT.601
(0.2126_f64, 0.7152_f64, 0.0722_f64), // BT.709
(0.3333333_f64,0.3333334_f64,0.3333333_f64), // Avarage
(1.0_f64,0.0_f64,0.0_f64), // Red
(0.0_f64,1.0_f64,0.0_f64), // Green
(0.0_f64,0.0_f64,1.0_f64), // Blue
];
BT.601はSDと呼ばれる古いテレビ放送のグレイスケールの係数で、JPEGなどがRGB → YUV変換に用いている数値である。BT.709は、HD放送で使われる数値、2K,4Kなどはこの数値を用いている。基本的に緑の重み付けが高く、青の重み付けが低い。これは人間の目の特性によるものだろう。
人間の視覚は、基本的には3色覚であり、赤、緑、青の三種類の光受容器により色を近くしている。実際の色の波長は赤が一番長く、青ではなく紫が一番短い波長になる。緑は、その中間にあり緑は緑の受容器だけではなく、赤、青の受容器も感受出来てしまうようである。
――何が言いたいと言うと人間は、緑を一番強く知覚するのである。そのため緑の重み付けが大きいようである。
ちなみにここに載っていないパターンにPhotoCD(既に無きKODAC)のグレイスケールの係数があり、かなり面倒な計算をしていた気がする。まぁ昔作ったローダーは、PhotoCDに対応させたものの圧縮には対応させていなかった。圧縮部分の実装が面倒くさい(ソースをみると差分を取って静的ハフマン符号化っぽい)のと当時の画像ローダーだと無圧縮の768x512まで十分だったからのと手元にあったPhotoCDにそこまで巨大な画像が無かった気がする(デバッグが出来ないと)。
しかし、PhotoCDの仕様書をどこで読んだか思い出せない。1994年にKodakのホームページは無かった気がするし……。PhotoCDのCD自体を保管していないので、今から調べようもない。