OpenCVの開発ノート(37%):あなたのエッジ検出とエッジ検出(簡単なイラスト+ +プログラムのソースコードを理解するために)キャニー演算子の理解脂肪赤深さ8分

テキストは、元の記事がある場合は、許可なしに複製してはならない
オリジナルのブロガーのブログのアドレスの:https://blog.csdn.net/qq21497936
元ブロガーがナビゲーションブログ:https://blog.csdn.net/qq21497936/article/details / 102 478 062
この記事のブログのアドレス:https://blog.csdn.net/qq21497936/article/details/105237807
あなたの読者は、貧しい人間の知識と無限、または需要の変化を持っている、または専門家、あるいは自分自身の研究を見つけます

ディレクトリ

序文

これは、アルゴリズムの概念を指します

デモ

エッジ検出

アウトライン

通常、エッジ検出ステップ

最初のステップ:フィルタリング(ノイズ除去)

ステップ2:強化(拡張エッジ特性)

第三段階:検出

エッジ検出オペレータ

キャニーエッジ検出オペレータ

アウトライン

原則

最初のステップ:ノイズ除去

ステップ2:勾配の大きさと方向を算出

第三段階:非極大抑制。

ステップ4:ヒステリシスしきい値

キャニー検出機能プロトタイプ

ソースデモ

プロジェクトテンプレート:バージョン番号v1.32.0に対応


OpenCVの開発ボックス

 

    OpenCVの開発ノート(37%):あなたのエッジ検出とエッジ検出(簡単なイラスト+ +プログラムのソースコードを理解するために)キャニー演算子の理解脂肪赤深さ8分

 

 

序文

      なるように赤い太った男!

      この章では、コンテンツのいくつかの側面は、画像処理、画像認識に近いエッジを検出した説明から始まります。

      いくつかの画像の最適化の後に、実際に、そのようなビザとして、(マットに類似する)処理のために積層することができ、それは上記背景、テーブルフレーム、画像、シールに分割され、プロセス全体が考え、それはシールコート認識されています以上の処理は、それがより正確です。

 

これは、アルゴリズムの概念を指します

      アルゴリズムは密接に特定の個人に関連して、アルゴリズムの性質は、基本的な操作(同様のソフトウェアAPI)ですが、どのように基本的な操作の組み合わせ、シーンに応じた動作の基本的な操作のいくつかの追加の最適化の外側を行う方法、それは人々が考える方法ですそしてそこに固定なしているルーチンは(相対的に言ってソフトウェアを直接開発することができ、ビジネスに基づいています)、この部分はコード、おそらく何千ものターゲット効果を達成するために、数年数ヶ月の可能なアルゴリズムを研究するためのアルゴリズムの試みの効果を研究するために多くの時間を費やす必要があります数百行は、その行の数万人があるかもしれません。

 

デモ

 

エッジ検出

アウトライン

      エッジ検出は有意データの量が減少し、それは、画像の重要な構造的属性を保持して、無関係な情報を除去することができます。クラスとゼロクロスに基づいて、クラスを探す:エッジ検出のための多くの方法は、それらのほとんどは、2つのカテゴリに分けることができ、があります。画像の一次導関数の最大値と最小値を見つけることによって、ルックアップに基づいて境界を検出する方法は、通常、最大勾配の方向の境界に位置しています。二次導関数のゼロ交差、通常ゼロ交差またはゼロ交差ラプラシアン非線形差分表現を探すことによって画像に基づいて、境界のゼロ交差を見つける方法。

通常、エッジ検出ステップ

最初のステップ:フィルタリング(ノイズ除去)

      画像の特性に応じてフィルタリングを行い、特定の実際の状況、フィルタリングアルゴリズムを使用するフィルタリングを必要とします。

      フロントアルゴリズムをフィルタリング説明している:ブロックフィルタリング平均フィルタリングガウシアンフィルタリングメディアンフィルタリングバイラテラルフィルタリング特定の周波数のような、高周波数の異なる状態、低周波のフィルタリングのため。

特別な注意、ゴマ油スペックルノイズ高周波ノイズ人気話す、特定の範囲内の低周波ノイズは、勾配の変化を指し、このような点ではなく、速度を変化させ、内部のパッチが同じで、次に勾配通常の画像である0、いずれも低周波、高周波、フィルタを強制的に増加する余裕がない濾過されるが、一緒に部分を保持する必要性の直接の結果も除外されます。

ステップ2:強化(拡張エッジ特性)

      エッジが強調アルゴリズム勾配値の大部分(変化の度合い)が出てくるので、通常の状況下での一般的な背景と前景境界領域の縁、その傾き値(変化の度合い)であるを使用して、より顕著であるように、エッジ強調特性は、エッジを強調することです大きな(特別な場合:いくつかのローカル統合または同様の状況の背景色)。

      説明するために、上記、勾配相関アルゴリズムを達成するために、相関アルゴリズムへの勾配値と、上記からのものである:拡張腐食開動作閉動作形態学的勾配トップキャップ(帽子)ブラックハット

