• 締切済み

三次元の画像を二次元で表示・・・

タイトルにあるとおりです. 三次元の画像を二次元で表示するのに必要な計算式(変換式)をおしえてください.

みんなの回答

  • stomachman
  • ベストアンサー率57% (1014/1775)
回答No.6

「レンダリング」と呼ばれる技術の問題です。参考書やHPは幾らもあると思いますが… 「形状」が何を意味しているか曖昧です。  ひとつの捉え方として、三次元直交座標系(x,y,z)の各点に「色」を対応付ける関数f(x,y,z)が与えられていると考える。点がぱらぱらあるだけだったり、針金細工のような図形であるなら、f(x,y,z)はほとんど至るところで「透明」という色を与えています。不透明な面や体積の部分があると、ある方向から見て背後に隠れるものは何か、ということが問題になり、ちょっと面倒です。  点がぱらぱらあるだけだったり、針金細工のような図形である場合には、点の集合、あるいは線分の集合として「形状」を表現しておくと計算しやすいです。以下、こちらの場合について解説します。  さて、三次元空間から平面への投影の仕方は、三次元空間の中の何処に視点を置いてどっちを見るかによって決まります。無限遠から眺めるのなら、既に回答の出ている平行投影ですし、有限の距離から見たところが欲しいのなら投影変換が必要。 実際には、視点を動かすのではなく、視点を固定しておいて「形状」の方を動かします。 投影変換で考えましょう。 (1)「形状」の定義されている三次元空間に、もうひとつ三次元座標系(X,Y,Z)を導入します。この座標系は視点の位置を原点とし、平面pがZ=1の平面になるようにします。平面p上の点は(X,Y)で表現できることになります。 (2)次に「形状」を(X,Y,Z)座標系で表します。 (x,y,z)から(X,Y,Z)への変換は、平行移動と各軸まわりでの回転で表されます。平行移動は簡単ですね。また、たとえばx軸を中心軸とするθラジアンの回転は 1   0   0 0  cosθ  -sinθ 0  sinθ  cosθ という行列をベクトル(x,y,z)に掛けることで行えます。y軸を中心軸とするθラジアンの回転は cosθ  0   -sinθ 0    1   0 sinθ  0  cosθ です。z軸についてどうなるかはもうお分かりでしょう。 このようにして、「形状」をあらわす各点の座標を一斉に変換して(X,Y,Z)座標系での値に書き換えます。 (3)「形状」を構成する一つの点(AX,AY,AZ)を視点(0,0,0)から平面pを透かして見たとき、平面p上のどこに見えるか、その場所を(aX,aY)としますと ax=AX/AZ ay=AY/AZ であることが分かります。だからそこに点を打つ。 ちなみに、視点から(AX,AY,AZ)までの距離も計算できますから、遠くになるほどかすんで(色の彩度が低く)見える、というような効果を付けることも可能です。 「形状」を構成する線分はどうなるか。線分の両端の点(AX,AY,AZ)、(BX,BY,BZ)が平面p上のどこに来るかは上記のやり方で(aX,aY)、(bX,bY)と決まります。そしたら、この二点を結ぶ線分をp上に描けば良いのです。

takkatakka
質問者

お礼

御礼の返事が大変遅くなり,申し訳ありません. この場をお借りして,回答してくださった皆さんに,お詫び申し上げます. 実を言いますと,私自身,質問の意味を良く理解していなかったものでして・・・ ある人(上司)にたのまれたことでして. そんなもんですから,皆さんが補足要求や回答をしてくださっても,満足に返事が できなく,迷惑を掛けてしまいました. こういったことは,ここで質問するなということですね.深く反省しております. 結局,ネットで検索して,いくつかのHPにあった数式を,そのままコピーして提出しましたところ,なんだか解決してしまったみたいです. ホント~に,すみませんでした.

  • Largo_sp
  • ベストアンサー率19% (105/538)
回答No.5

