ディザリングアルゴリズム

ZQUANTIZ キーワードではディザリングに関して 'NO_DITHER', 'SUBTRACTIVE_DITHER_1', 'SUBTRACTIVE_DITHER_2' のどれかを指定する。 浮動小数 image に対し引算ディザリングをかけるプロセスは次のとおりである。

-1.0mm

  1. 0.0 から 1.0 の間の単精度乱数(RN)を 10000個生成する。
  2. 1. の乱数列からユニークな乱数系列を生成するための seed として 1 から 10000 の間の整数を 1つ選ぶ。
  3. 整数の seed 値を ZDITHER0 キーワード値として圧縮 image のヘッダーに書き込む。
  4. 浮動小数 image を量子化する前に 2つのオフセットパラメータ $ I_0$, $ I_1$ の初期値を次のように計算する。

    $\displaystyle I_0 = \mathrm{mod}( N_\mathrm{tile} - 1 + \mathtt{\texttt{ZDITHER0}}, 10000)$     (13)
    $\displaystyle I_1 = \mathrm{INT ( RN}(I_0) * 500.)$     (14)

    ここで $ N_\mathrm{tile}$ はタイルを圧縮したバイトを binary table に格納するのに使われる行番号で、RN($ I_0$) は最初のステップで計算された乱数列中の $ I_0^\mathrm{th}$ 番目の乱数値。
  5. 乱数 RN($ I_1$) を使って式(11)で最初のピクセルから量子化していく。 $ I_1$ は順次インクリメントし、上限の 500に達したら $ I_0$ をインクリメントして $ I_1$ を式(14)で再計算する。 $ I_0$ が上限 10000に達したら $ I_0$ を 0 にリセットする。 ピクセル値が IEEE NaN だったら量子化やディザリングせず ZBLANK キーワードの指定値に保存するが一貫性のため $ I_1$ はインクリメントする。
  6. 量子化された整数配列を ZCMPTYPE キーワードで指定されたアルゴリズム(デフォルトは'RICE_1') でロスレス圧縮する。
  7. 圧縮したバイトストリームをタイルに対応する binary table の適切な行の
    COMPRESSED_DATA column に書き込む。
  8. タイルに対し式(11)で使われたスケーリングとオフセットの値を binary table の同じ行の ZSCALE, ZZERO column に書き込む。
  9. ステップ 4 から 8を image の各タイルに対して行う。



Osamu Kanamitsu
2019-02-15