第三段階:検出

      画像強調後、勾配の値は、まだ点の比較的多くが、ああ、およびアプリケーションでは、これらの点がエッジ点ではないので、この場合には、再度フィルタリング操作を実行する存在することがわかります。一般的に使用される方法は閾値です。

      上記の説明に関連した閾値化アルゴリズムは、次のとおりです。しきい値適応閾値古典しきい値アルゴリズム大津デュアルしきい値しきい値の半分、また拡張アルゴリズム拡散水が満たされました

エッジ検出オペレータ

      エッジ検出オペレータは、次いで、に進み、エッジ検出オペレータを使用して、いくつかのフィルタリング、強調、ノイズ除去に自分自身をすることができる、直接使用することができる方法の3つのステップを検出既に良いパッケージフィルタリング、強調に基づくエッジ検出オペレータ、あります息子は、その後、効果が良くなります。

 

キャニーエッジ検出オペレータ

アウトライン

      キャニーエッジ検出オペレータマルチレベルのエッジ検出アルゴリズムを開発ジョンF.Canny 1986です。

      キャニーの目標は、最適なエッジ検出アルゴリズムを見つけることです。

  • 低エラーレート:できるだけ識別実際のエッジ、できるだけノイズが生成されるような誤警報を低減しつつ、
  • 高い位置決め:できるだけ近く実際のエッジ画像で識別されるエッジ。
  • 最小応答:画像内のエッジが一度だけ識別することができ、画像ノイズがエッジとしてそこに表されなくてもよいです。

キャニーアルゴリズムは、時間と効果的な計算アルゴリズムに影響を与える調整可能なパラメータの数を、含まれています。

ガウスフィルタのサイズ:最初のステップは、すべての平滑化フィルタは、直接キャニーアルゴリズムの結果に影響を与えます。ぼかしフィルタは小さく、それほどそれが小さい、細い線有意な変化を検出することができることを作り出します。ぼかしフィルタは、より大きな、特定のポイントの画像色値に大きく、大きいコーティング領域で生成します。この結果は、エッジ虹のような大きな、滑らかなエッジの検出のためのより多く有用です。

デュアルしきい値2つの閾値が閾値よりも柔軟に使用されるが、それはまだ一般的な問題の閾値です。しきい値は、それが重要な情報を見逃すことが、あまりにも高く設定され、しきい値が低すぎる、マイナーは非常に重要な情報が表示されます。すべてのしきい値のための一般的な画像を提供するのが難しいです。

原則

      キャニーエッジ検出は、4つのステップに分けられます。

最初のステップ:ノイズ除去

       使用ガウシアンフィルタリング、サイズ= 5 ガウシアンフィルタのフィルタリング:

ステップ2:勾配の大きさと方向を算出

      動作させるための手順に従って、ソーベルフィルタ。

      パイルアレイを使用して第1の畳み込みは、x及びy方向に印加されます。

      式の勾配の大きさと方向を使用して計算:

      大きさは、一般に、4つの可能な角度のいずれかを取る勾配:0°、45°、90°、135°です。

第三段階:非極大抑制。

      それらは候補エッジとしては、さらに、非エッジ画素を除外一部のみ細かい線を保持します。

ステップ4:ヒステリシスしきい値

      ヒステリシスしきい値は、二つの閾値が必要です。高しきい値と地獄を。

  • 特定の画素位置の大きさが高しきい値を超えた場合、画素は、左エッジ画素です。
  • 特定の画素位置の大きさが高閾値未満である場合、ピクセルは除外されます。
  • もし二つの閾値の間にある画素位置の大きさ、高しきい値以上の画素に結合された画素のみが保持されます。

キャニー検出機能プロトタイプ

void Canny( InputArray image,
          OutputArray edges,
          double threshold1,
          double threshold2,
          int apertureSize = 3,
          bool L2gradient = false );
  • パラメータ:画像のInputArray種類、一般CV ::マットは、単一チャネル型でなければなりません。
  • 二つのパラメータ: outputArrayタイプエッジ、出力端の図エッジ、単一チャネルの8ビット画像は、入力画像が同じ大きさです。
  • 三つのパラメータ:ダブルタイプTHRESHOLD1、時間遅延と第一の閾値。
  • 四つのパラメータ: threshold2に、時間遅延double型を有する第二の閾値。
  • 5つのパラメータ: int型apertureSize、ソーベル演算子の細孔サイズの量、デフォルトは3です。
  • 6つのパラメータ: BOOLタイプL2gradient、操作の計算勾配の大きさは、デフォルトではfalseです。
