乱数よりも偏りが無くバラバラの数列(乱数では無い)=ブルーノイズの超高速生成と利用法

ブルーノイズ最新トピック

勝田敏彦「でたらめの科学」朝日新書
の第3章「でたらめの未来」で埼玉大学の内田淳史教授の研究が紹介されている。
ブルーノイズに言及しているわけではないが、これまでの数と次の数にある程度関係のある、相関のある乱数(この時点で乱数と呼べるかどうかわからないが)を使った応用として、通信や交通の混雑回避のため 代替ルートを探すのに、乱数を使うよりも、相関のある数列(ブルーノイズもその一種)を使った応用が考えられるという言及がある。
一部拡大したホワイトノイズとブルーノイズ
ホワイトノイズ ブルーノイズ
ホワイトノイズ ブルーノイズ
上図を見ると、乱数では混雑回避のための経路が元の経路に近いものになる可能性があるが、ブルーノイズでは混雑回避の経路は元の経路とはかけ離れていることが保証されていることが分かる。
また、敵対的生成ネットワーク(GAN)という画像生成AIのアルゴリズムで、乱数を使うよりも、相関のある数列を使う方が画像の生成効率が上がるという現象も確認されている。
ディザリングで乱数であるホワイトノイズを使うよりも、ブルーノイズを使う方がはるかに良い画像が得られる現象と何らかの関係があるのかも知れない。
オリジナル画像 組織的ディザリング(ホワイトノイズ利用) 組織的ディザリング(ブルーノイズ利用 2階調)
オリジナル画像 組織的ディザリング(ホワイトノイズ利用) 組織的ディザリング(ブルーノイズ利用)
上に戻る

乱数よりも偏りなくバラバラの数列

当社で開発した巨大ブルーノイズ高速生成プログラムについて解説します。
ブルーノイズは乱数を膨大な計算をかけて加工することで得られる数列のことです。人間の感覚的に最も「偏りなくバラバラ」な数列
乱数よりもブルーノイズの方が人間の感覚・心理にとって「偏りなくバラバラ」である。
ホワイトノイズとブルーノイズ
何か見えるようなホワイトノイズ 何も見えないブルーノイズ
ホワイトノイズ(rand()関数) ブルーノイズ(bluenoise()関数)

一部拡大したホワイトノイズとブルーノイズ
ホワイトノイズ ブルーノイズ
ホワイトノイズ(rand()関数) ブルーノイズ(bluenoise()関数)
乱数は、前後の数値から独立しており、例えば「当たり」の確率が0.1とすると、「当たり」が3連続した後でもつぎも「当たり」になる確率は0.1となる。
前後の当たりからは独立しているので、当たりの確率が0.1でも、はずれが10回以上続いても不思議はない。
それで上のように偏った分布となる。
ブルーノイズは、乱数を元に偏りが亡くなるまで加工した数列で、「当たり」は十回に一回、「当たり」2連続は百回に1回、3連続は0.001、4連続は0.0001というように確率を偏りなくコントロールすることができる。
はずれが10回以上続かないようにコントロールすることも自在にできる。
出現確率の恣意的なコントロールを、人間にとって乱数よりも「偏りなくバラバラ」に感じるように成し遂げることができる数列がブルーノイズである。

  1. ブルーノイズとは何か
  2. 乱数では無いが人間の感覚から見て乱数よりも「偏りなくバラバラ」な数列...
  3. ブルーノイズは何に使われているか
  4. 今まではディザリングの高速化・高品質化のために...
  5. ブルーノイズの高速生成アルゴリズム
  6. 普通に使われているアルゴリズムの10~1000倍以上の高速化...
  7. 今後ブルーノイズを何に使うことができるか
  8. ゲームのキャラクター配置、ガチャ、深層学習のパラメータの初期値...
上に戻る

ブルーノイズとは何か

ブルーノイズは乱数ではない。乱数を元に膨大な演算を使って生成した「偏りなくバラバラ」の数の列である。
乱数はある程度リアルタイムに生成することができるが、計算量の問題でブルーノイズをリアルタイムに生成することはできない
あらかじめブルーノイズマトリクスという、M×Nの数値マトリクスを計算して用意しておくことが必要となる。
いつも同じブルーノイズを使うのかという疑問も生じるが、そのような心配はいらない。
ブルーノイズの一部を取り出したものもブルーノイズであり、ブルーノイズを複数接続したものもブルーノイズとなる。そのため、乱数のsrand(seed)のような仕組みも、極めて簡単に実現することができる。
当社では、4096×4096、8192×8192、16384×16384というマトリクスの生成プログラムの提供。あるいはマトリクス自体の提供が可能である。

