現在、Opencvを用いた円検出について学んでおり、HoughCircles関数を用いて円を検出する方法までは理解したところで疑問が湧きましたので質問させていただきます。
以下リファレンスに記載されているHoughCircles関数のサンプルプログラムです。
C++
1#include <cv.h> 2#include <highgui.h> 3#include <math.h> 4 5using namespace cv; 6 7int main(int argc, char** argv) 8{ 9 Mat img, gray; 10 if( argc != 2 && !(img=imread(argv[1], 1)).data) 11 return -1; 12 cvtColor(img, gray, CV_BGR2GRAY); 13 // 平滑化を行います.これがないと誤検出が起こりやすくなります. 14 GaussianBlur( gray, gray, Size(9, 9), 2, 2 ); 15 vector<Vec3f> circles; 16 HoughCircles(gray, circles, CV_HOUGH_GRADIENT, 17 2, gray->rows/4, 200, 100 ); 18 for( size_t i = 0; i < circles.size(); i++ ) 19 { 20 Point center(cvRound(circles[i][0]), cvRound(circles[i][1])); 21 int radius = cvRound(circles[i][2]); 22 // 円の中心を描画します. 23 circle( img, center, 3, Scalar(0,255,0), -1, 8, 0 ); 24 // 円を描画します. 25 circle( img, center, radius, Scalar(0,0,255), 3, 8, 0 ); 26 } 27 namedWindow( "circles", 1 ); 28 imshow( "circles", img ); 29 return 0; 30}
C++
1void HoughCircles(Mat& image, vector<Vec3f>& circles, int method, double dp, double minDist, double param1=100, double param2=100, int minRadius=0, int maxRadius=0)¶
パラメタ:
image – 8ビット,シングルチャンネル,グレースケールの入力画像
circles – 検出された円を出力するベクトル.各ベクトルは,3要素の浮動小数点型ベクトル (x, y, radius) としてエンコードされます
method – 現在のところ, CV_HOUGH_GRADIENT メソッドのみが実装されている.基本的には 2段階ハフ変換 で,これについては Yuen90 で述べられています
dp – 画像分解能に対する投票分解能の比率の逆数.例えば, dp=1 の場合は,投票空間は入力画像と同じ分解能をもちます.また dp=2 の場合は,投票空間の幅と高さは半分になります
minDist – 検出される円の中心同士の最小距離.このパラメータが小さすぎると,正しい円の周辺に別の円が複数誤って検出されることになります.逆に大きすぎると,検出できない円がでてくる可能性があります
param1 – 手法依存の1番目のパラメータ. CV_HOUGH_GRADIENT の場合は, Canny() エッジ検出器に渡される2つの閾値の内,大きい方の閾値を表します(小さい閾値は,この値の半分になります)
param2 – 手法依存の2番目のパラメータ. CV_HOUGH_GRADIENT の場合は,円の中心を検出する際の投票数の閾値を表します.これが小さくなるほど,より多くの誤検出が起こる可能性があります.より多くの投票を獲得した円が,最初に出力されます
minRadius – 円の半径の最小値
maxRadius – 円の半径の最大値
以上がリファレンスにあります、HoughCircles関数のパラメータですが、
質問1 : 検出時の投票数を取り出すには、どのような処理が必要でしょうか?
質問2 : 関数の出力としてvectorコンテナにx,y,半径の3要素のベクトルが出力されますが、この出力される順番は何かの規則に則っているものなのでしょうか?(例えば検出時の投票数の多い順など?)
冗長な質問で申し訳ありませんが、回答よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/08/06 09:43