ブルーノイズ生成ライブラリ
digital halftoningに使われていたブルーノイズが、画像処理以外の分野に応用できることが分かり再注目されている。
乱数に由来するホワイトノイズとブルーノイズを比較した画像を下に示す。
規則的なノイズが見られる場合、ブラウザの表示倍率を100%にリセットしてからご覧ください。
| 同じ値のしきい値を用いたときのホワイトノイズとブルーノイズのGIFアニメ | |
|---|---|
![]() |
![]() |
| ホワイトノイズ | ブルーノイズ |
| ホワイトノイズ | ブルーノイズ | |
|---|---|---|
| 乱数かどうか | 乱数 | 乱数を加工したもの(乱数では無い) |
| 例えば30000回発生したときに 数値の重複があるかどうか | 重複がある | 重複が無い |
| 長方形内の値の平均値 | 異なっている | ほぼ一定 |
| 視覚的性質 | 偏った分布 | 均一な分布 |
当社のライブラリは2次元ブルーノイズに対応しており以下の分野に応用されている(クリック)
- digital halftoning 配列を参照するだけという単純かつ高速な計算で、誤差拡散法と同等の品質のhalftoningを達成することができる。
- ナビゲーションシステムや通信ネットワーク経路探索 渋滞を起こした経路の代わりの迂回経路を、元の経路の渋滞が影響しない経路から高速に探索することができる。
- 画像生成AIの高速化、高品質化 パラメータの初期値に相関のある乱数を使うことで、GAN(敵対的生成ネットワーク)による画像の生成効率がアップする。ブルーノイズも相関のある乱数の一種である(相関がある時点で数学的な乱数では無い)
- ゲームキャラクターの配置やガチャの確率操作 ゲームキャラクターの2次元マップ上への配置を任意に操作することができる。
多くのプリンターでは、3~8色程度の色でフルカラーを表現したり、一色の黒インクでグレイスケールを表現したりする。
プリンタドライバには、誤差拡散法と同等の品質で回路がはるかに単純で済むブルーノイズが利用されている。
くじやガチャの当選確率を任意に操作することができる。
ライブラリのソースコードは、GitHubでMITライセンスのオープンソースとして公開されている。
ソースコード入手(無償)はここ(https://github.com/TakanobuSaito/huge-bluenoise-generator)から。
特長
(1) 性能
ライブラリは、2次元のマトリクスとしてブルーノイズを生成する。
乱数とは異なり生成した値には重複は無い。
マトリクス内の任意の長方形内の値の平均値は、どこをとっても大差が無いという特徴がある。
元のアルゴリズムであるvoid-and-cluster法では、1024×1024のマトリクス生成でも数日かかっていたが、このライブラリでは一般的なノートPCでも52秒で生成する。
| マトリクスサイズ | ブルーノイズの値の範囲 | ファイルサイズ | 生成に必要なメモリ | 生成速度(一般的なビジネス用のノートPC) |
|---|---|---|---|---|
| 256×256 | 0~0x0000ffff(0~ 65,535) | 256キロバイト | 8Mバイト程度 | 1.0秒 |
| 512×512 | 0~0x0003ffff(0~ 262,143) | 1メガバイト | 32Mバイト程度 | 5.8秒 |
| 1024×1024 | 0~0x000fffff(0~ 1,048,575 | 4メガバイト | 128Mバイト程度 | 52.2秒 |
| 2048×2048 | 0~0x003fffff(0~ 4,194,303) 大抵の画像には十分 | 16メガバイト | 512Mバイト程度 | 388.5秒 |
| 4096×4096 | 0~0x00ffffff(0~ 16,777,215) 通常のプリンターのインクジェット制御に十分 | 64メガバイト | 2Gバイト弱(32bitビルドしたライブラリでの限界) | 2315.6秒 |
| 8192×8192 | 0~0x03ffffff(0~ 67,108,863) 超大型プリンターのhalftoningでも十分 | 256メガバイト | 8Gバイト弱 | 13425.4秒 |
| 16384×16384 | 0~0x0fffffff(0~268,435,455) 用途が思いつかないくらい大きい | 1024メガバイト(1ギガバイト) | 32Gバイト弱(測定用ノートPCでの限界) | 24時間以内 |
(2) ディザリングへの適用
ブルーノイズは元々ディザリングに使われていた。1色の黒インクでグレイスケールの画像を印刷したり。3~8色のインクでフルカラー画像を印刷する際にdithering=digital halftoningが使われている。
(3) ソースコード
ソースコード入手(無償)はここ(https://github.com/TakanobuSaito/huge-bluenoise-generator)から。
ライブラリのソースコードは無償です。
MITライセンスのオープンソースソフトウェアで、商用利用や改変、配布も自由にできます。
全ソースコード付属。内容は以下の通り
- ライブラリのソースコード(C++/C) 依存するライブラリ(OpenCV等)はありません。付属ソースコードだけでライブラリをビルドすることができます
- Pythonのサンプルプログラム 動的リンクライブラリのインポートテストプログラムのコンソール版
Windowsでライブラリのビルドが可能。Windows依存は無いのでLinuxでもスタティックリンクライブラリのリンクはできます(確認はしていません)
動的リンクライブラリの部分はWindows依存ですが、Linuxへの移植もたやすくできます。
動的リンクライブラリのインポートテストプログラムのGUI版
・C++クラスライブラリリファレンスマニュアル
htmlファイルにより提供
・多言語対応の動的リンクライブラリリファレンスマニュアル
htmlファイルにより提供

