ランダムドットステレオグラムアプリ [ランダムドットステレオグラムアプリ]
これから、こないだ試しに作ってみたシングルイメージランダムドットステレオグラム(Single Image Random Dot Stereogram)を自動生成するアプリを作る。
まず、なんでそんなものを作りたいと思ったか、ということから。
目的は、2変数実数値関数の表示方法の種類を増やしたい、ということ。表示は2次元上にするしかなく、次元をひとつ減らさないといけない。透視図的に描いたり、地図のように等高線などを引いたりするのが普通だけど、3次元のイメージを保って表示できる方法としてステレオグラムが考えられる。そのなかでもランダムドットステレオグラムを使った2変数実数値関数の表示をするアプリを作ることにする。
「ランダムドットステレオグラムとは」というのは、他の親切なサイトにゆずって、僕らしさがでるところだけをメモしておく。
多くのサイトにはランダムドットステレオグラムの例として、いろいろな工夫を凝らした美しい絵がいっぱいある。一枚に大変な労力を費やしたと思われるものもたくさんある。
僕は絵自身の美しさおもしろさよりも、2変数の実数値関数の表示方法としてに興味があるので、
まず、いつものように数学の整理から始める。
壁がなくても無限遠に背景の位置が特定できるようなテクスチャ(明暗や形)があれば距離を知ることはできる。また、感度は(s/d)/hのような値で表されると考えられる。
どうやら、脳は輻輳から奥行き情報を得るためにいろいろ難しいことをしているらしい。ここではそこにはあまり突っ込まないことにする(認知科学の領域になる。それはそれで面白そうだけど)。
裸眼の場合は2枚の写真を並べて目の輻輳を意識して変えてそれぞれの目で別の写真を見つめる、ということをする。普段現実の立体を眺めるときには、目の輻輳角と、水晶体の焦点距離には相関があってそれに慣れているので、それぞれの目で別の写真を見るということは努力を要する。ステレオグラムを見やすくするために、輻輳角と焦点位置が通常の場合に近くなるようにレンズを入れたビューアも市販されている。
普通のステレオグラムを裸眼で(レンズを使わずに)見る場合、2枚の絵を横に並べるしかないので、絵の横方向の画角は横幅で制限される。また、多くの人はそれぞれの視線が開く方向へは眼球を動かすことができないため、2枚の絵の距離は両目の間隔以上には広げられない。
まず、なんでそんなものを作りたいと思ったか、ということから。
1 ランダムドットステレオグラム
2変数実数値関数 のエレベーションマップ(Elevation Map、あるいはハイトマップHeight Map、格子点での関数の値を2次元配列にしたもの)を与えると、値の大きなところは浮き上がって小さなところはくぼんで見えるようなランダムドットステレオグラムを作るアプリを書く。目的は、2変数実数値関数の表示方法の種類を増やしたい、ということ。表示は2次元上にするしかなく、次元をひとつ減らさないといけない。透視図的に描いたり、地図のように等高線などを引いたりするのが普通だけど、3次元のイメージを保って表示できる方法としてステレオグラムが考えられる。そのなかでもランダムドットステレオグラムを使った2変数実数値関数の表示をするアプリを作ることにする。
「ランダムドットステレオグラムとは」というのは、他の親切なサイトにゆずって、僕らしさがでるところだけをメモしておく。
多くのサイトにはランダムドットステレオグラムの例として、いろいろな工夫を凝らした美しい絵がいっぱいある。一枚に大変な労力を費やしたと思われるものもたくさんある。
僕は絵自身の美しさおもしろさよりも、2変数の実数値関数の表示方法としてに興味があるので、
- 見やすさ、つまり立体視のしやすさ
- 表示法としての使い勝手
- アルゴリズムや実装上のおもしろさ
まず、いつものように数学の整理から始める。
1.1 生成アルゴリズム
アルゴリズムというほどたいしたものではない。1.1.1 下準備
図-のような背景の壁の前にオレンジ色のボールがあるとする。 正面からLとRの両目で見る。右目と左目で見たボールは背景に対して移動して見える。目と目の中間(水平方向の鼻の位置)とボールを結んだ線が壁に到達する位置からの、例えば左目で見たボールの背景での位置のずれをsとすると であることは簡単にわかる。ここでhは壁からのボールの距離、dは壁から目までの距離、pは鼻と目の水平方向に測った距離である。普通はp ≪ dなのでボールがこの位置から縦横にずれていてもこの式が近似的に成り立つとみなせる。このずれを両眼視差という。脳は、この背景に対するそれぞれの目による位置のずれから壁からの距離hを感覚的に知る。またあきらかに縦方向(y方向、つまりふたつの目が並ぶ方向に垂直な方向)の情報はまったく使われない。壁がなくても無限遠に背景の位置が特定できるようなテクスチャ(明暗や形)があれば距離を知ることはできる。また、感度は(s/d)/hのような値で表されると考えられる。
どうやら、脳は輻輳から奥行き情報を得るためにいろいろ難しいことをしているらしい。ここではそこにはあまり突っ込まないことにする(認知科学の領域になる。それはそれで面白そうだけど)。
1.1.2 普通のステレオグラム
普通のステレオグラムは右目で見た絵と左目で見た絵をふたつ用意して、それぞれの目に見せるわけである。もしそれぞれの目の位置で2枚の写真を撮り、画角が撮影時と同じになるような位置に写真を置いて、それをそれぞれの目で別々に見れば、少なくとも網膜の上には撮影時に目で見たのと同じ像が結ばれる。裸眼の場合は2枚の写真を並べて目の輻輳を意識して変えてそれぞれの目で別の写真を見つめる、ということをする。普段現実の立体を眺めるときには、目の輻輳角と、水晶体の焦点距離には相関があってそれに慣れているので、それぞれの目で別の写真を見るということは努力を要する。ステレオグラムを見やすくするために、輻輳角と焦点位置が通常の場合に近くなるようにレンズを入れたビューアも市販されている。
普通のステレオグラムを裸眼で(レンズを使わずに)見る場合、2枚の絵を横に並べるしかないので、絵の横方向の画角は横幅で制限される。また、多くの人はそれぞれの視線が開く方向へは眼球を動かすことができないため、2枚の絵の距離は両目の間隔以上には広げられない。
2011-06-18 21:23
nice!(0)
コメント(0)
トラックバック(0)
コメント 0