2016-05-19 7 views
1

私はvb.netオートフォーカスルーチンを使って画像処理を行いましたが、基本的にエッジ検出を行い、グレースケールに変換してから標準偏差を測定して画像の最も「焦点が合っている」点である。構造リストの構成方法

私はこれを多くの画像で行いました。そして、これはほぼ正規分布として出てきました。これを私の顕微鏡とステッパモーターに統合したいと思っています。

ステッピングモータの下限と上限を移動して、上記の値をライブビューで測定し、値をリストに記録するという概念です。私の場合、私が記録したい2つのものは、位置と2倍の標準偏差値です。

は、入力したリストや辞書などの方法で記録するのがよいでしょうか?

私は、これらの値のすべてを記録すると、私はそれらのいくつかの簡単な分析を行うための値を通過したいと思うので、それは私がそれから決定することができるだろうか場合

た場合平均、最小、最大など?

情報を格納する最初の試みは、私が本質的に以下を行った型付きリストにありました。

Public ZPositions As New List(Of Zfocus)  

Public Class Zfocus 
Public Position As Integer 
Public GreyStDev As Double 
End Class 

第2の方法は辞書を使用することでした。どちらの場合も、しかし

Public ZPosition As New Dictionary(Of Integer, Double) 

、私はどちらかの単一の最大位置の値を引き出すことができる方法を確認していない(例えばポジション整数)または(ソートの)にcorrosponds辞書位置値(整数)から最良のオートフォーカス位置。

第ボーナスを加え、フォーカススタッキングのためにそれらの中にいくつかの焦点情報 を有することcorrospondできる 特定の値、上記の任意postionsを引き出すことができるようになりますか?

感謝jmcilhinneyへ

+1

まず、「辞書」が実際に意味をなさないかどうかを判断することです。データが格納されたら、Positionを指定して対応するGreyStDevを取得するのが理にかなっていますか?位置の値は真のキーですか、それともデータの一部ですか?私は後者を推測している。 – jmcilhinney

+0

3つすべてに対応するLINQメソッドがあるため、平均値、最小値、および最大値の取得は簡単です。また、LINQ 'Where'メソッドを使用して3番目の問題を解決することもできます。 – jmcilhinney

+0

したがって、キーは真のキーではなく、データの一部です。彼らはいつも低調にスタートしているわけではありません。ステッパーコードでは、ステップ10021から始まりステップ19999(例として)に移動するので、辞書に縛られていない可能性があります。 – user1829564

答えて

0

ビッグおかげで、これは私の問題を解決し、御馳走を作品! 厳密に型指定されたリスト(ZFocusリスト)を使い、私は以下を行うことができました。

MaxPosition = ZPositions.First(Function(zp1) zp1.GreyStDev = ZPositions.Max(Function(zp2) zp2.GreyStDev)) 

これは(テストのように)画像の数をループオートフォーカスルーチン、位置(この場合、例えば画像番号)を格納し、輝度エッジ情報を設定することが許可され、及びで最後に、私の場合に最も良いオートフォーカスポイントを形成する最も強い強度情報を引き出す

関連する問題