ホワイトノイズの画像とブルーノイズの画像
左のホワイトノイズの画像は、コンピュータの擬似乱数を使って発生させたものである。テレビの砂嵐画面がホワイトノイズとなっている。
ホワイトノイズ ブルーノイズ
ホワイトノイズ
rand関数で生成した乱数系列を表示。人間の感覚的に偏っていてバラバラには見えない
ブルーノイズ
ホワイトノイズを加工することで得られるブルーノイズ。人間の感覚的にバラバラに、偏りもなく見える

人間の目には点の分布が偏って、模様のようなものが見える。人によっては、髪の長い女のお化けのように見えるらしい。
何か見えるようなホワイトノイズ 何も見えないブルーノイズ
何か見えるようなホワイトノイズ 何も見えないブルーノイズ

ブルーノイズの画面では、同じ砂の密度でも模様のようなものは全く見えない。
上に戻る

何に使われてきたか

グレイスケール画像を白黒の2色のインクで印刷する。カラー画像をCYMKそれぞれ4階調のインクで印刷する。といった印刷分野でディザリングという技術が使われている。
高品質なディザリング手法として誤差拡散法がある。誤差拡散法は、ある画素とディザリング出力との誤差を、次に出力する画素で調整してトータルの誤差を小さくしていく手法である。
高品質だが、計算量が大きくアルゴリズムも複雑で回路化するのが大変である。

誤差拡散法に対して、組織的ディザリングという手法がある。ある画素と乱数配列の対応する1要素の大小比較によって出力するかどうかを決める手法で、計算量が小さく回路化するのも簡単である。
しかし、ホワイトノイズを組織的ディザリングに使った場合は、誤差拡散法よりも低品質の出力しか得られない。
オリジナル画像 誤差拡散法 組織的ディザリング(ホワイトノイズ利用)
オリジナル画像 誤差拡散法 組織的ディザリング(ホワイトノイズ利用)
rand関数(擬似乱数)を使っている。人間の感覚的には汚い画像に見える。

ブルーノイズマトリクスを使うと高速、単純、高品質な組織的ディザリングシステムを構成することができる。
一つの画素に対して、ブルーノイズ配列の一つの要素を参照して大小比較するだけで出力値を得ることができる。
オリジナル画像 誤差拡散法(2階調) 組織的ディザリング(ブルーノイズ利用 2階調) 組織的ディザリング(ブルーノイズ利用 4階調)
オリジナル画像 誤差拡散法(2階調) 組織的ディザリング(ブルーノイズ利用 2階調) 組織的ディザリング(ブルーノイズ利用 4階調)
オリジナル画像 誤差拡散法(4階調) 組織的ディザリング(ブルーノイズ利用 4階調)
オリジナル画像 誤差拡散法(4階調) 組織的ディザリング(ブルーノイズ利用 4階調)

誤差拡散法とブルーノイズ法の比較

誤差拡散法は、シャープな画像が得られますがグラデーション部分がベッタリします。
ブルーノイズ法は、誤差拡散法と比べてわずかにノイズが乗った感じになります。グラデーション部分にもノイズが乗るためスムーズになります。
誤差拡散法の画像のベッタリした部分を改善するために、誤差の配分にランダムノイズを掛け合わせる処理が行なわれますが、結果的にブルーノイズ法と同じような画像が得られます。
処理時間は、アルゴリズムの単純なブルーノイズ法の圧勝です。
ブルーノイズ法のためのしきい値行列を高速(256×256の行列で1分)に作るプログラムが同時提供されるのでカスタマイズも可能です。

弊社のプログラムで生成したブルーノイズは、超大型のプリンターのファームウェアに利用されている。

ディザリング以外には、音声の雑音処理にも使われることがある。

