web-dev-qa-db-ja.com

opencvが輪郭を見つけるために使用するアルゴリズムは何ですか?

プログラムでcv::FindContours()を使用する必要があり、その背後にあるアルゴリズムを知る必要があります。

openCVが輪郭を見つけるために使用するアルゴリズムは何ですか?

それはどのように機能しますか?

25
Milad R

documentation を読んだ場合、この関数は次のアルゴリズムを実装していると述べています。

鈴木晋一郎、阿部健二、ボーダーフォローによるデジタル化バイナリ画像のトポロジカル構造解析。 CVGIP 30 1、pp 32-46(1985)

これがどのように実装されているかを確認したい場合、OpenCVはオープンソースです。コードを読むだけでよいのです。 https://github.com/opencv/opencv/blob/master/modules/imgproc/src/contours.cpp# L1655

この質問 への回答の1つに 問題の論文 へのリンクがあります、そのリンクは無効であり、紙は有料の壁の後ろにあります。おそらくGoogleが無料のコピーを見つけるのに役立ちます。

25
fireant

2018年9月現在、この論文は Google Scholar から入手できます。それにもかかわらず、論文が削除された場合の要約は次のとおりです。

デジタル化されたバイナリイメージのトポロジ分析のために、2つの境界追跡アルゴリズムが提案されています。最初のものは、2値画像の境界間の周囲関係を決定します。外側の境界と穴の境界は、lピクセルの接続されたコンポーネントと穴にそれぞれ1対1で対応しているため、提案されたアルゴリズムはバイナリ画像の表現を生成し、そこから何らかの種類の画像を抽出できます。画像を再構築せずに機能。最初のアルゴリズムを変更した2番目のアルゴリズムは、最も外側の境界(つまり、穴で囲まれていない外側の境界)のみに従います。これらのアルゴリズムは、シーケンシャルデジタルコンピューターが使用されている場合、バイナリイメージのコンポーネントカウント、縮小、トポロジ構造解析で効果的に使用できます。

2
Kamyar