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

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

ディレクトリ

序文

デモ

バイラテラルフィルタリング

アウトライン

関数原型

ソースデモ

プロジェクトテンプレート:バージョン番号v1.14.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の開発ノート(XIX):非線形フィルタリングアルゴリズムの基礎 - バイラテラルフィルタリング

 

序文

この章では、バイラテラルフィルタリング非線形フィルタリングを学びます。

 

デモ

示されているような結果を得るために値バイラテラルフィルタリング一見大きくない十分に、100〜1000の最大値(これも実際の10.0fで割った値):

 

バイラテラルフィルタリング

アウトライン

      バイラテラルフィルタは、アカウントに空間情報と灰色の類似性を取って、画素値類似度合成画像に妥協処理と空間的に近接非線形フィルタリングされたノイズ保存しながら画像を弱める効果

      バイラテラルフィルタは、フィールド重み係数の各画素に割り当てられました。これらの重み付け係数は二つの部分、第1の部分と、ガウスフィルタ、重量の第2の部分は現在の画素の技術画素の階調差の量に依存するような重み付け方法を含みます。

あまりにも多くの高周波数情報が格納されているので、バイラテラルフィルタがきれいになり、カラー画像の高周波ノイズを除去することができないが、より良好なフィルタリングだけ低い周波数情報に対して行うことができます。インパルスノイズ、そうエッジことは除去されないようにバイラテラルフィルタリングのために。

関数原型

void bilateralFilter( InputArray src,
                OutputArray dst,
                int d,
                double sigmaColor,
                double sigmaSpace,
                int borderType = BORDER_DEFAULT );
  • パラメータ:InputArrayタイプ一般CV ::マット、画像がチャネルの1,3数を処理することができます。
  • パラメータ二 ; OutputArrayタイプ、出力対象画像は、元の画像を必要とし、同じサイズと種類を持っています。
  • 三つのパラメータ:int型、各画素の濾過フィールド径の間に発現が、非整数値であれば、関数値が第パラメータsignaSpaceから計算されます。
  • 参数四:颜色空间过滤器的sigma值,这个参数的值月大,表明该像素邻域内有越宽广的颜色会被混合到一起,产生较大的半相等颜色区域;
  • 参数五:坐标空间中滤波器的sigma值,如果该值较大,则意味着越远的像素将相互影响,从而使更大的区域中足够相似的颜色获取相同的颜色。当d>0时,d指定了邻域大小且与sigmaSpace无关,否则d正比于sigmaSpace;
  • 参数六:int类型的borderType,用于推断图像外部像素的某种边界模式,使用默认值BORDER_DEFULAT,一般无需设置;

 

Demo源码

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

    cv::resize(srcMat, srcMat, cv::Size(400, 300));

    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 d = 0;
    int sigmaColor = 0;
    int sigmaSpace = 0;
    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, 500, 40, "d");
        cvui::trackbar(windowMat, 500, 60, 200, &d, 0, 10);

        // 中间为调整滤波参数的相关设置
        cvui::printf(windowMat, 500, 120, "sigmaColor");
        cvui::trackbar(windowMat, 500, 140, 200, &sigmaColor, 0, 1000);

        // 中间为调整滤波参数的相关设置
        cvui::printf(windowMat, 500, 200, "sigmaSpace");
        cvui::trackbar(windowMat, 500, 220, 200, &sigmaSpace, 0, 1000);

        // 双边滤波
        cv::bilateralFilter(srcMat,
                            dstMat,
                            d,
                            sigmaColor / 10.f,
                            sigmaSpace / 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.14.0

      对应版本号v1.14.0

 

原博主博客地址:https://blog.csdn.net/qq21497936
原博主博客导航:https://blog.csdn.net/qq21497936/article/details/102478062
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/104549757

发布了239 篇原创文章 · 获赞 259 · 访问量 43万+

おすすめ

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