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項分布の特性:どんなに広い領域であっても、領域中の平均が一定でない」の当然の結果である。仮に、ある広い領域中の平均が一定であるような確率過程を用いればこのようなことは生じない。もしも、そのような確率過程に基づくものがあったら、部分部分はランダムに見えても、広い領域ではフラットに見えるのである。

1999-01-28[n年前へ]

Photohoの落とし穴 

ノイズフィルタに要注意

 Phtoshopは大変巨大なソフトである。巨大すぎてよくわからないところも多い。巨大な割にはマニュアルは薄い。性能の割には安いと思うのだが、もう少し詳しいマニュアルも作って欲しい。Adobe(アドビでなくて)からなら入手できるのだろうが。

 今回はPhotoshopの「ノイズフィルタ」について考えてみたい。 ノスタルジックにしたい時など重宝するフィルタである。

Photoshopの「ノイズフィルタ」
図.1
 上のようにメニューからノイズフィルタを選ぶと、次のようなダイアログが出る。
ノイズフィルタのダイアログ
図.2
 まずは、第一の疑問がわく。分布方法の「均等に分布」、「ガウス分布」とは何だろうか?まずは、それぞれのノイズ画像を見てみる。
 まず、「均等に分布」のノイズを見てみる。
「均等に分布」のノイズ
図.3
 次に、「ガウス分布」のノイズである。
「ガウス分布」のノイズ
図.4
 一見した印象はさほど変わらない。それでは、ヒストグラムを見てみる。
図.5: 左が「均等に分布」、右が「ガウス分布」
 これならば、「均等に分布」、「ガウス分布」の意味がわかりそうである。左が-均等-であり、右が-ガウス-分布-であるというのは実感できる。

 両方とも、「ノイズの量」を55にしてある。左上の「均等に分布」の画像を見ると200から255までの間にノイズが-均等に分布-していることがわかる。ということは255 から ( 255-「ノイズの量」 ) までのレベルにノイズが-均等に-分布していることがわかる。ただし、「ノイズの量」の最大値は999であるから、さらに、何らかの処理が加えられているのだろう。
 同じように、「ガウス分布」の方もガウス分布の分散、中心値、ノイズ量を「ノイズの量」の数値に従い適当に導いているのだろう。大雑把にはわかった。

 今回は濃度の分布に対する考察はここまでにしておく。次は位置分布である。今回のメインはこちらである。
 まずは、下の図.3の拡大図を見て欲しい。

「均等に分布」のノイズ画像の部分拡大図
図.6
 妙に周期性が感じられないだろうか? 少なくとも私は感じる。これは気のせいなどではない、と思う。それは「ガウス分布」で同様である。
そこで、Photoshopのノイズフィルタの位置分布に何らかの周期性があるのかどうかを調べてみたい。

そこで、それぞれのノイズ画像をフーリエ変換し周波数領域に変換する。
左が「均等に分布」のノイズ、右が「ガウス分布」の周波数領域
「均等に分布」
「ガウス分布」

 すると、縦線が見える。つまり、どちらも横方向に周期性があることがわかる。またそれよりレベルは小さいが縦方向にも周期性がある。それぞれの分布で周期性は異なっている。
 横方向で一番レベルが大きいものは周期128ピクセルである。これはどちらの分布に関しても言えそうである。128とはいかにも納得できる数字である。
 縦方向は85ピクセル位か?100位のもあるな? いずれ、より詳しい解析を行ってみたい。

 さて、以前PhotoShopの乱数Pluginを作ろう。----FilterFactory編---(1999.01.08)で作成したプラグインはこんな周期性を持っていないことを保証しておく。以下がその証拠である。

JRnd2Redで作成したノイズ画像とそのフーリエ変換
 こちらには、周期性はないのがわかると思う。

 今回の結論:Photoshopのノイズフィルタには要注意である。
 今回の教訓:何はともあれ疑ってかかれ。

2010-05-01[n年前へ]