cactusronさんの補足として.... ある点(x0,y0,z0)が、平面α:ax+by+cz+d=0 への正射影ということは ある点(x0,y0,z0)から平面αに垂線をひいた足の部分です。 具体的には、直線 (x-x0)/a=(y-y0)/b=(z-z0)/c とαとの交点です。 あとは計算すれば出ますよね....高校の数学です (あとの計算は中学校レベルか) x={(b^2+c^2)x0-aby0-acz0-ad}/(a^2+b^2+c^2) になるかな...計算違っていたらごめんないさい あとはy,zも対称になるので、計算してください。

  • gramin
  • ベストアンサー率36% (51/138)
回答No.4

三次元の画像(形状?)を二次元に射影する方法を何でもよいから教えて・・・というのならば、 #2や#3の方々が答えていることの特殊な例として、(x,y,z)のどれかの成分を無視すればよいと思います。 たとえば、zの成分を無視して、(x,y)に対応させれば、簡単に二次元に射影できます。

noname#5277
noname#5277
回答No.3

グラフィックソフトなんかで3D画像を表示する場合、 3次元の(x、y、z)という座標に対して、 平面α:ax+by+Cz=0 への正射影として計算しています。 より複雑になると、正射影した座標に対して、 元の点と平面の距離をパラメータにして、 図形の中心を掃除の中心にして縮小することで、 奥行きを表現したりします。 んで、その式をここに書くのは大変・・・ イメージだけ理解してもらえれば。

  • Largo_sp
  • ベストアンサー率19% (105/538)
回答No.2

投影の方法も、いろいろありますよ.... 質問の意味は、立体を、画面に表示するときの式ということでほうか... ただ、そのときの投影法も、一点から平面に落とす方法と、 平面から、平面へ落とす方法とで、変換式がかわるとおもいますが... 基本的には、空間上の点(x,y,z)が、平面上の点(x.y)のどの位置に行くかを 計算するだけですよ... まずは、x軸y軸z軸がどういう式になるかをかいて、 それを各々で足し合わせるのが、簡単な方法です...(行列の考えかた)

noname#8570
noname#8570
回答No.1

>三次元の画像を二次元で表示する というのは,ある平面への写像を考えるということですか? また,「画像」という言葉が意味するのはどんな物ですか? 質問が曖昧すぎて「数学的」に答えることは非常に難しいかと….

takkatakka
質問者

補足

そうです.写像です. それから,画像とは「形状」のことです. これでどうでしょうか? よろしくお願いします.

