新規無料会員登録で1000名様に電子コミック1000円分が当たる!!

写真から実距離を計算するにはどうすればいいのでしょうか。
写真の1ピクセルに対する距離の求め方が知りたいのです。
添付画像のような位置です。

カメラについて: 
CCDカメラ 
焦点距離8mm 
1/3型レンズ 
512×480(画素)×256階調

カメラの角度は40°
被写体とカメラの距離は250mm

以下のサイトを参考に考えていたのですが、
http://www.bouhancamera.net/basicknowledge/lens/ …
http://www.uniel-denshi.co.jp/REPORT/CCTV-ABC/CC …

角度が水平な時の1ピクセルの距離は求めることができたのですが、
カメラの角度をつけた場合の計算が分かりません。
どなたかわかる方。教えていただけないでしょうか。

お願いいたします。

※添付画像が削除されました。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

上下方向の位置に着目して、歪曲はないとします。


撮像素子上で、画面中心からの距離をyとすると、y=f*tanθ (θは光軸に対する角度)になります。
被写体(スクリーン)までの距離をd、スクリーン中心(カメラからスクリーンに垂線を下ろした点)から、光点までの高さをhとすると、h=d*tan(θ+40度)になります。

あとは、撮像素子上で各ピクセルに対して、yのを計算して、それに対応するhを計算すれば、必要な数値は出そうに思います。
    • good
    • 0

カメラの「角度」というのが何に対するどの角度なのかわかりませんが, たぶん三角関数を駆使すればいいんじゃないでしょうか.


もちろん, 「写真におけるどのピクセルなのか」によって距離は違います.

この回答への補足

こんにちは
カメラの角度というのは、カメラの傾きのことです。
0度の場合、正面から被写体を移しますが、
カメラに傾きが付いた場合、写る範囲が変わってしまい、
その場合の1ピクセルの実際の距離の求め方が知りたいのです

補足日時:2010/06/16 07:08
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q写真から大きさを判別する方法とは

こんばんは。
いまひとつピッタリのカテゴリが見つからなかったのですが、
画像関係という事でこちらで質問をさせていただきます。

デジカメなどの写真から、大きさを判別するような方法はあるでしょうか?
例:写真に写っている人間の身長が○○cmかを判別する。

かなり難しい質問をしているというのは理解しているのですが、
ご回答をよろしくお願い致します。

Aベストアンサー

非常に難しいです。
撮影条件(使用するレンズなどと距離)がわかっている場合、大きさのわかっているものがすぐ近くにある場合、であればまだ推測がしやすいです。
たとえば、道路を歩いている人の身長であれば、構図によっては道路の幅から推測も可能です。道路の幅は、自動車の幅などから推測できます。
でも、cm単位は無理でしょうね。ただ、写っている2人のどちらが身長が高いか、というのなら判断はまだしやすいです。

Q1ピクセルって何ミリですか?

1ピクセルって何ミリなのでしょう?
至急、お答えお待ちしております。
かなり急いでます。よろしくお願いいたします。

Aベストアンサー

1ピクセルが何ミリかという質問の答えになるかどうか分かりませんが、
WEB制作上に限って言えば、横100ピクセルの画像を作りたい場合、
Photoshop等では単位をピクセルで作れますが、Illustrator等の場合は、
100pointで作ります。
1pointは、0.35277ミリです。

Q画像から物体の奥行き計算

画像には既知の大きさの物体が複数(全て同サイズ)あります。
それぞれの物体の奥行き方向の位置(相対距離)を計算する方法を教えてください。

ただし、画像に歪みは無いものとします。
また、必要なら撮影に使用したカメラのキャリブレーションはできます。

よろしくお願いいたします。

Aベストアンサー

自分で図を書いて、角度とか入れていったらどうでしょうか?


垂直33度、というのは
「画面の縦にぴったり映っているものは、仰角 +33/2 度〜 -33/2 度」
ということです。
物体までの距離を L 、物体の高さを H とすると
(H/2) ÷ L = tan( 33/2度)
という関係になります。
Hが判っているなら、Lを求めることができます。

