OpenCVの開発ノート(XVI):線形フィルタリングのための基本的なアルゴリズム - ガウスフィルタ

テキストは、元の記事がある場合は、許可なしに複製してはならない
オリジナルのブロガーのブログのアドレスの:https://blog.csdn.net/qq21497936
元ブロガーがナビゲーションブログ:https://blog.csdn.net/qq21497936/article/details / 102 478 062
この記事のブログのアドレス:https://blog.csdn.net/qq21497936/article/details/104490409

ディレクトリ

序文

デモ

ガウスフィルタ

アウトライン

機能

関数原型

ソースデモ

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


 

OpenCVの開発ボックス

OpenCVの開発ノート(四角):使用mingw530_32 コンパイルopenCV3.4.1のソースコード、ビルドQt5.9.3 OpenCVのの開発環境。」

" OpenCVの開発ノート():OpenCVのプレゼンテーションは、コンパイルされました "

" OpenCVの開発ノート(B):CVUIのインタフェース "

OpenCVの開発ノート(C):OpenCVのイメージコンセプトと基本的な操作。」

OpenCVの開発ノート(d)は:OpenCVの写真やビデオデータを取得し、店。」

OpenCVの開発ノート(V):OpenCVの読み出し動作カメラ

OpenCVの開発ノート(VI):OpenCVの基礎となるデータ構造、色、および色空間変換機能

OpenCVの開発ノート(7):OpenCVの基本的なグラフィックス描画します

OpenCVの開発ノート(VIII):OpenCVの一般的な操作のタイミング、スケーリング、回転、ミラーリング

OpenCVの開発ノート(IX):OpenCVの領域画像(ROI )全体、部分混合画像

OpenCVの開発ノート10):OpenCVの画像色チャネル分離画像の色と、マルチチャンネルミキシング

" OpenCVの開発ノート(XI):OpenCVのコンパイルのサポートGPU(CUDA)が勝利-QT-MINGW32の開発加速コンパイラを。"

" OpenCVの開発ノート(XII):OpenCVのコンパイルのサポートGPU(CUDA)WIN-QT-msvc2015の開発加速するコンパイラ(opencv3.4.0 、cuda9.0 、VS2015)を "

OpenCVの開発ノート(XIII):OpenCVの画像のコントラスト、明るさ調整

OpenCVの開発ノート(XIV):線形フィルタリングのための基本的なアルゴリズム- ブロックフィルタ

OpenCVの開発ノート(XV):リニアフィルタリングアルゴリズムの基礎- 平均値フィルタ

OpenCVの開発ノート(XVI):線形フィルタリングのための基本的なアルゴリズム- ガウスフィルタ

OpenCVの開発ノート(17):線形フィルタリングアルゴリズムとの比較のための基礎- ブロック、平均、ガウス

OpenCVの開発ノート(XVIII):非線形フィルタリングアルゴリズムの基礎- メディアンフィルタリング

OpenCVの開発ノート(XIX):非線形フィルタリングアルゴリズムに基づい-バイラテラルフィルタリング

「OpenCVの開発ノート(XX):アルゴリズムの比較のための非線形フィルタリングの基礎 - バイラテラルフィルタリングの値」:解放されます

「OpenCVの開発ノート(XXI):形態学的フィルタリングアルゴリズムの基礎 - インフレ」:解放されます

「OpenCVの開発ノート(XXII):形態学的フィルタリングアルゴリズムの基礎 - 腐食」:解放されます

「OpenCVの開発ノート(XXIII):形態学的フィルタリングアルゴリズムの基礎 - (腐食の最初の拡張後)オープン操作」:公開されます

「OpenCVの開発ノート(24):形態学的フィルタリングアルゴリズムの基礎 - (腐食の最初の拡張後)開閉動作」:公開されます

「OpenCVの開発ノート(XXV):形態学的フィルタリングアルゴリズムの基礎 - 白い帽子」:解放されます

「OpenCVの開発ノート(26):形態学的フィルタリングアルゴリズムの基礎 - ブラックハット」:解放されます

サプリメントを続けて...

 

    OpenCVの開発ノート(XVI):線形フィルタリングのための基本的なアルゴリズム - ガウスフィルタ

 

序文

この章では、ガウスフィルタと線形フィルタリングを説明します。

 

デモ

 

ガウスフィルタ

アウトライン

      ガウシアンフィルタは、ガウシアンカーネル酸で畳み込まれた各画素アレイに入力され、画素値として畳み込み出力されます。画像が平滑化された後にガウシアンフィルタ処理は標準偏差に依存します。

      中央より高い重量から近い画素ながら、ガウシアンフィルタの出力は、当項目の加重平均であり、従って、平均値フィルタに対して、より穏やか平滑化およびエッジ保存も優れていたです。

画像処理では、ガウシアンフィルタは、一般に、2つの方法で実装されています。

  • ウィンドウ離散畳み込み窓スライディング:スライディングウィンドウで計算の非常に大きな量(すなわち、実施分離フィルタを使用して)非常に大きい場合離散ウィンドウが、実装は、フーリエ変換に基づいて考えることができます。
  • フーリエ変換します。