関連するQ&A

  • 2次元から3次元への変換について

    今,2次元から3次元へ座標変換するときに,画像の式を使っています. しかし,画像左下の部分で逆行列が存在しなくなります. この計算のやり方は,あっていますか?

  • 画像の2次元フーリエ変換の結果の表示の仕方について

    現在、C言語で画像に2次元離散フーリエ変換を施し、高速フーリエ変換と比較しろという課題に取り組んでいます。 以下の様なプロセスで2次元フーリエ離散変換を施し、結果を表示しようと思っています。 ・画像を読み込み、float型配列に入れる。 (画像は一番左上が原点とします。256×256のサイズです) ・上記のfloat型配列の、第1象限と第3象限、第2象限と第4象限を各々入れ替える。 ・各行ごと、つまり、f[0][0]~f[0][255]、f[1][0]~f[1][255]、と順々)に1次元離散フーリエ変換を施す。 ・上記のフーリエ変換の結果を各列ごと、つまり、f[0][0]~f[255][0],f[1][1]~f[255][1]という風に1次元離散フーリエ変換を施す。 ・フーリエ変換の結果の、第1象限と第3象限、第2象限と第4象限を各々入れ替える。 ・f[][]のパワースペクトル(実部の2乗+虚部の2乗の、自然対数をとったもの)を計算する。 ・そのパワースペクトルとをfloat型なので、char型に置き換えて画像として出力する。 正規化等の少し細かいところは省略しました。 結果として、参考書等で見かけるもの(真ん中が直流成分で、含まれる周波数を濃淡で表したもの)になればいいのですが、上記のプロセスで大丈夫ですか? パワースペクトルを計算した後に、何らかの移動の処理(つまり、画像の真ん中が直流成分となるような処理)を施す必要がなく、 フーリエ変換の計算の前と後に象限の入れ替えを施すだけで、直流成分が出力画像の真ん中に来るということですか? フーリエ変換の前と後で、象限を入れ替えるだけで周波数空間では原点が真ん中になることが納得できないです。 ややこしい質問ですが、「プロセスのここが間違ってるよ」等を教えていただけると助かります。特にパワースペクトルの部分等。 よろしくお願いします。

  • 2次元フーリエ変換の実際について

    「画像などを対象にする2次元フーリエ変換は、縦方向の1次元フーリエ変換と横方向の1次元フーリエ変換を組み合わせることにより計算できます」 との解説があります。下に示すような2次元の値で計算する場合、具体的にどのようにすればよいのでしょうか? (9×9ピクセルの2次元画像でa1~a9はピクセル値とする)           a1 a2 a3            a4 a5 a6            a7 a8 a9 計算方法 1) 横方向(→方向)の1次元フーリエ変換をおこなう          →a1 a2 a3          →a4 a5 a6          →a7 a8 a9 2) 縦方向(→方向)の1次元フーリエ変換をおこなう          →a1 a4 a7          →a2 a5 a8          →a3 a6 a9 これはできるのですが、「縦方向の1次元フーリエ変換と横方向の1次元フーリエ変換を組み合わせる」の意味がわかりません。 横方向や縦方向の1次元フーリエ変換した値をどのようにすればいいのでしょうか? 具体的に教えてください。

  • 3次元データを3D表示

    3Dプログラミング初心者です。 3次元データ(X,Y,Z)が多数あり、これらの点を3次元散布図のように表示させたいと考えてます。 3次元のデータは不規則ではなく、実物から3次元計測をして取得したデータです。 また、3次元の画像はマウスで回転させて見る方向を変えれるようにしたいです。 画像表示プログラムを、VC++もしくはVB.NETで作成したいのですが、 作成するにあたり、どのように作っていけばいいのかわかりません。 大まかな作成の流れ、もしくは参考になるサイトなどありましたら、 教えてください。 尚、プログラミングに必要な数学の知識は勉強しました。

  • 画像を二次元フーリエ変換

    c言語で画像を入力して2次元フーリエ変換を行い,逆変換をしたいのですが全然うまくいきません. どなたか教えていただけませんか? いろいろ調べたのですが,プログラム初心者なのでどう書いていけばいいのかわからず辛いです... サンプルのコードも教えていただけると助かります. 画像サイズは256×256画素程度です.

  • 画像処理 (3次元のモデルと画像のマッチングのアルゴリズムについて)

    画像処理を勉強しているものなのですが、 現在2次元画像同士のマッチング(テンプレートマッチング)などはプログラムが組めるのですが 計算機内に作った3次元のモデルと画像のマッチング、つまり3次元物体の姿勢推定のアルゴリズムがよくわかりません。簡単でいいので教えてください。 よろしくお願いします。

  • 二次元画像を三次元化するソフト

    二次元の画像を三次元化(立体的に見せる)できるソフトを探しています。 ご存知の方がおられましたら教えてくください。

  • 拷問二次元画像板に入れない

    はじめまして。 タイトルどおりの内容です。 「拷問二次元画像板」にはいろうとすると、 File Not Found The requested URL was not found on this server. Apache Port 80 とでてはいる事ができません。 私以外の人は入れているみたいです。 アドレスは間違っていませんし、原因が全く思い浮かびません。 対処法がわかればお願いします。 携帯電話でも入れませんでした。 アクセス制限等ではないようです。

  • エグい二次元画像

    結構エグめな二次元画像求めてます。 例) 触手,断面図など

  • 一次元の拡散方程式

    一次元の拡散方程式 (1)のように与えられる1次元の拡散方程式で、 境界条件は(2)(3)式を満たす。 Fourier変換は(4)(5)式で定義され、 u(x,t)のFourier変換を(6)式とすると、 U(k,t)は(7)式のように書ける。 このとき、U(k,t)を逆Fourier変換することにより、 u(x,t)の一般解をu(x,0)の積分形で表したいのですが、 どうすればいいか分かりません。 どなたかご教授いただけるとうれしいです。