3

こんにちは、次の画像の水面 (その下ではなく) の泡のサイズを変更するための潜在的なアプローチについて、誰かが何か指針を提供できるかどうか疑問に思っています。可能であれば、オープン ソース ソフトウェアを使用したいと考えています (画像がマトリックスであることを考えると、私の心はオクターブに傾いています)。私は画像処理のバックグラウンドがまったくないので、どんなアイデアでも大歓迎です。明らかに出発点として、生の画像 (この画像は圧縮されたバージョン) の各ピクセルのサイズを知っているので、半径をピクセル単位で計算することは完璧です。

バブル画像

@mmgpの考えに基づいて編集

そのため、質問をより直接的にするために、Opencv のオープン ソース ライブラリを使用して @mmgp の考えを取り入れました。私はこれを以前に使用したことはありません (C または C++ で直接プログラムしたこともありませんが、私のニーズを満たすことができるように見えます。学習に時間を費やす必要があります. だからここに私がこれまでに行ったことがあります (画像処理のバックグラウンドがないため、使用した関数が理想的かどうかはわかりませんが、さらに考えることを促進する可能性があると思いました). 画像をグレースケールに変換しました, used a binary threshold and then applied a Hough Transform for circles. 各段階で生成する画像と、使用したコードを以下に示します。明らかなことは、トラッカーバーがその場でパラメーターを微調整するのに非常に役立つということです。ただし、コードにそれらを実装するのに十分なほど熟達していません(特に、微調整するパラメーターがいくつかあるハフ変換に関しては、ポインターは素晴らしいでしょう)。

それで、あなたはどう思いますか?他にどのような機能を試すことができますか? 明らかに、私の試みは@mmgpほど良くはありませんが、それは単にパラメータを微調整するだけの問題かもしれません.

写真は次のとおりです: グレースケール (完全を期すため): グレースケール画像 バイナリしきい値: グレースケール画像 円の画像: グレースケール画像

コードは次のとおりです。

 #include "opencv2/highgui/highgui.hpp"
 #include "opencv2/imgproc/imgproc.hpp"
 #include <iostream>
 #include <stdio.h>

 using namespace cv;

 /** @function main */
 int main(int argc, char** argv)
 {
 Mat src, src_gray, src_bw;

 /// Read the image
 src = imread( argv[1], 1 );

 if( !src.data )
 { return -1; }

 /// Convert it to gray
 cvtColor( src, src_gray, CV_BGR2GRAY );
 imwrite( "Gray_Image.jpg", src_gray );

 /// Threshold the image to make binary
 threshold(src_gray, src_bw, 140, 255, CV_THRESH_BINARY);
 imwrite( "Binary_Image.jpg", src_bw );

 vector<Vec3f> circles;

 /// Apply the Hough Transform to find the circles
 HoughCircles( src_bw, circles, CV_HOUGH_GRADIENT, 5, src_bw.rows/2, 5, 10, 0, 0 );

 /// Draw the circles detected
 for( size_t i = 0; i < circles.size(); i++ )
 {
 Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));
 int radius = cvRound(circles[i][2]);
 // circle center
 circle( src, center, 3, Scalar(0,255,0), -1, 8, 0 );
 // circle outline
 circle( src, center, radius, Scalar(0,0,255), 3, 8, 0 );
 }

 /// Show your results
 namedWindow( "Hough Circle Transform Demo", 0 );
 namedWindow( "Gray", 0 );
 namedWindow( "Binary Threshold", 0 );
 imshow( "Hough Circle Transform Demo", src );
 imshow( "Gray", src_gray );
 imshow( "Binary Threshold", src_bw );
 imwrite( "Circles_Image.jpg", src );
 waitKey(0);
 return 0;
 }
4

1 に答える 1

0

考慮すべき別の可能なパスは、テンプレートの一致です

典型的な泡のテンプレート画像を作成するだけです。

これは、ハフ変換によって識別される誤検知を識別するのに役立つ場合があります。

さまざまなサイズの泡を検出するには、さまざまなサイズのテンプレート イメージを使用する必要があります。

また、泡が現れる前の水の写真がある場合は、これを減算して、画像の泡のある領域を見つけることができます。

于 2013-06-14T06:09:17.370 に答える