女子学生の恋人選び方 実験編 

 少し前、女子学生相手に、こんな実験をしてみた。実験として出した「お題」は、「これから20人が登場します。順々に人が登場します。といっても、登場するのは”あなたとの相性を数値で表したもの”だけです。あなたは、(順に出てくる相性数値を眺めながら)この人を恋人に選ぶ、と決めたところで、手を挙げてください。あなたは、手を挙げた瞬間の相手を選ぶことになりますから、すでに登場した前の人を選ぶことはできませんし、それ以降に登場する人を選ぶこともできません」というものである。この「お題」を出した時に、どのような選び方をするのかを知りたかったのである。

 ちなみに、女子学生に見せる数値は、20人1セットの実験を始める前に、平均値と分散を適当に決めた正規分布乱数である。20人1セット内では平均値と分散は変化しないとはいえ、その平均値や分散は、相性数値を眺める被験者はわからない、という条件である。

 面白かったのが、女子学生が全員「最初の数人分の数値に関してはただ眺め、どういう相性数値が出てくるのか、つまり、平均値はどの程度でバラツキはどの程度なのかを、最初の数人を眺め・見極めた上で、相性数値が上位に入る人のところで”手を挙げる”という選び方をした、ということだった。とても興味深い事に、被験者はみな同じような選び方をしたのである。この選び方は、数学が導く理想の選び方、とほぼ同じである。

 その結果、被験者全員が「(コンピュータが用意した)20人の相手の中から相性数値がベスト3に入る相手を見事に選んだ」のだった。

 女子学生の直感(あるいは、推論・予測能力というべきか)は、恐るべき精度を持つものだと驚かされたのである。

2010-05-02[n年前へ]

女子学生の恋人選び方 ”あなたも挑戦してみよう”編 

 今日は、女子学生の恋人選び方 実験編でやってみた「これから20人が登場します。順々に人が登場します。といっても、登場するのは”あなたとの相性を数値で表したもの”だけです。あなたは、(順に出てくる相性数値を眺めながら)この人を恋人に選ぶ、と決めたところで、手を挙げてください。あなたは、手を挙げた瞬間の相手を選ぶことになりますから、すでに登場した前の人を選ぶことはできませんし、それ以降に登場する人を選ぶこともできません」というお題を、あなたも試してみる・体験してみることができるようにしてみました。

 下にあるのが、その道具(フォーム)です。JavaScriptの正規分布乱数関数を使い、20人分の「相性数値」をボタンを押すたびに順々に(1人分の数値づつ)出力します。出力される「相性数値」は数値が大きい方が「相性が良い」ということを示します。20人分まで出力すると、一旦止まり、また初期に戻ります。

 正規分布乱数の平均値と偏差は固定されています。だから、この記事のソースを眺めれば、どんな正規分布乱数であるかがわかってしまうことになります。つまり、どんな「人たち」が登場するのかを、おおよそ予想することができてしまいます。とはいえ、そんなカンニングはせずに、ぜひ、順に並ぶ数値群から、どんな人たち(数値群)が登場するのか想像してみてください。

そして、20人目まで(20人目を含む)の間で、「この人(数値)を選ぶ」と(相性数値が出た瞬間に)決めてみてください。そして、さらに、自分が選んだ数値が20個の数値の中で一体上から何番目に位置していたか、ということを調べてみてください。その結果が、あなたの「選び方能力」ということになります。

 「(コンピュータが用意した)20人の相手の中から相性数値がベスト3に入る相手を見事に選んだ」女子学生たちを、あなたは超えることができたでしょうか?それとも、全然ダメだったでしょうか…?

 ところで、登場する相性数値から平均値・分散を直感で刻々予想し、あなたが想像した予想平均値・分散の変化推移を眺め直してみても面白いかもしれません。そうすると、自分がどんな風に考え・予想をしていたかを、自分自身で改めて知ることができ、ちょっと不思議な気持ちになることでしょう。



■Powered by yagm.net