- 締切済み
姿勢センサでプロジェクタの台形補正を行うプログラム
姿勢センサを用いて,プロジェクタの台形補正を自動で行う画像処理プログラムを作成しようと思っています. ネットで調べたところ射影変換を使うのが定石のようですが, その際にカメラを併用して射影変換行列を得ているものがほとんどで,姿勢センサを利用したものが見あたりませんでした. カメラを使わず,プロジェクタの姿勢を取得する3軸姿勢センサのみで 投影画像の台形補正を行うことは可能でしょうか? シナリオとしては,机上に置いたプロジェクタで平面(壁)に投影することを想定しています. また,投影面までの距離はあらかじめ分かっているという前提です. 参考になる書籍等でもかまいませんので,ご教授お願いします.m(_ _)m
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- 麻野 なぎ(@AsanoNagi)
- ベストアンサー率45% (763/1670)
No.1 です。 事前調査はやったほうがいいですよ。 そうすれば、センサの出力が誤差だらけだとか、そもそも、センサの取り付け精度をどうやって補償するのかとか、周辺の問題もわかってきます。 また、データがあれば、数度程度の傾きなら、一次の多変量解析で、かなりいいデータが出るはずです。 なにより、回答を待っている間に、「ある程度の傾向」がわかるはずです。 実際、こういうものは、途中の理論はどうとでもなるものです。 それより、「入力」が本当に正しく得られるかというのが一番難しい点であることが多いです。 その上で、あくまでも理論的にと言うのなら、まず、すでに調べたカメラによる方法をまず完全に理解しましょう。 その方法は、 1)カメラで壁の映像を取得 → 2)実際に写っている画像のゆがみを認識 → 3)それを元に戻す。 というロジックだと思いますが、姿勢センサを使ったときの 1)姿勢センサで傾きを認識する → 2)壁に映っているはずの壁のゆがみを認識 → 3)それを元に戻す。 ということで、1)と2)だけを考えればいいことがわかります。 実際には、三角関数の応用問題なので、図形を書いて冷静に考えればそんなに難しくないと思います。 問題は、カメラの場合、3)でフィードバックを行っている可能性が高いと言うことです。 カメラを使った場合のロジックを理解するというのは、このフィードバックが本誌的なフィードバック(一発ではきっちり計算できないので、フィードバックをしながら修正をしている)なのか、見かけのフィードバック(位置が変わったときに自動的に補正できるようにしている)のか見極めることです。 前者(本質的なフィードバック)が必要と言うことであれば、姿勢センサだけで台形処理をすることは(画像のフィードバックを得る手段がないので)とても難しいと言うことになります。 あと、カメラを使った場合、水平方向のずれも組み込んでいるはずです。 姿勢センサでは、水平方向のずれが本質的に検出できませんから、水平方向のずれの部分を排除しなければなりません。(画像の変形のどの部分が水平方向のずれを反映しているのか確認する必要がある)
- myuki1232
- ベストアンサー率57% (97/170)
なかなか面白いことをやっていますね。 自動で台形補正をするためには、当然ですが画像がスクリーンにどのように投影されるかが求められなければいけません。 これを計算で求めるためには、スクリーンとプロジェクターとの位置関係と、プロジェクターの投影角などの内部状態がわからないといけません。 位置関係は、ある程度条件を制限して、姿勢センサで求めることができると思いますが、投影角はプロジェクタ内で可変なものがほとんどだと思います。 このため台形補正をするためには、プロジェクタの投影角を何らかの方法で取得しなければいけません。おそらくあなたのやりたいことだと、投影スクリーンの大きさはあらかじめ分かっているものとして、固定にしてしまってもいいかもしれません。 以上のことから外部変数と内部変数が求められますので、ピンホールカメラモデルに基づいて、射影行列を計算することができると思います。
- zwi
- ベストアンサー率56% (730/1282)
姿勢センサで分かるのはプロジェクタの姿勢だけですよね。 スクリーン(壁面)とプロジェクタが平行でなかったりの問題はカメラがないと補正できないと思いますが、そこは理想的な状態と言う非現実的な対応でよろしいのでしょうか?
補足
いえ,むしろその理想的でない場合に台形補正を行えればと思っています. つまり,プロジェクタがスクリーンに対してPitch角やYaw角方向に姿勢が傾いていた場合にも,姿勢センサのみで台形補正を行いたいということです.
- 麻野 なぎ(@AsanoNagi)
- ベストアンサー率45% (763/1670)
本質的には、プロジェクタのレンズの中心点を、光の中心と考えて、その点から、映像の4隅までの距離が、(プロジェクタの置かれた角度により)どう変化するかという問題ですから、三角関数の組み合わせで解けそうな気はします。 が、ここでは、もっと安直な方法を。 実際に、プロジェクタを設置して、傾けてみて(姿勢センサの出力はとれるとして)壁に映った画像の4つの片の長さを実測してみれば、どう変換すればいいかがわかります。 プロジェクタを机の上に置いて、(多分垂直になっている)壁に映すということで、考えるべき角度の範囲はかなり狭いと思います。 この範囲なら、おそらく、傾ける角度と、画像の(各辺の)長さの変化は1次式で、かなり正しく表現できると思います。 あと、壁との距離は、姿勢センサを使うなら、影響はないはずです。
お礼
回答ありがとうございました. 確かに実測で計ってしまえば,(誤差は置いておいて)一番分かりやすい形で式が立てられそうです. ただ,縦方向と横方向の姿勢変化を組み合わせると,かなり骨が折れそうですね^^; まずは理論的に考えてみて,それが難しいようでしたらいただいたアイディアを使わせていただきます!
補足
詳しい回答ありがとうございます. ピンホールカメラモデルというものを使うということで,ネットで調べてみました. プロジェクタとカメラで入出力が逆なので混乱してしまったのですが, ワールド座標系に設置されたある大きさの長方形を本来のプロジェクタ投影画像とし, カメラの場合で言う"画像座標系"をスクリーン(プロジェクタを投影する壁面)と置き換えて 考えるということでしょうか?