機能

      ガウスフィルタは、次のように最も有用なフィルタのフィルタ特性は次のとおりです。

  • より少ない歪み:単一値関数、ガウス関数、ガウスフィールドピクセル加重平均ストアの値の代わりに画素で、画素は歪みを低減するために、重量単調距離と共に変化します。
  • 回転対称性:ガウス関数の回転に対する抵抗を有する、ガウス平滑化成都が同じである各方向において、滑らかな性能が任意の方向に付勢されていないことを確認し、指向性ノイズの存在を推定することは困難です。
  • 周波数に影響を与えない:フーリエ変換ガウス関数の変換、ガウスフィルタは、所望信号の大部分を保持しながら、平滑化画像は、不要な高周波信号の影響を受けないで、スペクトルの単一ローブです。
  • 制御雑音パラメータ:分散の程度によって、ガウス平滑化フィルタ、σは、決定され、σは、より広い帯域、平滑化の良好度は、画像ノイズは制御可能なパラメータを備えていてもよいです。
  • 分離:二次元ガウス畳み込みは、2つのステップ、第1の画像と一次元ガウス関数を畳み込み、コンボリューション結果と同一の一次元ガウス関数の畳み込みに垂直な方向に行うことができます。

関数原型

void GaussianBlur( InputArray src, 
                OutputArray dst,
                Size ksize, 
                double sigmaX,
                double sigmaY = 0,
                int borderType = BORDER_DEFAULT );
  • パラメータ:InputArrayは一般CV ::マットを入力し、画像チャネルの任意の数を扱うことができます。ノートは、しかしながら、画像の深さとして扱われるべきCV_8U 、CV_16U 、CV_16S 、CV_32F 、CV_64Fの一つ。
  • パラメータ二 ; OutputArrayタイプ、出力対象画像は、元画像を必要とし、同じサイズと種類を持っています。
  • 三つのパラメータ:サイズタイプksize、サブアカウントのサイズ。一般的な使用サイズ(H、W)、サブ会計で表される3×3サイズにサブ占め、サイズ(3,3)の大きさを示すwとhは、異なるサイズであってもよいし。
  • 四つのパラメータ:double型SIGMAXは、X方向のガウスカーネル関数の標準偏差を表します。
  • 5つのパラメータ:double型sigmaYは、Y方向のガウスカーネル関数の標準偏差を表します。

上記、SIGMAXとsigmaYが0のとき、サブアカウントを使用して計算デフォルト:

  • 6つのパラメータ:int型のborderType、外部の境界画素の特定の画像のモードを推測すると、デフォルトでは一般的に使用せず、BORDER_DEFULAT値。

 

ソースデモ

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

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

    if(!srcMat.data)
    {
        qDebug() << __FILE__ << __LINE__
                 << "Failed to load image:" << fileName1;
        return;
    }

    cv::Mat dstMat;
    dstMat = cv::Mat::zeros(srcMat.size(), srcMat.type());
    cv::Mat windowMat = cv::Mat(cv::Size(dstMat.cols * 3, dstMat.rows),
                                srcMat.type());
    int ksize = 1;      // 核心大小
    int sigmaX = 0;  // x方向的标准偏差
    int sigmaY = 0;  // y方向的标准偏差
    cvui::window(windowMat, dstMat.cols, 0, dstMat.cols, dstMat.rows, "settings");
    while(true)
    {
        windowMat = cv::Scalar(0, 0, 0);
        // 原图先copy到左边
        cv::Mat leftMat = windowMat(cv::Range(0, srcMat.rows),
                                    cv::Range(0, srcMat.cols));
        cv::addWeighted(leftMat, 1.0f, srcMat, 1.0f, 0.0f, leftMat);
        // 中间为调整滤波参数的相关设置
        cvui::printf(windowMat, 375, 20, "ksize = size *  2 + 1");
        cvui::trackbar(windowMat, 375, 30, 165, &ksize, 0, 10);

        cvui::printf(windowMat, 375, 80, "sigmaX");
        cvui::trackbar(windowMat, 375, 90, 165, &sigmaX, 0, 100);

        cvui::printf(windowMat, 375, 140, "sigmaY");
        cvui::trackbar(windowMat, 375, 150, 165, &sigmaY, 0, 100);

        // 高斯滤波
        cv::GaussianBlur(srcMat, dstMat, cv::Size(ksize * 2 + 1, ksize * 2 + 1), sigmaX / 10.f, sigmaY / 10.f);

        // 效果图copy到右边
        // 注意:rang从位置1到位置2,不是位置1+宽度
        cv::Mat rightMat = windowMat(cv::Range(0, srcMat.rows),
                                     cv::Range(srcMat.cols * 2, srcMat.cols * 3));
        cv::addWeighted(rightMat, 0.0f, dstMat, 1.0f, 0.0f, rightMat);
        // 更新
        cvui::update();
        // 显示
        cv::imshow(windowName, windowMat);
        // esc键退出
        if(cv::waitKey(25) == 27)
        {
            break;
        }
    }
}

 

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

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


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

 

 

公開された239元の記事 ウォンの賞賛259 ビュー430 000 +

おすすめ

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