< ブルーノイズ生成ライブラリ - ArtLogic
ArtLogic - ブルーノイズ生成ライブラリ

ブルーノイズ生成ライブラリ

digital halftoningに使われていたブルーノイズが、画像処理以外の分野に応用できることが分かり再注目されている。
乱数に由来するホワイトノイズとブルーノイズを比較した画像を下に示す。
規則的なノイズが見られる場合、ブラウザの表示倍率を100%にリセットしてからご覧ください。
同じ値のしきい値を用いたときのホワイトノイズとブルーノイズのGIFアニメ
ホワイトノイズ ブルーノイズ
ホワイトノイズ ブルーノイズ
ホワイトノイズとブルーノイズの違いをまとめてみた
      ホワイトノイズブルーノイズ
乱数かどうか乱数乱数を加工したもの(乱数では無い)
例えば30000回発生したときに
数値の重複があるかどうか
重複がある重複が無い
長方形内の値の平均値異なっているほぼ一定
視覚的性質偏った分布均一な分布
乱数(rand関数やrandom関数)を使った、画像、マップ等の2次元的な処理に対して、ブルーノイズを代わりに使うことで新しい効果が得られることがある。

当社のライブラリは2次元ブルーノイズに対応しており以下の分野に応用されている(クリック)
  1. digital halftoning
  2. 配列を参照するだけという単純かつ高速な計算で、誤差拡散法と同等の品質のhalftoningを達成することができる。
    多くのプリンターでは、3~8色程度の色でフルカラーを表現したり、一色の黒インクでグレイスケールを表現したりする。
    プリンタドライバには、誤差拡散法と同等の品質で回路がはるかに単純で済むブルーノイズが利用されている。
  3. ナビゲーションシステムや通信ネットワーク経路探索
  4. 渋滞を起こした経路の代わりの迂回経路を、元の経路の渋滞が影響しない経路から高速に探索することができる。
  5. 画像生成AIの高速化、高品質化
  6. パラメータの初期値に相関のある乱数を使うことで、GAN(敵対的生成ネットワーク)による画像の生成効率がアップする。ブルーノイズも相関のある乱数の一種である(相関がある時点で数学的な乱数では無い)
  7. ゲームキャラクターの配置やガチャの確率操作
  8. ゲームキャラクターの2次元マップ上への配置を任意に操作することができる。
    くじやガチャの当選確率を任意に操作することができる。
巨大なブルーノイズの生成には膨大な計算時間がかかっていたが、当社のライブラリでは高速に巨大なブルーノイズを生成することができる。
ライブラリのソースコードは、GitHubでMITライセンスのオープンソースとして公開されている。
ソースコード入手(無償)はここ(https://github.com/TakanobuSaito/huge-bluenoise-generator)から。

特長

(1) 性能

ライブラリは、2次元のマトリクスとしてブルーノイズを生成する。
乱数とは異なり生成した値には重複は無い。
マトリクス内の任意の長方形内の値の平均値は、どこをとっても大差が無いという特徴がある。
元のアルゴリズムであるvoid-and-cluster法では、1024×1024のマトリクス生成でも数日かかっていたが、このライブラリでは一般的なノートPCでも52秒で生成する。
マトリクスサイズブルーノイズの値の範囲ファイルサイズ生成に必要なメモリ生成速度(一般的なビジネス用のノートPC)
256×2560~0x0000ffff(0~ 65,535)256キロバイト8Mバイト程度1.0秒
512×5120~0x0003ffff(0~ 262,143)1メガバイト32Mバイト程度5.8秒
1024×10240~0x000fffff(0~ 1,048,5754メガバイト128Mバイト程度52.2秒
2048×20480~0x003fffff(0~ 4,194,303)
大抵の画像には十分
16メガバイト512Mバイト程度388.5秒
4096×40960~0x00ffffff(0~ 16,777,215)
通常のプリンターのインクジェット制御に十分
64メガバイト2Gバイト弱(32bitビルドしたライブラリでの限界)2315.6秒
8192×81920~0x03ffffff(0~ 67,108,863)
超大型プリンターのhalftoningでも十分
256メガバイト8Gバイト弱13425.4秒
16384×163840~0x0fffffff(0~268,435,455)
用途が思いつかないくらい大きい
1024メガバイト(1ギガバイト)32Gバイト弱(測定用ノートPCでの限界)24時間以内
ソースコード入手(無償)はここ(https://github.com/TakanobuSaito/huge-bluenoise-generator)から。

(2) ディザリングへの適用

ブルーノイズは元々ディザリングに使われていた。1色の黒インクでグレイスケールの画像を印刷したり。3~8色のインクでフルカラー画像を印刷する際にdithering=digital halftoningが使われている。

元のグレイスケール画像
元のグレイスケール画像
ホワイトノイズによる2階調ハーフトーニング
ホワイトノイズによる2階調ハーフトーニング
ブルーノイズによる2階調ハーフトーニング
ブルーノイズによる2階調ハーフトーニング
誤差拡散法による2階調ハーフトーニング
誤差拡散法による2階調ハーフトーニング
ホワイトノイズによる4階調ハーフトーニング
ホワイトノイズによる4階調ハーフトーニング
ブルーノイズによる4階調ハーフトーニング
ブルーノイズによる4階調ハーフトーニング
元のフルカラー画像
元のフルカラー画像
ブルーノイズによる4階調ハーフトーニング
ブルーノイズによる4階調ハーフトーニング
誤差拡散法による4階調ハーフトーニング
誤差拡散法による4階調ハーフトーニング
ソースコード入手(無償)はここ(https://github.com/TakanobuSaito/huge-bluenoise-generator)から。

(3) ソースコード

ソースコード入手(無償)はここ(https://github.com/TakanobuSaito/huge-bluenoise-generator)から。

ライブラリのソースコードは無償です。
MITライセンスのオープンソースソフトウェアで、商用利用や改変、配布も自由にできます。 全ソースコード付属。内容は以下の通り

  1. ライブラリのソースコード(C++/C)
  2. 依存するライブラリ(OpenCV等)はありません。付属ソースコードだけでライブラリをビルドすることができます
    Windowsでライブラリのビルドが可能。Windows依存は無いのでLinuxでもスタティックリンクライブラリのリンクはできます(確認はしていません)
    動的リンクライブラリの部分はWindows依存ですが、Linuxへの移植もたやすくできます。
  3. Pythonのサンプルプログラム
  4. 動的リンクライブラリのインポートテストプログラムのコンソール版
    動的リンクライブラリのインポートテストプログラムのGUI版

・C++クラスライブラリリファレンスマニュアル

htmlファイルにより提供

・多言語対応の動的リンクライブラリリファレンスマニュアル

htmlファイルにより提供