void Canny( InputArray dx,
          InputArray dy,
          OutputArray edges,
          double threshold1,
          double threshold2,
          bool L2gradient = false );
  • パラメータ: InputArray型SRC、一般CV ::マット、タイプまたは必須のCV_16SC1 CV_16SC3。
  • 二つのパラメータ: outputArray型DST;サイズや種類などSRC;
  • 三つのパラメータ:出力エッジ画像のエッジ、同じ単一チャネルの8ビットの画像、画像サイズ。
  • 四つのパラメータ:ダブルTHRESHOLD1タイプ、時間遅延を有する第一の閾値(注:比率は、好ましくは、閾値2 THRESHOLD1及び2:1〜3:1)
  • 5つのパラメータ: threshold2に、ダブルタイプの時間遅延と第二の閾値(注:比率は、好ましくは、閾値2 THRESHOLD1及び2:1〜3:1)
  • 6つのパラメータ: BOOLタイプL2gradient、操作の計算勾配の大きさは、デフォルトではfalseです。

 

ソースデモ

void OpenCVManager::testCanny()
{
    QString fileName1 = "E:/qtProject/openCVDemo/openCVDemo/modules/openCVManager/images/11.jpg";
    cv::Mat srcMat = cv::imread(fileName1.toStdString());

    int width = 400;
    int height = 300;

    cv::resize(srcMat, srcMat, cv::Size(width, height));

    cv::String windowName = _windowTitle.toStdString();
    cvui::init(windowName);

    cv::Mat windowMat = cv::Mat(cv::Size(srcMat.cols * 2, srcMat.rows * 2),
                                srcMat.type());

    cv::cvtColor(srcMat, srcMat, CV_BGR2GRAY);

    int threshold1 = 200;
    int threshold2 = 100;
    int apertureSize = 1;
    while(true)
    {
        windowMat = cv::Scalar(0, 0, 0);

        cv::Mat mat;
        cv::Mat dstMat;
        cv::Mat grayMat;

        // 转换为灰度图像
        // 原图先copy到左边
        cv::Mat leftMat = windowMat(cv::Range(0, srcMat.rows),
                                    cv::Range(0, srcMat.cols));
        cv::cvtColor(srcMat, grayMat, CV_GRAY2BGR);
        cv::addWeighted(leftMat, 0.0f, grayMat, 1.0f, 0.0f, leftMat);

        {
            cvui::printf(windowMat,
                         srcMat.rows * 1 + 100,
                         srcMat.cols * 0 + 20,
                         "threshold1");
            cvui::trackbar(windowMat,
                           srcMat.rows * 1 + 100,
                           srcMat.cols * 0 + 50,
                           200,
                           &threshold1,
                           0,
                           255);
            cvui::printf(windowMat,
                         srcMat.rows * 1 + 100,
                         srcMat.cols * 0 + 100, "threshold2");
            cvui::trackbar(windowMat,
                           srcMat.rows * 1 + 100,
                           srcMat.cols * 0 + 130,
                           200,
                           &threshold2,
                           0,
                           255);
            // 不能调整Sobel孔径,否则宕机
//            cvui::printf(windowMat,
//                         srcMat.rows * 1 + 100,
//                         srcMat.cols * 0 + 180, "apertureSize * 2 + 1");
//            cvui::trackbar(windowMat,
//                           srcMat.rows * 1 + 100,
//                           srcMat.cols * 0 + 210,
//                           200,
//                           &apertureSize,
//                           0,
//                           10);
            // 使用边缘检测
            cv::Canny(srcMat, dstMat, threshold1, threshold2, apertureSize * 2 + 1);
            // copy
            mat = windowMat(cv::Range(srcMat.rows * 1, srcMat.rows * 2),
                            cv::Range(srcMat.cols * 0, srcMat.cols * 1));

            cv::cvtColor(dstMat, grayMat, CV_GRAY2BGR);
            cv::addWeighted(mat, 0.0f, grayMat, 1.0f, 0.0f, mat);
        }
        // 更新
        cvui::update();
        // 显示
        cv::imshow(windowName, windowMat);
        // esc键退出
        if(cv::waitKey(25) == 27)
        {
            break;
        }
    }
}

 

プロジェクトテンプレート:バージョン番号v1.32.0に対応

      対応するバージョン番号v1.32.0

 

オリジナルのブロガーのブログのアドレス:https://blog.csdn.net/qq21497936
オリジナルのブロガーがナビゲーションブログ:https://blog.csdn.net/qq21497936/article/details/102478062を
この記事のブログのアドレス:HTTPS://ブログ.csdn.net / qq21497936 /記事/詳細/ 105237807

公開された255元の記事 ウォンの賞賛365 ビュー500 000 +

おすすめ

転載: blog.csdn.net/qq21497936/article/details/105237807