
姿勢センサを用いて,プロジェクタの台形補正を自動で行う画像処理プログラムを作成しようと思っています.
ネットで調べたところ射影変換を使うのが定石のようですが,
その際にカメラを併用して射影変換行列を得ているものがほとんどで,姿勢センサを利用したものが見あたりませんでした.
カメラを使わず,プロジェクタの姿勢を取得する3軸姿勢センサのみで
投影画像の台形補正を行うことは可能でしょうか?
シナリオとしては,机上に置いたプロジェクタで平面(壁)に投影することを想定しています.
また,投影面までの距離はあらかじめ分かっているという前提です.
参考になる書籍等でもかまいませんので,ご教授お願いします.m(_ _)m
A 回答 (4件)
- 最新から表示
- 回答順に表示

No.4
- 回答日時:
No.1 です。
事前調査はやったほうがいいですよ。
そうすれば、センサの出力が誤差だらけだとか、そもそも、センサの取り付け精度をどうやって補償するのかとか、周辺の問題もわかってきます。
また、データがあれば、数度程度の傾きなら、一次の多変量解析で、かなりいいデータが出るはずです。
なにより、回答を待っている間に、「ある程度の傾向」がわかるはずです。
実際、こういうものは、途中の理論はどうとでもなるものです。
それより、「入力」が本当に正しく得られるかというのが一番難しい点であることが多いです。
その上で、あくまでも理論的にと言うのなら、まず、すでに調べたカメラによる方法をまず完全に理解しましょう。
その方法は、
1)カメラで壁の映像を取得 → 2)実際に写っている画像のゆがみを認識 → 3)それを元に戻す。
というロジックだと思いますが、姿勢センサを使ったときの
1)姿勢センサで傾きを認識する → 2)壁に映っているはずの壁のゆがみを認識 → 3)それを元に戻す。
ということで、1)と2)だけを考えればいいことがわかります。
実際には、三角関数の応用問題なので、図形を書いて冷静に考えればそんなに難しくないと思います。
問題は、カメラの場合、3)でフィードバックを行っている可能性が高いと言うことです。
カメラを使った場合のロジックを理解するというのは、このフィードバックが本誌的なフィードバック(一発ではきっちり計算できないので、フィードバックをしながら修正をしている)なのか、見かけのフィードバック(位置が変わったときに自動的に補正できるようにしている)のか見極めることです。
前者(本質的なフィードバック)が必要と言うことであれば、姿勢センサだけで台形処理をすることは(画像のフィードバックを得る手段がないので)とても難しいと言うことになります。
あと、カメラを使った場合、水平方向のずれも組み込んでいるはずです。
姿勢センサでは、水平方向のずれが本質的に検出できませんから、水平方向のずれの部分を排除しなければなりません。(画像の変形のどの部分が水平方向のずれを反映しているのか確認する必要がある)
No.3
- 回答日時:
なかなか面白いことをやっていますね。
自動で台形補正をするためには、当然ですが画像がスクリーンにどのように投影されるかが求められなければいけません。
これを計算で求めるためには、スクリーンとプロジェクターとの位置関係と、プロジェクターの投影角などの内部状態がわからないといけません。
位置関係は、ある程度条件を制限して、姿勢センサで求めることができると思いますが、投影角はプロジェクタ内で可変なものがほとんどだと思います。
このため台形補正をするためには、プロジェクタの投影角を何らかの方法で取得しなければいけません。おそらくあなたのやりたいことだと、投影スクリーンの大きさはあらかじめ分かっているものとして、固定にしてしまってもいいかもしれません。
以上のことから外部変数と内部変数が求められますので、ピンホールカメラモデルに基づいて、射影行列を計算することができると思います。
この回答への補足
詳しい回答ありがとうございます.
ピンホールカメラモデルというものを使うということで,ネットで調べてみました.
プロジェクタとカメラで入出力が逆なので混乱してしまったのですが,
ワールド座標系に設置されたある大きさの長方形を本来のプロジェクタ投影画像とし,
カメラの場合で言う"画像座標系"をスクリーン(プロジェクタを投影する壁面)と置き換えて
考えるということでしょうか?

No.1
- 回答日時:
本質的には、プロジェクタのレンズの中心点を、光の中心と考えて、その点から、映像の4隅までの距離が、(プロジェクタの置かれた角度により)どう変化するかという問題ですから、三角関数の組み合わせで解けそうな気はします。
が、ここでは、もっと安直な方法を。
実際に、プロジェクタを設置して、傾けてみて(姿勢センサの出力はとれるとして)壁に映った画像の4つの片の長さを実測してみれば、どう変換すればいいかがわかります。
プロジェクタを机の上に置いて、(多分垂直になっている)壁に映すということで、考えるべき角度の範囲はかなり狭いと思います。
この範囲なら、おそらく、傾ける角度と、画像の(各辺の)長さの変化は1次式で、かなり正しく表現できると思います。
あと、壁との距離は、姿勢センサを使うなら、影響はないはずです。
回答ありがとうございました.
確かに実測で計ってしまえば,(誤差は置いておいて)一番分かりやすい形で式が立てられそうです.
ただ,縦方向と横方向の姿勢変化を組み合わせると,かなり骨が折れそうですね^^;
まずは理論的に考えてみて,それが難しいようでしたらいただいたアイディアを使わせていただきます!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
OpenCVで寸法測定
-
Windows Media Playerを開くと...
-
VB.NET とドットNET(.NET...
-
String^の^自体が何を意味して...
-
Google ColaboでGUI作成
-
なぜHTMLのソースコードが無料...
-
eclipseで関数printfを解決でき...
-
DLL読み込み時エラー
-
iPhoneのカメラロールへ画像を...
-
大阪梅田でプログラミング関係...
-
自作ライブラリとプロジェクト...
-
gcc に mktemp 危険と怒られ...
-
C++とVC++の違いについて
-
Ps+のフリープレイでDestiny2の...
-
本格的なGUIを作るのにおすすめ...
-
C言語について。
-
Cでmd5を使うには
-
ライブラリ作成時のグローバル...
-
C言語の初歩的入門書
-
ASP ODBC以外のSQLserver接続方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
色混ぜのアルゴリズム
-
生年月日(yyyy/MM/dd) → 年齢...
-
TEXを使いたい
-
画面の枠に触れている部分を削除
-
画像の透明化
-
HBITMAPを初期化するとは?
-
C言語 極座標変換
-
平滑化フィルタなどフィルタリ...
-
姿勢センサでプロジェクタの台...
-
OpenCVで寸法測定
-
直線と線分の交差判定について...
-
画像の2値化について
-
画像をFFTした際のスペクトル分...
-
OpenCVで、画像の平均階調値よ...
-
行列の積の処理を高速化したい
-
C言語の作成依頼です。
-
画像の拡大
-
Canny法に用いる閾値の決定法に...
-
C++/CLIで画像処理
-
VB BitmapをExcelに貼り付け 大...
おすすめ情報