OpenCV 4.5.3(日本語機械翻訳)
クラス | 列挙型 | 関数 | 変数
Imgproc_feature

クラス

class cv::LineSegmentDetector
線分検出器クラス[【詳解】(英語]

列挙型

enum cv::HoughModes {
cv::HOUGH_STANDARD = 0 , cv::HOUGH_PROBABILISTIC = 1 , cv::HOUGH_MULTI_SCALE = 2 , cv::HOUGH_GRADIENT = 3 ,
cv::HOUGH_GRADIENT_ALT = 4
}
ハフ変換のバリアント.[【詳解】(英語]
enum cv::LineSegmentDetectorModes { cv::LSD_REFINE_NONE = 0 , cv::LSD_REFINE_STD = 1 , cv::LSD_REFINE_ADV = 2 }
線分検出器のバリアント[【詳解】(英語]

関数

CV_EXPORTS_W Ptr< LineSegmentDetector > cv::createLineSegmentDetector (int refine=LSD_REFINE_STD, double scale=0.8, double sigma_scale=0.6, double quant=2.0, double ang_th=22.5, double log_eps=0, double density_th=0.7, int n_bins=1024)
オブジェクトへのスマート ポインタを作成し、初期化します。LineSegmentDetectorオブジェクトへのスマート・ポインタを作成し、それを初期化します。[【詳解】(英語]
CV_EXPORTS_W void cv::Canny (InputArray image, OutputArray edges, double threshold1, double threshold2, int apertureSize=3, bool L2gradient=false)
Cannyアルゴリズムを用いて,画像のエッジを検出します.[Canny86]..[【詳解】(英語]
CV_EXPORTS_W void cv::Canny (InputArray dx, InputArray dy, OutputArray edges, double threshold1, double threshold2, bool L2gradient=false)
CV_EXPORTS_W void cv::cornerMinEigenVal (InputArray src, OutputArray dst, int blockSize, int ksize=3, int borderType=BORDER_DEFAULT)
コーナー検出のために,勾配行列の最小固有値を計算します.[【詳解】(英語]
CV_EXPORTS_W void cv::cornerHarris (InputArray src, OutputArray dst, int blockSize, int ksize, double k, int borderType=BORDER_DEFAULT)
Harrisコーナー検出器.[【詳解】(英語]
CV_EXPORTS_W void cv::cornerEigenValsAndVecs (InputArray src, OutputArray dst, int blockSize, int ksize, int borderType=BORDER_DEFAULT)
コーナー検出のために,画像ブロックの固有値と固有ベクトルを計算します.[【詳解】(英語]
CV_EXPORTS_W void cv::preCornerDetect (InputArray src, OutputArray dst, int ksize, int borderType=BORDER_DEFAULT)
コーナー検出用のフィーチャーマップを計算します。[【詳解】(英語]
CV_EXPORTS_W void cv::cornerSubPix (InputArray image, InputOutputArray corners, Size winSize, Size zeroZone, TermCriteria criteria)
コーナーの位置を修正します.[【詳解】(英語]
CV_EXPORTS_W void cv::goodFeaturesToTrack (InputArray image, OutputArray corners, int maxCorners, double qualityLevel, double minDistance, InputArray mask=noArray(), int blockSize=3, bool useHarrisDetector=false, double k=0.04)
画像上の強いコーナーを検出します.[【詳解】(英語]
CV_EXPORTS_W void cv::goodFeaturesToTrack (InputArray image, OutputArray corners, int maxCorners, double qualityLevel, double minDistance, InputArray mask, int blockSize, int gradientSize, bool useHarrisDetector=false, double k=0.04)
CV_EXPORTS cv::CV_WRAP_AS (goodFeaturesToTrackWithQuality) void goodFeaturesToTrack(InputArray image
上記と同じですが,検出されたコーナーの品質指標も返されます.[【詳解】(英語]
CV_EXPORTS_W void cv::HoughLines (InputArray image, OutputArray lines, double rho, double theta, int threshold, double srn=0, double stn=0, double min_theta=0, double max_theta=CV_PI)
標準的なハフ変換を用いて,2値画像中の線を検出します.[【詳解】(英語]
CV_EXPORTS_W void cv::HoughLinesP (InputArray image, OutputArray lines, double rho, double theta, int threshold, double minLineLength=0, double maxLineGap=0)
確率的ハフ変換を用いて,2値画像中の線分を検出します.[【詳解】(英語]
CV_EXPORTS_W void cv::HoughLinesPointSet (InputArray point, OutputArray lines, int lines_max, int threshold, double min_rho, double max_rho, double rho_step, double min_theta, double max_theta, double theta_step)
標準的なハフ変換を用いて,点の集合から線を見つけます.[【詳解】(英語]
CV_EXPORTS_W void cv::HoughCircles (InputArray image, OutputArray circles, int method, double dp, double minDist, double param1=100, double param2=100, int minRadius=0, int maxRadius=0)
ハフ変換を利用して,グレースケール画像中の円を見つけます.[【詳解】(英語]

変数

CV_EXPORTS OutputArray cv::corners
CV_EXPORTS OutputArray int cv::maxCorners
CV_EXPORTS OutputArray int double cv::qualityLevel
CV_EXPORTS OutputArray int double double cv::minDistance
CV_EXPORTS OutputArray int double double InputArray cv::mask
CV_EXPORTS OutputArray int double double InputArray OutputArray cv::cornersQuality
CV_EXPORTS OutputArray int double double InputArray OutputArray int cv::blockSize = 3
CV_EXPORTS OutputArray int double double InputArray OutputArray int int cv::gradientSize = 3
CV_EXPORTS OutputArray int double double InputArray OutputArray int int bool cv::useHarrisDetector = false
CV_EXPORTS OutputArray int double double InputArray OutputArray int int bool double cv::k = 0.04)

詳解

列挙型詳解

HoughModes

ハフ変換のバリアント.

列挙値
HOUGH_STANDARD

古典的,あるいは標準的なハフ変換.すべての直線は,2つの浮動小数点数で表現されます$(\rho, \theta)$ここで$\rho$は,(0,0)点と直線との間の距離,そして$\theta$は,x軸と直線の法線との間の角度である.したがって,行列は CV_32FC2 型でなければいけません(作成されるシーケンスもそうなります).

hough_probabilistic

確率的ハフ変換(画像に数本の長い線分が含まれている場合に有効です).これは,線全体ではなく線分を返します.各セグメントは始点と終点で表現され,行列は CV_32SC4 型でなければいけません(作成されるシーケンスもそうなります).

HOH_MULTI_SCALE

古典的なHough変換のマルチスケール版.線は HOUGH_STANDARD と同じようにエンコードされます.

HOUGH_GRADIENT

基本的に21HTで記述されています。[Yuen90]を参照してください。

ハフ_グラディエント_アルト

より良い精度を得るための HOUGH_GRADIENT のバリエーションです.

LineSegmentDetectorModes

線分検出器のバリアント

列挙値
lsd_refine_none

絞り込みを行わない

LSD_REFINE_STD

標準的な細線化を行う。例えば、アーチをより小さな直線近似に分割するなど。

LSD_REFINE_ADV

高度なリファインメント。誤認識の数を計算したり、精度を上げたり、サイズを小さくしたりして線を細分化します。

関数詳解

Canny() [1/2]

CV_EXPORTS_W void cv::Canny ( InputArray dx,
InputArray dy,
OutputArray edges,
double threshold1,
double threshold2,
bool L2gradient = false
)

これはオーバーロードされたメンバ関数です。利便性のために用意されています。元の関数との違いは引き数のみです。

Cannyアルゴリズムを用いて、カスタムの画像グラデーションで画像のエッジを見つけます。

引数
dx 入力画像の16ビットx階微分(CV_16SC1 または CV_16SC3).
dy 入力画像の16ビットy階微分( dx と同型).
edges 出力エッジマップ.シングルチャンネルの8ビット画像で,画像と同じサイズです.
threshold1 ヒステリシス処理のための「第1の閾値」.
threshold2 ヒステリシス処理のための第2の閾値
L2gradient より正確な$L_2$ノルム$=\sqrt{(dI/dx)^2 + (dI/dy)^2}$より正確なノルムを使って画像のグラデーションを計算するか(L2gradient=true),あるいはデフォルトの$L_1$ノルム$=|dI/dx|+|dI/dy|$で十分なのか(L2gradient=false)を示します。

Canny() [2/2]

CV_EXPORTS_W void cv::Canny ( InputArray image,
OutputArray edges,
double threshold1,
double threshold2,
int apertureSize = 3,
bool L2gradient = false
)

Cannyアルゴリズムを用いて,画像のエッジを検出します.[Canny86]..

この関数は,Cannyアルゴリズムを用いて入力画像中のエッジを検出し,出力マップのエッジにマークします.エッジの連結には, threshold1 と threshold2 の間の最小値が利用されます.また,最大値は,強いエッジの初期セグメントを見つけるために利用されます.参照http://en.wikipedia.org/wiki/Canny_edge_detector

引数
image 8ビットの入力画像。
edges 出力エッジマップ.シングルチャンネルの8ビット画像で,画像と同じサイズです.
threshold1 ヒステリシス処理のための「第1の閾値」.
threshold2 ヒステリシス処理のための第2の閾値
apertureSize Sobel 演算子のアパーチャサイズ。
L2gradient より正確な$L_2$ノルム$=\sqrt{(dI/dx)^2 + (dI/dy)^2}$より正確なノルムを使って画像のグラデーションを計算するか(L2gradient=true),あるいはデフォルトの$L_1$ノルム$=|dI/dx|+|dI/dy|$で十分なのか(L2gradient=false)を示します。

cornerEigenValsAndVecs()

CV_EXPORTS_W void cv::cornerEigenValsAndVecs ( InputArray src,
OutputArray dst,
int blockSize,
int ksize,
int borderType = BORDER_DEFAULT
)

コーナー検出のために,画像ブロックの固有値と固有ベクトルを計算します.

各ピクセルに対して$p$関数 cornerEigenValsAndVecs は,各ピクセルに対して, blockSize$\times$ブロックサイズ近傍$S(p)$. この関数は,その近傍領域における導関数の共分散行列を次のように求めます.

\[M = \begin{bmatrix} \sum _{S(p)}(dI/dx)^2 & \sum _{S(p)}dI/dx dI/dy \\ \sum _{S(p)}dI/dx dI/dy & \sum _{S(p)}(dI/dy)^2 \end{bmatrix}\]

ここで,導関数は Sobel 演算子を用いて計算されます.

の固有ベクトルと固有値を求め,それらを出力画像に保存します.$M$の固有ベクトルと固有値を求め,それらを以下のように出力画像に格納します.$(\lambda_1, \lambda_2, x_1, y_1, x_2, y_2)$ここで

  • $\lambda_1, \lambda_2$のソートされていない固有値です.$M$
  • $x_1, y_1$に対応する固有ベクトルです.$\lambda_1$
  • $x_2, y_2$に対応する固有ベクトルです.$\lambda_2$

この関数の出力は,ロバストなエッジ検出やコーナー検出に利用できます.

引数
src 入力 シングルチャンネルの8ビットまたは浮動小数点の画像.
dst 結果を保存する画像.これは src と同じサイズで,型は CV_32FC(6) です.
blockSize ネイバーフッドサイズ(詳細は後述).
ksize Sobel演算子のアパーチャパラメータ.
borderType ピクセル外挿法.参照BorderTypes.BORDER_WRAPはサポートされていません.
参照
cornerMinEigenVal,cornerHarris,preCornerDetect

cornerHarris()

CV_EXPORTS_W void cv::cornerHarris ( InputArray src,
OutputArray dst,
int blockSize,
int ksize,
double k,
int borderType = BORDER_DEFAULT
)

Harrisコーナー検出器.

この関数は,画像に対して Harris コーナー検出器を実行します.cornerMinEigenVal や cornerEigenValsAndVecs と同様に,各ピクセルに対して$(x, y)$を計算します.$2\times2$勾配共分散行列$M^{(x,y)}$を計算します.$\texttt{blockSize} \times \texttt{blockSize}$を計算します.そして,次のような特性を計算します.

\[\texttt{dst} (x,y) = \mathrm{det} M^{(x,y)} - k \cdot \left ( \mathrm{tr} M^{(x,y)} \right )^2\]

画像のコーナーは、この応答マップの局所的な最大値として見つけることができます。

引数
src 入力 シングルチャンネルの8ビットまたは浮動小数点の画像.
dst ハリス検出器の応答を保存する画像.これは,タイプが CV_32FC1 で,サイズが src と同じです.
blockSize Neighborhood size (詳細は,以下を参照してくださいcornerEigenValsAndVecs).
ksize Sobel演算子のアパーチャパラメータ.
k Harris 検出器のフリーパラメータ.上の式を参照してください.
borderType ピクセル外挿法.参照BorderTypes.BORDER_WRAPはサポートされていません.

cornerMinEigenVal()

CV_EXPORTS_W void cv::cornerMinEigenVal ( InputArray src,
OutputArray dst,
int blockSize,
int ksize = 3,
int borderType = BORDER_DEFAULT
)

コーナー検出のために,勾配行列の最小固有値を計算します.

この関数は cornerEigenValsAndVecs と似ていますが,導関数の共分散行列の最小固有値のみを計算して保存します.$\min(\lambda_1, \lambda_2)$を, cornerEigenValsAndVecs の説明にある式で計算します.

引数
src 入力 シングルチャンネルの8ビットまたは浮動小数点の画像.
dst 最小固有値を保存するための画像.これは,型が CV_32FC1 で, src と同じサイズです.
blockSize Neighborhood size (詳細は,以下を参照してくださいcornerEigenValsAndVecs).
ksize Sobel演算子のアパーチャパラメータ.
borderType ピクセル外挿法.参照BorderTypes.BORDER_WRAPはサポートされていません.

cornerSubPix()

CV_EXPORTS_W void cv::cornerSubPix ( InputArray image,
InputOutputArray corners,
Size winSize,
Size zeroZone,
TermCriteria criteria
)

コーナーの位置を修正します.

この関数は,以下で説明するように,コーナーや半径方向のサドルポイントのサブピクセル精度の位置を求めるために繰り返し処理を行います[forstner1987fast]に記載されています.以下の図に示すように

image

サブピクセル精度のコーナーロケータは,「中心から$q$からある点$p$の近傍に位置する点$q$の近傍に位置する点への中心からのすべてのベクトルが$p$の画像グラデーションに直交するという観測に基づいています。ただし、画像ノイズや測定ノイズの影響を受けます。式を考えてみましょう。

\[\epsilon _i = {DI_{p_i}}^T \cdot (q - p_i)\]

ここで${DI_{p_i}}$は,ある点$p_i$の近傍にある点$q$. の値は$q$の値は,次のように求めます.$\epsilon_i$が最小となるような値を求めます。方程式は$\epsilon_i$をゼロに設定します。

\[\sum _i(DI_{p_i} \cdot {DI_{p_i}}^T) \cdot q - \sum _i(DI_{p_i} \cdot {DI_{p_i}}^T \cdot p_i)\]

の近傍(「探索窓」)での勾配の総和を求めます。$q$. 第一勾配項を$G$と呼び、第2勾配項を$b$となります。

\[q = G^{-1} \cdot b\]

アルゴリズムは,近傍窓の中心をこの新しい中心に設定し$q$そして,その中心が設定した閾値内に収まるまで繰り返します.

引数
image 入力画像は,シングルチャンネル,8ビットまたは浮動小数点数の画像です.
corners 入力コーナーの初期座標と,出力に提供される洗練された座標.
winSize 探索窓の辺の長さの半分.例えば,winSize=Size(5,5) の場合,検索窓が使われます.$(5*2+1) \times (5*2+1) = 11 \times 11$探索窓が使用されます。
zeroZone 探索領域の真ん中にある、下の式の合計が行われない死の領域のサイズの半分。これは,自己相関行列の特異点を避けるために使われることがあります.(-1,-1)の値は、そのようなサイズがないことを示しています。
criteria コーナー精密化の反復プロセスの終了の基準。つまり、コーナー位置の精密化のプロセスは、cliteria.maxCountの反復の後か、ある反復においてコーナー位置がcliteria.epsilonよりも小さく移動したときに停止します。

createLineSegmentDetector()

CV_EXPORTS_W Ptr< LineSegmentDetector > cv::createLineSegmentDetector ( int refine = LSD_REFINE_STD ,
double scale = 0.8,
double sigma_scale = 0.6,
double quant = 2.0,
double ang_th = 22.5,
double log_eps = 0,
double density_th = 0.7,
int n_bins = 1024
)

オブジェクトへのスマート ポインタを作成し、初期化します。LineSegmentDetectorオブジェクトへのスマート・ポインタを作成し、それを初期化します。

のクラスはスレッドセーフではありません。LineSegmentDetectorアルゴリズムは標準的な値で定義されています。上級者のみが、自分の用途に合わせて編集することができます。

引数
refine 見つかった線がどのように洗練されるかについてはLineSegmentDetectorModes
scale 線を見つけるために使用される画像のスケールです。Range(0..1].
sigma_scale ガウシアンフィルタのシグマです。これは sigma = sigma_scale/scale として計算されます。
quant 勾配ノルムの量子化誤差の境界線。
ang_th 勾配角度の許容範囲を度単位で指定します。
log_eps 検出のしきい値.-log10(NFA) > log_eps. アドバンスリファインメントが選択された場合にのみ使用されます。
density_th 囲む矩形内の整列領域点の最小密度。
n_bins 勾配係数の疑似的な順序付けにおけるビンの数。
覚え書き
オリジナルコードのライセンスの関係で,実装は削除されました

CV_WRAP_AS()

CV_EXPORTS cv::CV_WRAP_AS ( goodFeaturesToTrackWithQuality )

上記と同じですが,検出されたコーナーの品質指標も返されます.

引数
image 入力 8ビット,あるいは浮動小数点型の32ビット,シングルチャンネル画像.
corners 出力 検出されたコーナーのベクトル.
maxCorners 返すべきコーナーの最大数.検出されたコーナーよりも多くのコーナーがある場合は,その中で最も強いコーナーが返されます.maxCorners <= 0最大数の制限がなく,検出されたすべてのコーナーが返されることを意味します。
qualityLevel 画像の角の品質の最小許容値を特徴づけるパラメータ。このパラメータ値には,最適なコーナー品質指標が乗じられます.cornerMinEigenVal)またはハリス関数応答(参照cornerHarris). 品質測定値が積よりも小さいコーナーは拒否されます。例えば、ベストコーナーの品質尺度が1500で、qualityLevel=0.01の場合、品質尺度が15未満のコーナーはすべて拒否されます。
minDistance 返されたコーナー間の可能な限りの最小ユークリッド距離。
mask 関心領域。画像が空ではない場合(CV_8UC1型で,画像と同じサイズである必要があります),コーナーが検出される領域を指定します.
cornersQuality 検出されたコーナーの品質指標の出力ベクトル.
blockSize 各ピクセルの近傍領域における微分共分散行列を計算するための,平均ブロックのサイズ.cornerEigenValsAndVecs を参照してください.
gradientSize 微分の計算に使われるSobel演算子のアパーチャパラメータ.cornerEigenValsAndVecs を参照してください.
useHarrisDetector Harris検出器を利用するかどうかを示すパラメータ(参照cornerHarrisを参照),またはcornerMinEigenVal.
k Harris検出器のフリーパラメータ.

goodFeaturesToTrack()

CV_EXPORTS_W void cv::goodFeaturesToTrack ( InputArray image,
OutputArray corners,
int maxCorners,
double qualityLevel,
double minDistance,
InputArray mask = noArray(),
int blockSize = 3,
bool useHarrisDetector = false,
double k = 0.04
)

画像上の強いコーナーを検出します.

この関数は,以下で説明されているように,画像または指定された画像領域において最も目立つコーナーを見つけます.[Shi94] を参照してください.

  • を利用して,ソース画像の各ピクセルにおけるコーナー品質尺度を計算します.cornerMinEigenValまたはcornerHarris.
  • 関数は,非最大値抑圧を行います(局所的な最大値は3 x 3近傍の局所的な最大値は保持されます)。
  • 固有値の最小値が$\texttt{qualityLevel} \cdot \max_{x,y} qualityMeasureMap(x,y)$未満の最小固有値を持つコーナーは除去されます。
  • 残ったコーナーは品質指標の降順でソートされます。
  • この関数は,maxDistanceよりも小さい距離に,より強いコーナーが存在する各コーナーを捨てます.

この関数は,オブジェクトのポイントベーストラッカーを初期化するために利用できます.

覚え書き
この関数が,パラメータ qualityLevel に異なる値 A と B を指定して呼び出され,A > B となった場合, qualityLevel=A で返されるコーナーのベクトルは, qualityLevel=B で返される出力ベクトルの前置詞となります.
引数
image 入力 8ビット,あるいは浮動小数点型の32ビット,シングルチャンネル画像.
corners 出力 検出されたコーナーのベクトル.
maxCorners 返すべきコーナーの最大数.検出されたコーナーよりも多くのコーナーがある場合は,その中で最も強いコーナーが返されます.maxCorners <= 0最大数の制限がなく,検出されたすべてのコーナーが返されることを意味します。
qualityLevel 画像の角の品質の最小許容値を特徴づけるパラメータ。このパラメータ値には,最適なコーナー品質指標が乗じられます.cornerMinEigenVal)またはハリス関数応答(参照cornerHarris). 品質測定値が積よりも小さいコーナーは拒否されます。例えば、ベストコーナーの品質尺度が1500で、qualityLevel=0.01の場合、品質尺度が15未満のコーナーはすべて拒否されます。
minDistance 返されたコーナー間の可能な限りの最小ユークリッド距離。
mask 任意の関心領域.画像が空ではない場合(CV_8UC1 型で,image と同じサイズである必要があります),コーナーが検出される領域を指定します.
blockSize 各ピクセルの近傍領域における微分共分散行列を計算するための,平均ブロックのサイズ.cornerEigenValsAndVecs を参照してください.
useHarrisDetector Harris検出器を利用するかどうかを示すパラメータ(参照cornerHarrisを参照),またはcornerMinEigenVal.
k Harris検出器のフリーパラメータ.
参照
cornerMinEigenVal,cornerHarris,calcOpticalFlowPyrLK,estimateRigidTransform,

HoughCircles()

CV_EXPORTS_W void cv::HoughCircles ( InputArray image,
OutputArray circles,
int method,
double dp,
double minDist,
double param1 = 100,
double param2 = 100,
int minRadius = 0,
int maxRadius = 0
)

ハフ変換を利用して,グレースケール画像中の円を見つけます.

この関数は,ハフ変換を改良してグレースケール画像中の円を見つけます.

例: :

覚え書き
通常、この関数は円の中心をうまく検出します。しかし,正しい半径を見つけることができない場合があります.半径の範囲(minRadiusとmaxRadius)がわかっていれば,それを指定することで,この関数を補助することができます.あるいはHOUGH_GRADIENTメソッドの場合、maxRadiusを負の数に設定すると、半径検索を行わずに中心のみを返し、追加の手順で正しい半径を見つけることができます。

また、画像がすでに柔らかい場合を除き、画像を少し滑らかにすることもできます。例えばGaussianBlur()のように、7x7カーネル、1.5x1.5シグマなどでぼかすとよいでしょう。

引数
image 8ビット,シングルチャンネル,グレースケールの入力画像.
circles 見つかった円の出力ベクトル。各ベクトルは,3または4要素の浮動小数点ベクトルとして符号化される$(x, y, radius)$または$(x, y, radius, votes)$.
method 検出方法,参照HoughModes. 使用できる方法はHOUGH_GRADIENTおよびHOUGH_GRADIENT_ALT.
dp 画像の解像度に対するアキュムレータの解像度の逆数。例えば,dp=1 の場合,アキュムレータの解像度は入力画像と同じになります.dp=2 の場合、アキュムレータの幅と高さは半分になります。ではHOUGH_GRADIENT_ALTの場合、非常に小さな円を検出する必要がなければ、dp=1.5 を推奨します。
minDist 検出された円の中心間の最小距離です。この値が小さすぎると、真の円に加えて複数の隣り合う円が誤検出される可能性があります。大きすぎると、いくつかの円を見逃してしまう可能性があります。
param1 第一の手法固有のパラメータ。の場合はHOUGH_GRADIENTおよびHOUGH_GRADIENT_ALTの場合,Cannyエッジ検出器に渡される2つの閾値のうち,高い方の閾値です(低い方の閾値は2倍小さくなります)。なおHOUGH_GRADIENT_ALTScharrアルゴリズムを使って画像の微分を計算しているため、通常、閾値はより高い値になります。例えば、300、または通常の露出でコントラストの高い画像の場合に使用します。
param2 2番目の手法固有のパラメータ。の場合はHOUGH_GRADIENTの場合,検出段階での円の中心に対する累積しきい値です。この値が小さいほど、より多くの偽の円が検出される可能性があります。大きいアキュムレータ値に対応するサークルが最初に返されます。の場合、これは「完璧な」円です。HOUGH_GRADIENT_ALTアルゴリズムの場合、これは円の「完璧さ」の尺度です。これが1に近いほど、アルゴリズムは良い形の円を選択します。ほとんどの場合、0.9で十分です。小さな円をよりよく検出したい場合は、0.85や0.8、あるいはそれ以下に下げてもよいでしょう。しかし、多くの偽の円を避けるために、検索範囲[minRadius, maxRadius]を制限することも試みてください。
minRadius 最小円半径。
maxRadius 最大円半径です。<= 0の場合、画像の最大寸法を使用します。<0の場合HOUGH_GRADIENTは半径を求めずに中心を返します。HOUGH_GRADIENT_ALTは常に円の半径を計算します。
参照
fitEllipse,minEnclosingCircle

HoughLines()

CV_EXPORTS_W void cv::HoughLines ( InputArray image,
OutputArray lines,
double rho,
double theta,
int threshold,
double srn = 0,
double stn = 0,
double min_theta = 0,
double max_theta = CV_PI
)

標準的なハフ変換を用いて,2値画像中の線を検出します.

この関数は,線を検出するための標準的なハフ変換アルゴリズム,あるいは標準的なマルチスケールハフ変換アルゴリズムを実装しています.参照http://homepages.inf.ed.ac.uk/rbf/HIPR2/hough.htmを参照してください.

引数
image 8ビット,シングルチャンネルの2値入力画像.この画像は,この関数によって変更される可能性があります.
lines ラインの出力ベクトル.各線は,2要素または3要素のベクトルで表現されます$(\rho, \theta)$または$(\rho, \theta, \textrm{votes})$.$\rho$は,座標原点からの距離$(0,0)$(画像の左上隅)からの距離です.$\theta$は,ラインの回転角度をラジアンで表したものです($0 \sim \textrm{vertical line}, \pi/2 \sim \textrm{horizontal line}$).$\textrm{votes}$はアキュムレータの値です。
rho アキュムレータの距離分解能をピクセル単位で表します。
theta アキュムレータの角度分解能をラジアンで表します。
threshold Accumulatorは閾値パラメータです。十分な得票数を得た線のみが返されます ($>\texttt{threshold}$).
srn マルチスケールのハフ変換では,距離分解能 rho の除数となります.粗いアキュムレータの距離分解能は rho であり,正確なアキュムレータの分解能は rho/srn です.srn=0とstn=0の場合は,古典的なハフ変換が用いられる。それ以外の場合,これらのパラメータは両方とも正でなければならない.
stn マルチスケールハフ変換では,距離分解能θの除数である.
min_theta 標準およびマルチスケールのハフ変換において,線の有無をチェックするための最小の角度です.0 と max_theta の間でなければならない。
max_theta 標準およびマルチスケールのハフ変換では,線の有無を確認するための最大の角度を指定します.min_theta と CV_PI の間にある必要があります.

HoughLinesP()

CV_EXPORTS_W void cv::HoughLinesP ( InputArray image,
OutputArray lines,
double rho,
double theta,
int threshold,
double minLineLength = 0,
double maxLineGap = 0
)

確率的ハフ変換を用いて,2値画像中の線分を検出します.

この関数は,線を検出するための確率的ハフ変換アルゴリズムを実装しており,その説明は[Matas00] に記述されています.

以下の線検出の例を参照してください.

これは,関数のパラメータを調整した画像のサンプルです.

image

そしてこれは,確率的ハフ変換を用いた場合の上記プログラムの出力です.

image

引数
image 8ビット,シングルチャンネルの2値入力画像.この画像は,この関数によって変更される可能性があります.
lines 線の出力ベクトル.各線は,4要素のベクトル$(x_1, y_1, x_2, y_2)$ここで$(x_1,y_1)$および$(x_2, y_2)$は,検出された各線分の終点です.
rho アキュムレータの距離分解能をピクセル単位で表します。
theta アキュムレータの角度分解能をラジアンで表します。
threshold Accumulatorは閾値パラメータです。十分な得票数を得た線のみが返されます ($>\texttt{threshold}$).
minLineLength 最小の線の長さ。それより短い線分は拒否されます.
maxLineGap 同一線上の点を結ぶための点間の最大許容ギャップ。
参照
LineSegmentDetector

HoughLinesPointSet()

CV_EXPORTS_W void cv::HoughLinesPointSet ( InputArray point,
OutputArray lines,
int lines_max,
int threshold,
double min_rho,
double max_rho,
double rho_step,
double min_theta,
double max_theta,
double theta_step
)

標準的なハフ変換を用いて,点の集合から線を見つけます.

この関数は,ハフ変換を修正して点の集合から線を見つけます.

引数
point 点の入力ベクトル.各ベクトルは,Pointベクトルとしてエンコードされなければいけません$(x,y)$. 型は CV_32FC2 または CV_32SC2 でなければいけません.
lines 見つかった線の出力ベクトル.各ベクトルは, vector<Vec3d> としてエンコードされます.$(votes, rho, theta)$. votes' の値が大きいほど,ハフ(Hough)線の信頼性が高くなります.
lines_max ハフ(Hough)線の最大カウント数.
threshold Accumulatorは閾値パラメータです。十分な得票数を得た線のみが返されます ($>\texttt{threshold}$)
min_rho アキュムレータの最小距離値(ピクセル単位).
max_rho アキュムレータの最大距離の値をピクセルで表したものです。
rho_step アキュムレータの距離分解能をピクセル単位で表します。
min_theta アキュムレータの最小角度をラジアンで表した値です。
max_theta アキュムレータの最大角度をラジアンで表した値
theta_step アキュムレータの角度分解能をラジアンで表します。

preCornerDetect()

CV_EXPORTS_W void cv::preCornerDetect ( InputArray src,
OutputArray dst,
int ksize,
int borderType = BORDER_DEFAULT
)

コーナー検出用のフィーチャーマップを計算します。

この関数は,入力画像の複素空間微分関数を計算します

\[\texttt{dst} = (D_x \texttt{src} )^2 \cdot D_{yy} \texttt{src} + (D_y \texttt{src} )^2 \cdot D_{xx} \texttt{src} - 2 D_x \texttt{src} \cdot D_y \texttt{src} \cdot D_{xy} \texttt{src}\]

ここで$D_x$,$D_y$は,第1の画像導関数である.$D_{xx}$,$D_{yy}$は2次画像の微分,そして$D_{xy}$は,混合導関数です.

コーナーは,以下に示すように,関数の局所的な最大値として検出されます.

Mat corners, dilated_corners;
preCornerDetect(image, corners, 3);
// dilation with 3x3 rectangular structuring element
dilate(corners, dilated_corners, Mat(), 1);
Mat corner_mask = corners == dilated_corners;
n-dimensional dense array class
Definition: mat.hpp:802
CV_EXPORTS_W void preCornerDetect(InputArray src, OutputArray dst, int ksize, int borderType=BORDER_DEFAULT)
Calculates a feature map for corner detection.
CV_EXPORTS_W void dilate(InputArray src, OutputArray dst, InputArray kernel, Point anchor=Point(-1,-1), int iterations=1, int borderType=BORDER_CONSTANT, const Scalar &borderValue=morphologyDefaultBorderValue())
Dilates an image by using a specific structuring element.
引数
src ソースとなるシングルチャンネル8ビットの浮動小数点画像.
dst 出力画像.タイプは CV_32F で,サイズは src と同じです.
ksize Sobel のアパーチャサイズ.
borderType ピクセル外挿法.参照BorderTypes.BORDER_WRAPはサポートされていません.