16

低価格のUSB顕微鏡用のオートフォーカスシステムを設計しようとしています。私は顕微鏡のフォーカスノブを調整できる精密なPAPモーターを備えたハードウェア側を開発してきましたが、今は難しい部分にいます。

ソフトウェアの実装方法を考えていました。ハードウェアには2つのUSBポートがあります。1つは顕微鏡カメラ用で、もう1つはモーター用です。私の最初のアイデアは、顕微鏡から画像を取得し、モーターを前後に動かすことができるアプリケーションをC#で作成することです。これまでのところ、これは非常に優れています:)

今、私はオートフォーカスについて少し助けが必要です、それをどのように実装するのですか?これに適したアルゴリズムはありますか?それとも、私の仕事に役立つ画像処理ライブラリですか?

私はグーグルをしていますが、成功しませんでした...助け/アイデア/推奨事項をいただければ幸いです。

どうもありがとう :)

編集:あなたの答えをありがとうみんな、私はすべてのオプションを試して、結果(または多分もっと質問)でここに戻ります。

4

4 に答える 4

8

最も重要な部分は、画像の焦点がどれだけずれているかを示すコードです。焦点が合っていない画像は高周波データを失うため、次のようなことを試してみます。

long CalculateFocusQuality(byte[,] pixels)
{
  long sum = 0;
  for(int y = 0; y<height-1; y++)
    for(int x=0; x<width-1; x++)
    {
      sum += Square(pixels[x+1, y] - pixels[x, y]);
      sum += Square(pixels[x, y] - pixels[x, y+1]);
    }
  return sum;
}

int Square(int x)
{
  return x*x;
}

画像にノイズがある場合、このアルゴリズムはうまく機能しません。その場合、ダウンサンプリングするか、より複雑なアルゴリズムを使用できます。

または別のアイデアは、ピクセル値の変動を計算することです:

long CalculateFocusQuality(byte[,] pixels)
{
  long sum = 0;
  long sumOfSquares = 0;
  for(int y=0; y<height; y++)
    for(int x=0; x<width; x++)
    {
      byte pixel=pixels[x,y];
      sum+=pixel;
      sumofSquares+=pixel*pixel;
    }
  return sumOfSquares*width*height - sum*sum;
}

これらの関数は単色画像で機能します。RGB 画像はチャネルの値を合計するだけです。

この関数を使用して、最大化しようとするフォーカスを変更しますCalculateFocusQuality。連続して数回試行して品質が向上した場合はステップサイズを増やし、ステップによって品質が低下した場合はそれを減らして方向を逆にします。

于 2010-11-19T12:22:48.427 に答える
7

顕微鏡のオートフォーカスは、光学研究における長年のトピックです。
関連するアルゴリズムについては、こちらで少し学ぶことができます。

問題は、デフォーカスを測定する方法だけでなく、最適な方法で光軸を移動する方法と、残留収差をアルゴリズムで補正する方法です。

チッ!

于 2010-11-19T12:39:28.293 に答える
1

同様のタスクを解決しようとした私の経験のほんの一部です。私のシステムでは、200倍のマグニフィカチンが使用されています。Z方向0.001umのステッパーレゾルチン。

私が直面した問題:-揺れ。理論的に良い位置の画像は、突然揺れるため、より悪く評価される可能性があります。私のシステムのAPIでは、z-axixを移動して画像を並列に作成することができなかったため、段階的に移動して順次キャプチャする必要がありました。それぞれの移動停止は揺れを引き起こしました。興味深いことに、上に移動するよりも下に移動する方が揺れが激しくなりました。

-機械的な不正確さ。コントローラのステッパーの位置が機械的な位置と同じでない場合があるため、スキャンを実行して理論的に最適な位置に移動すると、エラーが発生する可能性があります。

-露出:アプリケーションによっては、画像の明るさが異なる場合があるため、露出を調整する必要があります。焦点評価アルゴリズム(明るさが計算に含まれるかどうかに関係なく)によっては、露出を固定する必要がある場合があります。その結果、鶏が先か卵が先かという問題が発生します。画像の明るさが不明な場合は露出を設定する方法、必要な露出が不明な場合は焦点を合わせる方法です。

最後に、機械的な問題を回避するために、フォーカス中に見つかった最良の画像を(再)保存し、最後に返しました。フォーカス値のアルゴリズムに関しては、色の総数(ヒストグラムの幅)と組み合わされたエッジを探すのが最善でした。しかし、原因は、処理する画像の種類によって異なります。

よろしく、バレンティンハイニッツ

于 2012-05-29T17:32:57.337 に答える
0

ウィキペディアに情報がありました

技術的には、ハイパスフィルターと、フィルター出力が最大になるポイントの周りでレンズを良心的に動かすシステムとして実装できます。デジタル処理不要

また、「オートフォーカスアルゴリズム」についてグーグルから取得した最初の6つの一致のうち5つは、関連性のある有用な情報を持っているようです(ただし、1つまたは2つのケースでは、論文の完全な詳細には支払いが必要です)

于 2010-11-19T12:20:27.187 に答える