ブルーノイズには以下のような性質がある。

  1. ブルーノイズの一部はブルーノイズである。
  2. ブルーノイズマトリクスをつなぎ合わせたものもブルーノイズマトリクスである。
  3. 右端と左端、上端と下端をつなぎ合わせても、密度の小さいところや大きいところは発生しない
    上の二つの性質によって、一つのブルーノイズを用意しておけば、乱数のseedのように毎回異なるブルーノイズ系列を生成することが極めて簡単にできる。
    ブルーノイズ配列(行列)へのアクセスの始点を0から変えても、完全なブルーノイズ系列が得られる。ブルーノイズ系列の終点から始点に戻ってもブルーノイズ系列の完全性は保たれる
    つまり、剰余計算を使ってアクセスするだけでseedと同じ機能が実現できるのである。
    ブルーノイズの規模が16384×16384と大きければ、seedを繰り返しても同じブルーノイズ系列が出現する確率は2億7千万分の1に過ぎない

  4. とはいえ、ブルーノイズマトリクスは、できるだけ大きい方が、品質が良くなる。
  5. 画面の大きさが4096×2048の時に32×32の同じブルーノイズを並べると。やはり同じパターンが並んでいることがばれてしまう。
    8x8のブルーノイズ 256x256のブルーノイズ
    8x8のブルーノイズ 256x256のブルーノイズ
    画面の大きさが4096×2048ならば、4096×2048のブルーノイズを使うことが理想的である。
上に戻る

超高速生成アルゴリズム

従来のアルゴリズムはvoid-and-clusterアルゴリズムが使われている。
n×mピクセルのホワイトノイズから出発して、最も密度の高い領域から1ピクセルを取り出し、最も密度の低い領域へ移動するという処理を、動かせるピクセルが無くなるまで繰り返す。

出発はホワイトノイズ 最も密度の高いピクセル 最も密度の低いピクセル 移動 移動の結果
出発点のホワイトノイズ 最も密度の高いピクセルが赤 最も密度の高いピクセルが青 移動 移動した結果

収束するまでは膨大な計算が必要となり、8192×8192ピクセルとなると計算に一ヶ月、それ以上のサイズだと数ヶ月から年単位の時間がかかる。
1ピクセル移動するごとに粗密の状況が変わるため並列に計算するわけにもいかない。
当社の開発した高速ブルーノイズ生成アルゴリズムは、従来の10倍(256×256)から1000倍(16384×16384)以上の速度でマトリクスを作成する。速度向上比率は マトリクスサイズが大きくなるほど顕著になる。
高速アルゴリズムは大きなメモリを必要とする。作成可能な最大マトリクスサイズは、
  1. グレイスケール(1プレーン)の場合、6Gバイトメモリのマシンで8192×8192程度。
  2. グレイスケール(1プレーン)の場合、16Gバイトメモリのマシンで16384×16384程度。
  3. 4プレーン(CYMK)の場合、8Gバイトメモリのマシンで8192×8192程度。
  4. 3プレーン(RGB)の場合、24Gバイトメモリのマシンで16384×16384程度。
1プレーン(グレイスケール用)の4096×4096ピクセルまでは32bit版で生成することができるが、それを超えるサイズや2プレーン以上の生成が必要となる場合は64bit版を使わなければならない。
処理速度は
  1. 256×256のブルーノイズの生成で10秒。
  2. 512×512のブルーノイズの生成で40秒。
  3. 1024×1024のブルーノイズの生成で160秒。
  4. 4096×4096のブルーノイズの生成で2560秒。
上に戻る

何に使うことができるか

  1. ゲームのミドルウェア開発会社での利用
  2. ゲームのミドルウェアとは携帯やゲーム専用機の開発のためのライブラリや開発サポートツールのことである。
    詳細は不明だが、ゲームのキャラクターの配置や大当たり(ガチャ)の発生頻度のコントロールなどが対象となっていると思われる。
    乱数よりも「人間の感覚にとって偏りなくバラバラ」な現象を引き起こすために利用されている。
    単にしきい値を複数設けるだけで、大当たりの連続という現象の発生確率も簡単にコントロールすることができる。
    例えば11回に1回は大当たり、44回に一回は大当たりが連続、176回に一回は大当たりが3連続という確率現象がブルーノイズで「感覚的に見えバラバラに」発生する。当然はずれが10回以上連続することは無い。
    キャラクターの配置も、偏らないようにする、逆に偏るようにするといったコントロールが、しきい値との比較だけでできる。

  3. 深層学習のパラメータの初期値にブルーノイズを使うことで
  4. に効果があることを検証しているところである。
上に戻る

クラスライブラリ・動的リンクライブラリリファレンス

  1. クラスライブラリリファレンス
  2. 動的リンクライブラリリファレンス
上に戻る