ここで、画面より小さく映っているものを考えると
・高さ h の物体が距離L にある、と考えると
(h/2) ÷ L = tan θ
という関係になります。
h:Hは、画像上での物体の高さと、画像全体の高さの比になります。
・高さ H の物体が遠くの距離L' にある、と考えると
(H/2) ÷ L' = tan θ
です。
・写り方が同じ、ということは、角度θは同じです。

以上から順番に計算していけば、 L' が求まります。



と、ここまでは理想的な場合の話し。
正確には、画像の中央と周辺とで写り方が違ったりするので、いろんな補正が必要です。
あるいは、誤差を承知で、 1ドット = 33 / 縦の画素数 度 で近似解を求める、というのも手かもしれません

自分で図を書いて、角度とか入れていったらどうでしょうか?


垂直33度、というのは
「画面の縦にぴったり映っているものは、仰角 +33/2 度〜 -33/2 度」
ということです。
物体までの距離を L 、物体の高さを H とすると
(H/2) ÷ L = tan( 33/2度)
という関係になります。
Hが判っているなら、Lを求めることができます。

ここで、画面より小さく映っているものを考えると
・高さ h の物体が距離L にある、と考えると
(h/2) ÷ L = tan θ
という関係になります。
h:Hは、画像上での物体の高さと、画像全体の高さの...続きを読む

QLNK2019: 未解決の外部シンボルのエラーが出る

Microsoft Visual Studio 2008
Version 9.0.21022.8 RTM
Microsoft .NET Framework
Version 3.5 SP1
----------------------------------------------------------------
新しいプリジェクト→Win32 コンソール アプリケーション(ソリューションのディレクトリを作成 チェック外す)→Windows アプリケーション(空のプロジェクト チェック外す)
----------------------------------------------------------------
 プログラム

 mymain.cpp
#include "myhelper.h"
#include "mymain.h"

//自キャラのデータ
Point2D g_jikipos = {40, 400};//自キャラの座標

//画像ハンドル
int g_jikiimage[11];

//色々なファイルの読み込み
int LoadFiles(){
//画像ファイル読み込み
if(LoadDivGraph("media\\player01.bmp",
11,11,1,64,64,g_jikiimage) == -1) return -1;

return 1;
}


 mymain.h
//他から呼び出させるMyMainの関数
void MyMain();
int LoadFiles();


 myhelper.h(サンプルなので打ちミスはない)
#include "DxLib.h"
#include <limits.h>
#include <math.h>

//構造体宣言
//座標またはベクトルを記録する構造体
struct Vector{
float x,y;
};
typedef Vector Point2D;
//線を記録する構造体
struct Line2D{
Point2D startpos, endpos;
float katamuki;//傾きをラジアン値で記録
Vector speed;//移動している場合は速度をセット
};
//球体を記録する構造体
struct Ball2D{
Point2D position;
float hankei;//半径
};
//四角形を記録する構造体
struct Rect2D{
Point2D lefttop;
Point2D rightbottom;
float width;
float height;
};


//ライブラリ関数
Point2D PosInView(Point2D in);
int XInView(float inx);
int YInView(float iny);
void ScrollToLeft(float jikiposx);
void ScrollToRight(float jikiposx);
void ScrollToUp(float jikiposy);
void ScrollToDown(float jikiposy);
void DrawLineInView(float x1, float y1, float x2, float y2, int Color, int Thickness);
void DrawCircleInView(float x, float y, float r, int Color, int FillFlag);
void DrawAnimation(float x, float y, double ExtRate, double Angle,int TurnFlag,
int *imgarray, int allframe, float fps);
//ベクトル関数
Vector CreateVector(Vector in, float veclen);
Vector AddVector(Vector v1, Vector v2);
Vector SubVector(Vector v1, Vector v2);
Vector AddVectorInFrameTime(Vector pos, Vector speed);
Vector AddVectorInFrameTime2(Vector pos, Vector speed, Vector accel);
Vector Normalize(Vector in);
Vector RotateVector(Vector in, float radian);
float VectorLengthSquare(Vector in);
float DotProduct(Vector v1, Vector v2);
float CrossProduct(Vector v1, Vector v2);
void SetLine2DKatamuki(Line2D *in);
void DrawLine2D(Line2D in, int Color, int Thickness);
void DrawBall2D(Ball2D in, int Color, int Fill);
//当たり判定関数
bool HitTestLineAndBall(Line2D linein, Ball2D ballin);
bool IsPointAtLineFace(Line2D linein, Point2D ptin);
bool HitTestLineAndLine(Line2D line1, Line2D line2);
bool HitTestBallAndBall(Ball2D a, Ball2D b);
bool HitTestPointAndBox(Rect2D rect, Point2D pt);
//タイマー関数
void SetSimpleTimer(int idx, int time);
int GetPassedTime(int idx);


