気泡がない場合(16×16ピクセルのサンプルグループで)、画像の一部を認識するように、Neural networkをトレーニングするだけです。その後、正方形が正しく認識されない場合は、水平走査線のバーストを行い、エッジの開始位置と終了位置を登録します。気泡の断面をかなり正確に決定することができます(しかし、表面の曲率を考慮に入れてボリュームを決める必要がありますが、より困難ですが)。より多くのカメラを使用する可能性がある場合は、バブルのより多くのセクションを三角形分割して、実際の音量を正確に把握することができます。気泡の大きさを知るためのもう一つのユーロスティックとして、既知の音量のスループットを使うこともできます。そのため、時間間隔内にXリットルの空気を放出し、気泡がある割合で与えられたセクションを持つ場合、さらに精度を上げてください(もちろん、プールの底にある泡がより少なくなるため、圧力を覚えておく必要があります)。
あなたが異なる品質の結果を達成するためにガウス違いやコントラストなどの単純なアルゴリズムで遊ぶことができます見ての通り。
- 左の写真では、すべての背景ノイズを簡単に削除できますが、今では気泡の一部が失われています。プール上の異なるイルミネーションを使用して、見逃した泡のエッジを再獲得することが可能です。
- 右の図では泡のエッジ全体が表示されていますが、手動で破棄する必要がある領域が増えました。
エッジ検出アルゴリズムでは、エッジに固定オフセット(畳み込み行列やラプラスなど)を追加しないアルゴリズムを使用する必要があります。これはガウス差が最も効果的だと思います。
すべての中間データを保持しておくと、アルゴリズムを簡単に検証し調整することができ、精度を向上させることができます。
EDIT:
コードは、使用ウィッヒライブラリに依存し、簡単にニューラルネットワークのためにそこに#ソリューションcはすでに存在し、ブラー(ガウス)と水平スキャンラインを実装することができます。
// Do gaussian difference
Image ComputeGaussianDifference (Image img, float r1, float r2){
Image img = img.GaussianBlur(r1);
Image img2 = img.GaussianBlur(r2);
return (img-img2).Normalize(); // make values more noticeable
}
より編集保留...その間に自分自身を文書化しますしてみてください、私はすでにあなたが仕事をやらせるのに十分なトレースを与え、あなただけの、簡単な画像処理アルゴリズムと準備ができて、ニューラルネットワークの利用の基本的な理解を必要とします。
あなたはOpenCV(またはEmgu CV for .NET ... C#)を試してみましたか?多分あなたの気泡を検出するのに十分なはずです。 –
OpenCVが必要な別のアルゴリズムを試しましたが、ライブラリのすべてのバージョンでCVを利用できます。NuGetは動作しません。 – Toster
それが役に立つなら、[挑戦](http://codegolf.stackexchange.com/questions/40831/counting-grains-of-rice)がcodegolfにありました。 [C#](http://codegolf.stackexchange.com/questions/40831/counting-grains-of-rice)の回答 – CSharpie