グレイスケール変換

ソースは、ここにあげたけど。

デモはこちら(サンプル画像はないので各自用意)

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自体を保管していないので、今から調べようもない。

#rust #WebAssembly #プログラミング #画像処理

この記事が気に入ったらサポートをしてみませんか?