//グローバル変数
extern float g_frametime;
extern Rect2D g_framerect;//画面領域(当たり判定)
extern Point2D g_current_field_pos;//現在の左上座標
extern Rect2D g_stagesize;//ステージサイズ

//定数宣言
const float ZEROVALUE = 1e-10f;
const float PIE = 3.1415926f;
const int SCROLL_LIMIT = 200;
----------------------------------------------------------------
 エラー内容
1>myhelper.obj : error LNK2019: 未解決の外部シンボル "void __cdecl MyMain(void)" (?MyMain@@YAXXZ) が関数 _WinMain@16 で参照されました
1>C:\Documents and Settings\Owner\My Documents\Visual Studio 2008\Projects\my\Debug\my.exe : fatal error LNK1120: 外部参照 1 が未解決です
1>my - エラー 2、警告 0
ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ
----------------------------------------------------------------
画像を貼り付けときます
(見えにくい場合→http://www.dotup.org/uploda/www.dotup.org154142.jpg.html)
初心者なのでわかりやすくお願いします

Microsoft Visual Studio 2008
Version 9.0.21022.8 RTM
Microsoft .NET Framework
Version 3.5 SP1
----------------------------------------------------------------
新しいプリジェクト→Win32 コンソール アプリケーション(ソリューションのディレクトリを作成 チェック外す)→Windows アプリケーション(空のプロジェクト チェック外す)
----------------------------------------------------------------
 プログラム

 mymain.cpp
#include "myhelper.h"
#include "mymain.h"

//自...続きを読む

Aベストアンサー

ファイル構成から推測するに
mymain.cpp というファイルに
void MyMain(void) {
// ここに処理を書く
}
という関数が必要なようです。

Q写真の被写体を実寸サイズで測る方法

写真に写っている被写体の実際のサイズをイラストレーター上で測るには(被写体と一緒に写っている対象物の大きさがわかっているものとして)どうしたらいいでしょうか? 
仕事上よく測ることがあるので困っています。
イラストレーターは初心者なのでわかりやすく説明していただけると幸いです。
他にもフリーソフトなんかで測定出来るものがあれば教えていただけないでしょうか?
どうぞよろしく御願いします。

Aベストアンサー

被写体と一緒に写っている対象物の大きさの基準点間を「ものさしツール」でドラッグして情報パレット内のDの数値を確認する>写真を選択して「拡大・縮小ツール」をダブルクリック>縦横比を固定にチェックして、対象物の大きさ÷D×100の数値を入力(実寸にした場合に大きくなり過ぎる場合は1/10程度の大きさにする)して、OK>被写体を「ものさしツール」でドラッグして情報パレット内のDの数値を確認する。
写真からの測定なので誤差が有ります、特に斜めから撮影された写真等の場合は不正確です。

Q透視投影された平面を正面から見たように変換したい

透視投影で撮影された平面を、正面から撮影したように投影変換する処理を教えてください。
または、射影ひずみの補正といわれるものでしょうか?
私なりにいろいろと調べまして、
「画像の平面内の四頂点の座標を求めることができれば、平面の傾きを求めることができる。」
というところまでたどり着きまして、平面の角度を求めるところまではいきました。
しかし、その後の行列変換がわかりません。
単に回転であれば、

1    0    0
0 cosθ -sinθ
0 sinθ cosθ


cosθ 0 sinθ
0   1    0
-sinθ 0 cosθ

をかければよいかと思っていましたが、奥行きの収縮などの関係がわかりません。
どの様な行列をかければ求めることができるのか教えてください。
このような研究をしていますが、行列は苦手なので、簡単な質問でしたらすみません。

Aベストアンサー

アフィン変換と透視投影の座標変換は以下のURLに詳しく載っていると思いますので、勉強してください。
中に座標変換の式も載っていると思います。
アフィン変換や透視投影の理解に役立つようにイメージ図のあるHPも余分にあげておきました。参考になるかと思います。

アフィン変換と透視投影
http://nis-lab.is.s.u-tokyo.ac.jp/nis/CG/cgtxt/index2.htm
http://www.geocities.co.jp/Hollywood/5174/td.html
http://www-antenna.ee.titech.ac.jp/~hira/hobby/edu/afin_trans/math_html/index.html
http://hawk.ise.chuo-u.ac.jp/makino-lab/person/itot/cg2003/cg-lecture5.pdf
http://kawanobe.rs.sanno.ac.jp/~matsunaga_y/rinkou2.pdf
http://navi.cs.kumamoto-u.ac.jp/lecture/computergrahics/2007/8.pdf

プログラムでの座標変換
http://www.saturn.dti.ne.jp/~npaka/xna/PrimitiveEx/index.html

アフィン変換と透視投影の座標変換は以下のURLに詳しく載っていると思いますので、勉強してください。
中に座標変換の式も載っていると思います。
アフィン変換や透視投影の理解に役立つようにイメージ図のあるHPも余分にあげておきました。参考になるかと思います。

アフィン変換と透視投影
http://nis-lab.is.s.u-tokyo.ac.jp/nis/CG/cgtxt/index2.htm
http://www.geocities.co.jp/Hollywood/5174/td.html
http://www-antenna.ee.titech.ac.jp/~hira/hobby/edu/afin_trans/math_html/index.html
http:/...続きを読む

Q距離が離れると小さくなる計算方法を教えて下さい。

平面の板に、全て同じサイズの四角い紙を貼り付けています。
その四角い紙のサイズを変える事で、
まるで現実(肉眼で見た時)のような距離感が生まれる様に
したいのですが、
どう計算すれば大まかに適切なサイズになるでしょうか?

(もしよろしければ、一辺30cmの紙の
 10cmの距離、1mの距離、5mの距離、20mの距離
 のサイズを求めて頂けますと幸いです。)

Aベストアンサー

こんにちは。

一つの正方形を考えるとき、
・視点から正方形までの本当の距離を Da
・正方形の本当の一辺の長さを La
・視点から見かけ上遠くにある正方形までの嘘の距離を Db
・視点から見かけ上遠くにある正方形の嘘の一辺の長さを Lb
と置きます。

視角をθとすると、

tanθ = La/Da = Lb/Db

求める一辺の長さ = La = Lb・Da/Db

というわけで、板までの距離(Da)も、想定する距離(Db)も、視点(立ち位置)からの距離でないとダメです。
(遠近法を用いた絵画がそうなっているかどうかは知りませんが。)

>>>(もしよろしければ、一辺30cmの紙の
>>> 10cmの距離、1mの距離、5mの距離、20mの距離
>>> のサイズを求めて頂けますと幸いです。)

人間の目は、メートルではなく角度の単位で大きさを感知します。

Qエクセルで計算すると2.43E-19などと表示される。Eとは何ですか?

よろしくお願いします。
エクセルの回帰分析をすると有意水準で2.43E-19などと表示されますが
Eとは何でしょうか?

また、回帰分析の数字の意味が良く分からないのですが、
皆さんは独学されましたか?それとも講座などをうけたのでしょうか?

回帰分析でR2(決定係数)しかみていないのですが
どうすれば回帰分析が分かるようになるのでしょうか?
本を読んだのですがいまいち難しくて分かりません。
教えてください。
よろしくお願いします。

Aベストアンサー

★回答
・最初に『回帰分析』をここで説明するのは少し大変なので『E』のみ説明します。
・回答者 No.1 ~ No.3 さんと同じく『指数表記』の『Exponent』ですよ。
・『指数』って分かりますか?
・10→1.0E+1(1.0×10の1乗)→×10倍
・100→1.0E+2(1.0×10の2乗)→×100倍
・1000→1.0E+3(1.0×10の3乗)→×1000倍
・0.1→1.0E-1(1.0×1/10の1乗)→×1/10倍→÷10
・0.01→1.0E-2(1.0×1/10の2乗)→×1/100倍→÷100
・0.001→1.0E-3(1.0×1/10の3乗)→×1/1000倍→÷1000
・になります。ようするに 10 を n 乗すると元の数字になるための指数表記のことですよ。
・よって、『2.43E-19』とは?
 2.43×1/(10の19乗)で、
 2.43×1/10000000000000000000となり、
 2.43×0.0000000000000000001だから、
 0.000000000000000000243という数値を意味します。

補足:
・E+数値は 10、100、1000 という大きい数を表します。
・E-数値は 0.1、0.01、0.001 という小さい数を表します。
・数学では『2.43×10』の次に、小さい数字で上に『19』と表示します。→http://ja.wikipedia.org/wiki/%E6%8C%87%E6%95%B0%E8%A1%A8%E8%A8%98
・最後に『回帰分析』とは何?下の『参考URL』をどうぞ。→『数学』カテゴリで質問してみては?

参考URL:http://ja.wikipedia.org/wiki/%E5%9B%9E%E5%B8%B0%E5%88%86%E6%9E%90

★回答
・最初に『回帰分析』をここで説明するのは少し大変なので『E』のみ説明します。
・回答者 No.1 ~ No.3 さんと同じく『指数表記』の『Exponent』ですよ。
・『指数』って分かりますか?
・10→1.0E+1(1.0×10の1乗)→×10倍
・100→1.0E+2(1.0×10の2乗)→×100倍
・1000→1.0E+3(1.0×10の3乗)→×1000倍
・0.1→1.0E-1(1.0×1/10の1乗)→×1/10倍→÷10
・0.01→1.0E-2(1.0×1/10の2乗)→×1/100倍→÷100
・0.001→1.0E-3(1.0×1/10の3乗)→×1/1000倍→÷1000
・になります。ようするに 10 を n 乗すると元の数字になるた...続きを読む

Qエクセル STDEVとSTDEVPの違い

エクセルの統計関数で標準偏差を求める時、STDEVとSTDEVPがあります。両者の違いが良くわかりません。
宜しかったら、恐縮ですが、以下の具体例で、『噛み砕いて』教えて下さい。
(例)
セルA1~A13に1~13の数字を入力、平均値=7、STDEVでは3.89444、STDEVPでは3.741657となります。
また、平均値7と各数字の差を取り、それを2乗し、総和を取る(182)、これをデータの個数13で割る(14)、この平方根を取ると3.741657となります。
では、STDEVとSTDEVPの違いは何なのでしょうか?統計のことは疎く、お手数ですが、サルにもわかるようご教授頂きたく、お願い致します。

Aベストアンサー

データが母集団そのものからとったか、標本データかで違います。また母集団そのものだったとしても(例えばクラス全員というような)、その背景にさらならる母集団(例えば学年全体)を想定して比較するような時もありますので、その場合は標本となります。
で標本データの時はSTDEVを使って、母集団の時はSTDEVPをつかうことになります。
公式の違いは分母がn-1(STDEV)かn(STDEVP)かの違いしかありません。まぁ感覚的に理解するなら、分母がn-1になるということはそれだけ結果が大きくなるわけで、つまりそれだけのりしろを多くもって推測に当たるというようなことになります。
AとBの違いがあるかないかという推測をする時、通常は標本同士の検証になるわけですので、偏差を余裕をもってわざとちょっと大きめに見るということで、それだけ確証の度合いを上げるというわけです。

Qファイルやディレクトリの存在確認を行う方法

ファイルをオープンするのはfopenでOKですが、ファイルやディレクトリの存在確認を行う方法が知りたいです。

何か組み合わせて作るものなのでしょうか?
perlとか便利な演算子があるのですが、C/C++って器用ではないですね。
これは処理系?依存の内容ですか?

私の環境は VC6, VC2005 Windows2000です。

Aベストアンサー

int access(const char* path, int mode);
int stat(const char* path, struct stat* sb);

かな?
MSDN を引くと _access_s() を使えとか書いてあるけど。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング