hirax.net::Keywords::「丸め誤差」のブログ



1998-01-08[n年前へ]

Photohoの乱数プラグインを作成する 

 「2項分布のムラについて考える」の関連して、Photoshopの乱数プラグインを作成したのでメモしておく。

 PhotShopはとても便利なソフトである。画像を取り扱うにはトップクラスと言っても良い。あえて、難を挙げるならば8Bit階調が基本という所である。もちろん、12bit階調なども扱えるのは知っているが、基本機能とは言えないと思う。
 しかし、PhotoShopで凝ったことをしようとすると、Pluginを作らざるを得ない。PhotoShopでPluginをつくるには2つのやり方がある。それは、

  • Adobe提供のPlugin SftwareDevelopmentKitを使ってPluginを作る。
  • FilterFactoryを使ってPluginを作成する。
である。目的によってどちらを使うか選択すれば良い。

 今回はランダムノイズをつくるためのプラグイン作成が目的である。その程度であれば、FilterFactoryを使うのが簡単で良い。

FilterFactoryを使う
 まずは、FilterFactoryを使う。
 今回は、ランダムノイズを作るのが目的である。ランダムな(0から255)の値を与えるプラグインである。最初にどんな画像があるかなど関係がない。とにかく乱数を計算し、画像に出力する。今回、1チャンネルにのみ乱数を与えるプラグインと、各チャンネルに独立に乱数を与えるプラグインの2種類を作成する。
 まずは、Redチャンネルにのみ乱数を与えるものをつくる。以下がそのパラメータである。
Redのチャンネルに (0...255)の乱数を与える。
 たった、これだけである。
Redに乱数を与え、Green,Blueのチャンネルには0を与える。
 このプラグインで作成した画像がこれである。ここでは、Redのレイヤーをグレースケールに変換してある。

 もうひとつ、各色に乱数を与えるプラグインのサンプル画像はこのようになる。

 今回作成したWindows版のプラグインをここにおいておく。Mac版も作るのは同じく簡単である。Mac版やCMYK版が欲しいという要望があれば教えて頂きたい。SDKを使う場合などはむしろMac版の方が簡単である。 このファイルを解凍して、プラグインをPhotoshopのPluginディレクトリのFiltersの下に置けば使えるようになる。JunHiraxというジャンルのRnd2redとRnd2RGBである。

 さて、試しに使ってみる。1000x1000ドットのランダムノイズ画像を作成してみる。その画像はここに載せるには大きすぎる。そのため、その一部を左下に示す。その画像に対して各領域10x10の100ドットで平均し、100x100に変換した画像を右に示す。詳しくは「2項分布を考える」を見て欲しいが、100ドットで平均したくらいではフラットにはならない。それどころか、有限のいくら広い範囲で平均しても正確にはフラットにはならない。もし、フラットになるのであれば、それはランダムな2項分布ではない。もちろん、PhotoShopの丸め誤差とかの話は別にしておく。また、「2項分布を考える」の際は1次元の1成分データであったが、今回は2次元3成分データである。そのため、人間にはよりフラットに見えにくい。相対的な色差に対しては人間の目は敏感だからである。

右が作成した1000x1000ドットのランダムノイズ画像の一部(137x90)、
左は作成した1000x1000ドットのランダムノイズ画像を各領域100ドット(10x10ドット)で平均することにより、100x100に変換したもの
 これを使って、適当に遊んでみると面白いのではないだろうか。
 今回の例も「2項分布の特性:どんなに広い領域であっても、領域中の平均が一定でない」の当然の結果である。仮に、ある広い領域中の平均が一定であるような確率過程を用いればこのようなことは生じない。もしも、そのような確率過程に基づくものがあったら、部分部分はランダムに見えても、広い領域ではフラットに見えるのである。

2008-11-17[n年前へ]

0.2×11-2 = …?のヒミツ 

 前に何度も見たことでも、久々に見たり読んだりした時、新鮮に面白く感じることは多いように思います。

 Mathematicaのデモ中で、「計算の丸め誤差」をエクセルで見ました。数値計算の有効桁数や丸め誤差を気にする人は多いでしょうし、エクセルや多くの計算プログラムやあるいは言語で「誤差がどんどん重畳されていくようす」を眺めたことがある人も多いと思います。いえ、実際のところ、技術系の人であれば、そんなデモを眺めたことがない人の方が稀少ではないでしょうか。とはいえ、前に何度も見たことでも、やはり新鮮に面白く感じることは多いように思うのです。

 そこで、(Mathematica のデモンストレーション中で演じられていた)エクセルで「0.2×11-2」の計算を繰り返していったときのようすを動画として再現して貼り付けてみました。

 まず、エクセルで、0.2×11-2を計算します。そして、『「(0.2と表示された)その答え」×11-2』と計算するのです。そして、その答えにさらに…と計算を繰り返していくわけです。

 すると、あっという間に丸め誤差が積み上がっていって、20回も計算を繰りかえすと値が1000くらいになってしまいます。こういったことは、浮動小数点の精度を考えれば当たり前な話です。しかし、「タネがわかっていても面白い手品」があるように、こんなデモンストレーションも(たまに眺める分には)見ていてとても楽しく感じてしまいます。


 もしかしたら、特にこの手のデモを楽しく感じるのは、「キカイが動いている仕組み・仕掛け」を感じることができるからかもしれません。アレ?と感じ、その興味を入り口として、目の前の現象を眺めていくうちに「キカイが動いている仕組み・仕掛け」が見えてくるからかもしれません。

 そして、いつも「それってとても楽しいと思わない?」と感じるのです。



■Powered by yagm.net