これはまさにプログラミングの問題ではありません。デジタル画像処理の一般的な問題に対するあなたのアプローチがどうなるか知りたいだけです。
たとえば、jpg形式の数本の木の画像があるとします。これらの木々の高さをどのようにして見つけますか?写真はあなたが持っている唯一の入力です。
あなたがコーディングしてはいけないアプローチを知りたいです。ですから、あなたの答えが曖昧なのか、DIPっぽくないのかは問題ではありません。
小さな修正:高さは木の実際の高さである必要はありません。高さは任意のスケールに設定できます。しかし、写真のすべてのオブジェクトに一致している必要があります。
はい、可能です。 Photogrammetry と呼ばれる業界全体について
写真測量法を使用して画像からオブジェクトのサイズを見つけるのは簡単です。写真測量は、写真から測定を行う科学です。そのためには、2つのことを知る必要があります。
手順は次のとおりです。
カメラのキャリブレーション
OpenCVを使用してカメラをキャリブレーションします。OpenCVcalibrate.pyツールとソースコードで提供されているChessboardパターンPNGを使用して、キャリブレーションマトリックスを生成できます。カメラのキャリブレーションは、カメラのパラメーターを見つけるために行われます。私はウェブカメラでできるように(ウェブカメラを調整するために)チェス盤の写真をさまざまな角度から数十枚撮りました。詳細は openCVカメラのキャリブレーション を確認してください。
キャリブレーション行列からf_x、f_y、c_x、c_yを取得します。
撮影した写真の詳細を確認すると、写真のネイティブ解像度(heightXwidth)と、その EXIFヘッダー で焦点距離の値(f)を確認できます。これらのアイテムは、カメラによって異なる場合があります。
ピクセル/ミリメートル
イメージセンサーの1ミリメートルあたりのピクセル数(px/mm)を知る必要があります。
f_x = f * m_x
f_y = f * m_y
各式には2つの変数があるので、m_xとm_yについて解くことができます。f_xとf_yを平均してf_xyを取得します。
m = f_xy/focal_length_of_camera
画像を挿入
画像の実際のサイズを見つけるために必要な画像を挿入します。オブジェクトとカメラの間の距離を知っている必要があります。画像の寸法を見つけます(height1Xwidth1)
オブジェクトサイズをピクセル単位で検索
オブジェクトのサイズをピクセル単位で決定します。距離の式を使用して、選択した線の長さを見つけます。他の方法を採用できます。
低解像度でpx/mmを変換します
pxpermm_in_lower_resolution =(width1 * m)/ width
イメージセンサー内のオブジェクトのサイズ
size_of_object_in_image_sensor = object_size_in_pixels /(pxpermm_in_lower_resolution)
オブジェクトの実際のサイズ
オブジェクトの実際のサイズは、上記のデータから次のようにわかります。
real_size =(dist * size_of_object_in_image_sensor)/ focal_length
この分野には、かなりの量のコンピュータビジョン研究があります。カメラの制約がわからない場合は、シーンとカメラについて想定して、高さをスケールファクターまで決定する必要があります。カメラの制約や画像の参照高さがなければ、遠くから撮影した背の高い木と近くで撮影した短い木との違いを区別することは不可能であることに注意してください。素晴らしいスタートは Single View Metrology Criminisiによるものです。
それらがすべて同じ距離で、すべて縮尺どおりであると仮定すると、保証できる単一の測定単位を見つける必要があります。たとえば、写真に同じスケールの人物がいて、その人の身長が正確に6フィートであることがわかっている場合は、それを尺度として使用します。次に、それを受け取り、何枚積み上げて木を作るか数えます。たとえば、この人の3.5が必要な場合は、次のようにします。
3.5 * 6 = 21
21フィートの高い木を与えます。
すべてについて単一の参照ポイントがない場合、またはすべてが異なるスケールである場合は、そこに行かなくても簡単に取得できるよりも多くの情報が必要になります。
既知の寸法のオブジェクトが画像に存在することを前提としています。たとえば、男性。
あるいは、EXIFデータを使用して、カメラのセンサーの寸法、レンズ、使用した焦点距離に基づいてオブジェクトのサイズをリバースエンジニアリングすることもできます。これもまた角度に依存します。カメラが被写体に対して垂直に保持されている場合、最も正確な結果が得られるはずです。