ある時点で質問を変更したかどうかはわかりませんが、私の最初の回答は、あなたが望むものに対して非常に複雑です。あなたはおそらくもっと簡単なことをすることができます。
1) 長くて複雑な解決策 (より一般的な問題)
まず、オブジェクトのサイズを知る必要があります。
コンピュータビジョンアルゴリズムを見ることができます。オブジェクト(その寸法と形状)を知っている場合。あなたの主な問題は、ポーズ推定の問題です(つまり、カメラに対するオブジェクトの位置を見つけることです)。これから距離を見つけることができます。[1] [2] を参照するか (たとえば、興味がある場合は他の記事を見つけることができます)、POSIT、SoftPOSIT で検索できます。この問題を最適化問題として定式化できます。実際の画像と期待される画像 (推定された姿勢が与えられた場合のオブジェクトの投影) の間の「差」を最小限に抑えるために、姿勢を見つけます。通常、この差は、各イメージ ポイント Ni と、現在のパラメータの対応するオブジェクト (3D) ポイント Mi の投影 P(Mi) との間の (二乗) 距離の合計です。
ここから距離を抽出できます。
このためには、カメラを調整する必要があります (大まかに言うと、ピクセル位置と視野角の関係を見つけます)。
これらすべてを自分でコーディングしたくない場合は、OpenCV、Gandalf [3] などのコンピューター ビジョン ライブラリを使用できます。
ここで、もっと単純な (そしておおよその) ことをしたいと思うかもしれません。カメラから同じ「深さ」(Z) にある 2 点間の画像距離を見つけることができる場合、次の式で画像距離 d を実際の距離 D に関連付けることができます。焦点距離に関連するカメラ、カメラのキャリブレーションを使用して見つけることができるピクセル数)
2)短い解決策(単純な問題の場合)
しかし、ここに(単純で短い)答えがあります:「カメラ平面」に平行な平面(つまり、カメラに完全に面している)で写真を撮る場合は、次を使用できます:
PH = a AH / Z
PW = a AW / Z
ここで、Z は画像の平面の深さであり、a はカメラの固有パラメーターです。
参考までに、ピンホール カメラ モデルは、画像座標 m=(u,v) を世界座標 M=(X,Y,Z) に次のように関連付けます。
m ~ K M
[u] [ au as u0 ] [X]
[v] ~ [ av v0 ] [Y]
[1] [ 1 ] [Z]
[u] = [ au as ] X/Z + u0
[v] [ av ] Y/Z + v0
ここで、「~」は「比例」を意味し、K はカメラの固有パラメータの行列です。K パラメータを見つけるには、カメラのキャリブレーションを行う必要があります。ここでは、au=av=a、as=0 とします。
これらの方程式のいずれかから Z パラメータを復元できます (または両方の平均をとります)。Z パラメータは、オブジェクトからの距離 (オブジェクトのさまざまなポイントによって異なります) ではなく、オブジェクトの深さ (カメラ平面とオブジェクト平面の間の距離) であることに注意してください。とにかくそれがあなたが望むものだと思います。
[1] リニア N 点カメラ ポーズの決定、Long Quan および Zhongdan Lan
[2] カメラの姿勢を決定するための完全な線形 4 点アルゴリズム、Lihong Zhi および Jianliang Tang
[3] http://gandalf-library.sourceforge.net/