18

テスト自動化作業用の画像フォーカスアルゴリズムを開発しようとしています。私は AForge.net を使用することにしました。.net に適した成熟したシステムのように思われるからです。

残念ながら、ゼロからオートフォーカス アルゴリズムを構築するための情報を見つけることができないようです。そのため、最善を尽くしました。

イメージを取る。グレースケール エッジ アウトラインを生成するソーベル エッジ検出フィルターを適用します。ヒストグラムを生成し、標準 dev を保存します。カメラを被写体に 1 歩近づけて、別の写真を撮ります。標準開発が以前のものよりも小さい場合、私たちはより焦点を当てています。そうでなければ、写真を撮るのに最適な距離を過ぎています。

より良い方法はありますか?

更新:ちなみに、これには大きな欠陥があります。最適な焦点を過ぎると、「焦点が合った画像」の値が増え続けます距離/フォーカス値を見て放物線のような関数を期待するでしょうが、実際にはより対数的なものを取得します

更新 2: わかったので、これに戻り、調査している現在の方法には、いくつかの既知のエッジが与えられています (わかりました。写真のオブジェクトが何であるかを正確に知っています)。手動でピクセル強度を比較します。結果のグラフが急勾配になるにつれて、私はより焦点を当てます。コア アルゴリズムが matlab から c# に移植されたら、コードを投稿します (ええ、matlab .. :S)

更新 3: 最終更新です。再びこれに戻ってきました。最終的なコードは次のようになります。

ステップ1:画像のリストから画像を取得します(焦点を合わせて100枚の写真を撮りました)

ステップ 2: フォーカスしているオブジェクトのエッジを見つけます (私の場合、常に同じ場所にある長方形のオブジェクトなので、1 つのエッジの HIGH と NARROW の長方形をトリミングします)

ステップ 3: トリミングされた画像の Horizo​​ntalIntensityStatistics (Aforge.net クラス) を取得します。

ステップ4:ヒストグラムを取得します(私の場合はグレー)

ステップ 5: ヒストグラムの値の導関数を見つける

ステップ 6: 傾斜が最大のときは、最も焦点が合っているときです。

4

7 に答える 7

10

NASA キュリオシティ マーズ ローバーで使用されている技術を見ることができます。

テクニックはこちらの記事で紹介しています

EDGETT、Kenneth S.、他。Curiosity のマーズ ハンド レンズ イメージャー (MAHLI) による調査。宇宙科学レビュー、2012、170.1-4: 259-317。

こちらから PDFとして入手できます。

記事からの引用:

7.2.2 オートフォーカス

オートフォーカスは、マーリが火星に焦点を合わせる主要な方法であると予想されています。オートフォーカス コマンドは、指定された開始モーター カウント位置に移動して画像を収集し、指定されたステップ数だけ移動して別の画像を収集し、指定されたモーターごとに指定された合計画像数に達するまでそれを続けるようにカメラに指示します。カウント増分。これらの各画像は、同じ圧縮品質係数が適用された JPEG 圧縮 (Joint Photographic Experts Group、CCITT (1993) を参照) です。圧縮された各画像のファイル サイズは、シーンの詳細の尺度であり、これは焦点の関数です (焦点の合った画像は、同じシーンのぼやけた焦点の合っていないビューよりも詳細を示します)。図 23 に示すように、カメラは JPEG ファイル サイズとモーター数の関係を判断し、隣接する 3 つの最大ファイル サイズに放物線を当てはめます。放物線の頂点は、最適なフォーカス モーター カウント位置の推定値を提供します。この決定を行った後、MAHLI はレンズ フォーカス グループを最適なモーター位置に移動し、画像を取得します。この画像が保存されると、オートフォーカス位置を決定するために使用された以前の画像は保存されません。

オートフォーカスは、MAHLI の視野全体で実行することも、調査対象のオブジェクトを含むシーンの部分に対応するサブフレームで実行することもできます。被写体の性質と MAHLI のロボット アームの位置決めにおける不確実性に関する知識に応じて、ユーザーは中心にあるオート フォーカス サブフレームを取得することを選択するか、位置決めの知識がどこにあるかを判断するのに十分な場合は、中心から外れたオート フォーカス サブフレームを選択することがあります。サブフレームを配置する必要があります。サブフレームを使用してオート フォーカスを実行することを強くお勧めします。これは通常、オート フォーカスがフル CCD に適用される場合よりも、被写体の焦点が合っているためです。さらに遠く、

以下は図 23 です。

NASA Curiosity Mars Rover のオートフォーカス

このアイデアは、この回答でも提案されました: https://stackoverflow.com/a/2173259/15485

于 2015-10-05T14:30:52.170 に答える
3

これは役に立つかもしれません。カメラのAFシステムが実際にどのように機能するか -パッシブオートフォーカス

コントラスト測定

コントラスト測定は、レンズを通してセンサー フィールド内のコントラストを測定することによって実現されます。センサーの隣接するピクセル間の強度差は、正しい画像フォーカスによって自然に増加します。これにより、最大コントラストが検出されるまで、光学系を調整することができます。この方法では、AF は実際の距離測定をまったく必要とせず、一般的に位相検出システムよりも低速です。ただし、別のセンサーを使用しないため、コントラスト検出オートフォーカスはより柔軟になり (ソフトウェアで実装されるため)、より正確になる可能性があります。これは、シャッターや反射ミラーがないビデオ カメラや民生用デジタル カメラで一般的な方法です。一部のデジタル一眼レフ (オリンパス E-420、パナソニック L10、ニコン D90、ニコン D5000、三脚モードの Nikon D300、Canon EOS 5D Mark II、Canon EOS 50D) は、ライブ ビュー モードで焦点を合わせるときにこの方法を使用します。新しい交換レンズシステムであるマイクロフォーサーズは、コントラスト測定オートフォーカスのみを使用し、位相検出システムに匹敵するパフォーマンスを提供すると言われています。

于 2010-01-27T17:03:58.263 に答える
1

ソーベルはまともな選択ですが、おそらく、いくつかの小さな代表的な領域で x 方向と y 方向の投影に対してエッジの大きさを計算することを選択します。OpenCV に基づく .NET に適した別の選択肢は、@ http://www.emgu.com/wiki/index.php/Main_Pageです。

于 2010-01-31T21:18:35.277 に答える
0

フォーカス メトリックの別のフレーバーは次のとおりです。

いくつかの画像を取得し、それらを平均化します (ノイズ リダクション)。次に、平均化された画像を FFT し、高周波数と低周波数のエネルギー比を使用します。この比率が高いほど、集中力が向上します。ツールボックスのデモ内で、Matlab デモを利用できます (平均化段階を除く)。

于 2011-09-01T05:39:40.423 に答える
0

標準偏差が最良の選択であるかどうか疑問に思います。画像が鮮明になると、ソーベル フィルター画像のエッジに明るいピクセルが含まれますが、同時に、エッジが薄くなるため、明るいピクセルが少なくなります。ソーベル画像の最大 1% のピクセル値の平均を使用してみてはいかがでしょうか?

于 2010-01-27T08:39:14.727 に答える