最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++實(shí)現(xiàn)中值濾波的示例代碼

 更新時(shí)間:2022年05月12日 11:39:02   作者:小魏612  
本文主要介紹了C++實(shí)現(xiàn)中值濾波的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

為了加深對(duì)中值濾波算法的理解以及方便以后更好的復(fù)習(xí),我將該算法的一些重點(diǎn)細(xì)節(jié)和實(shí)現(xiàn)過程踩過的坑記錄下來。

中值濾波器是一種非線性濾波器,或者叫統(tǒng)計(jì)排序?yàn)V波器。

適用對(duì)象:帶椒鹽噪聲的圖像

由于椒鹽噪聲像素值與原圖像素值沒有關(guān)聯(lián),隨機(jī)性較大,因此使用中值濾波可有效濾掉噪聲。

中值濾波需要對(duì)像素值進(jìn)行排序,因此首先寫一個(gè)冒泡排序算法。

冒泡排序?qū)崿F(xiàn):

為提高效率加入標(biāo)志位flag,當(dāng)?shù)趇次尋找最大值時(shí),如果相鄰兩個(gè)數(shù)均未發(fā)生互換,此時(shí)flag位為false,即說明此時(shí)數(shù)組已經(jīng)按照遞增排列,可提前終止。此處應(yīng)該注意flag=false所在位置,因?yàn)樾枰WC第i次尋找最大值過程中,遍歷到所有未參與排列的數(shù)據(jù),所以flag=false應(yīng)該放在循環(huán)條件for(int j=0; j<len-1-i; j++)的外部。

void bubble(std::vector<int> &arr, int len)
{
    bool flag = true;
    for (int i = 0; i < len-1; i++)
    {
        while (flag)
        {
            flag = false;
            for (int j = 0; j < len - i - 1; j++)
            {
                
                if (arr[j + 1] < arr[j])
                {
                    flag = true;  //只要發(fā)生一次交換就繼續(xù)判斷
                    int temp = arr[j + 1];
                    arr[j + 1] = arr[j];
                    arr[j] = temp;
                }
            }
        }
    }    
}

中值濾波的實(shí)現(xiàn):

需要注意的主要問題:

為了能夠遍歷到原圖的邊界,需要對(duì)原圖進(jìn)行邊界擴(kuò)充,擴(kuò)充長(zhǎng)度為(窗口的長(zhǎng)度-1)/ 2。
注意利用窗口對(duì)擴(kuò)充后的圖像遍歷時(shí),起始的位置不是0,而是擴(kuò)充的長(zhǎng)度,因?yàn)檫@時(shí)對(duì)應(yīng)的才是原圖的第一個(gè)像素點(diǎn),同理結(jié)束的位置也是原圖的最后一個(gè)像素點(diǎn)。
另外為了方便將窗口內(nèi)對(duì)應(yīng)的像素存到容器中,可以寫兩個(gè)循環(huán),循環(huán)長(zhǎng)度為窗口的長(zhǎng)度與寬度,依次將像素值存入容器中。
最后對(duì)容器內(nèi)的像素按照遞增排列后,取中值賦給目標(biāo)矩陣相應(yīng)的位置,而此時(shí)的位置也應(yīng)該用i-h,對(duì)應(yīng)擴(kuò)充前的位置。
經(jīng)實(shí)踐證明我寫的這兩個(gè)算法可有效使用。

void medianFilter(cv::Mat& src, cv::Mat& dst, cv::Size width)
{
    //判斷窗口是否為奇數(shù)
    if (width.width % 2 == 0 || width.height % 2 == 0)
    {
        std::cout << "輸入窗口大小應(yīng)該為奇數(shù),請(qǐng)重新輸入" << endl;
        exit(-1);
    }
    else
    {
        //計(jì)算邊界擴(kuò)充長(zhǎng)度
        int h = (width.height - 1) / 2;
        int w = (width.width - 1) / 2;
 
        //對(duì)原圖邊界擴(kuò)充
        cv::Mat src_border;
        cv::copyMakeBorder(src, src_border, h, h, w, w, cv::BORDER_REFLECT_101);
        for (int i = h; i < src.rows + h; i++)
        {
 
            for (int j = w; j < src.cols + w; j++)
            {
                //定義容器存放窗口對(duì)應(yīng)的像素
                std::vector <int> v;
                for (int ii = i - h; ii <= i + h; ii++)
                {
                    for (int jj = j - w; jj <= j + w; jj++)
                    {
 
                        v.push_back(src_border.at<uchar>(ii, jj));
                    }
                }
                //對(duì)容器內(nèi)存放的像素排序
                int len = width.area();
                bubble(v, len);
                //將中值賦給目標(biāo)圖像對(duì)應(yīng)位置
                dst.at<uchar>(i-h, j-w) = v[(len - 1) / 2];
                
            }
        }
        
    }
 
}

到此這篇關(guān)于C++實(shí)現(xiàn)中值濾波的示例代碼的文章就介紹到這了,更多相關(guān)C++ 中值濾波內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言實(shí)現(xiàn)黎曼和求定積分

    C語言實(shí)現(xiàn)黎曼和求定積分

    這篇文章主要為大家詳細(xì)介紹了用C語言程序?qū)崿F(xiàn)黎曼和求定積分,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • 深入遍歷二叉樹的各種操作詳解(非遞歸遍歷)

    深入遍歷二叉樹的各種操作詳解(非遞歸遍歷)

    本篇文章是對(duì)遍歷二叉樹的各種操作進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言實(shí)現(xiàn)動(dòng)態(tài)開辟存儲(chǔ)楊輝三角

    C語言實(shí)現(xiàn)動(dòng)態(tài)開辟存儲(chǔ)楊輝三角

    這篇文章主要介紹了如何利用C語言實(shí)現(xiàn)動(dòng)態(tài)開辟存儲(chǔ)楊輝三角,可以靈活的開辟空間,充分的利用空間。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以參考一下
    2022-03-03
  • Qt5+QMediaPlayer實(shí)現(xiàn)音樂播放器的示例代碼

    Qt5+QMediaPlayer實(shí)現(xiàn)音樂播放器的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用Qt5和QMediaPlayer實(shí)現(xiàn)簡(jiǎn)易的音樂播放器,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下
    2022-12-12
  • 一篇文章帶你了解C語言操作符

    一篇文章帶你了解C語言操作符

    這篇文章主要以圖文結(jié)合的方式為大家詳細(xì)介紹了C語言操作符基礎(chǔ)知識(shí),感興趣的小伙伴們可以參考一下,希望能給你帶來幫助
    2021-09-09
  • VS2019中在源文件中如何使用自己寫的頭文件

    VS2019中在源文件中如何使用自己寫的頭文件

    通過頭文件的形式直接調(diào)用自定義的函數(shù),從而免去對(duì)函數(shù)的原型進(jìn)行聲明,本文就詳細(xì)的介紹一下VS2019中在源文件中如何使用自己寫的頭文件,感興趣的可以了解一下
    2021-09-09
  • 解析C++中構(gòu)造函數(shù)的默認(rèn)參數(shù)和構(gòu)造函數(shù)的重載

    解析C++中構(gòu)造函數(shù)的默認(rèn)參數(shù)和構(gòu)造函數(shù)的重載

    這篇文章主要介紹了解析C++中構(gòu)造函數(shù)的默認(rèn)參數(shù)和構(gòu)造函數(shù)的重載,是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-09-09
  • Ubuntu 環(huán)境下的 C/C++ 編譯與調(diào)試配置方法

    Ubuntu 環(huán)境下的 C/C++ 編譯與調(diào)試配置方法

    本文檔詳細(xì)介紹了如何在Ubuntu環(huán)境中使用VSCode進(jìn)行C/C++的編譯與調(diào)試配置,通過配置`tasks.json`和`launch.json`,實(shí)現(xiàn)了統(tǒng)一管理輸出文件、優(yōu)化調(diào)試流程以及跨平臺(tái)兼容性,配置了`g++`編譯器和`gdb`調(diào)試器,并使用C/C++插件來提高開發(fā)效率,感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • C++私有繼承與EBO深入分析講解

    C++私有繼承與EBO深入分析講解

    這篇文章主要介紹了C++私有繼承,在私有繼承當(dāng)中,基類的公有成員和保護(hù)成員都會(huì)成為派生類的私有成員。這意味著基類的方法都會(huì)被private關(guān)鍵字描述,我們可以在派生類中使用它,但類對(duì)象無法直接調(diào)用,下面來看看詳細(xì)內(nèi)容吧
    2022-08-08
  • C語言的數(shù)字游戲算法效率問題探討實(shí)例

    C語言的數(shù)字游戲算法效率問題探討實(shí)例

    這篇文章主要介紹了C語言的數(shù)字游戲算法效率問題探討實(shí)例,需要的朋友可以參考下
    2014-04-04

最新評(píng)論

上蔡县| 正阳县| 乌拉特前旗| 红原县| 轮台县| 饶阳县| 兴山县| 邵东县| 延长县| 兴文县| 历史| 马尔康县| 江津市| 孟村| 清徐县| 聂拉木县| 双桥区| 邓州市| 三河市| 揭东县| 北票市| 金湖县| 衡山县| 德化县| 沐川县| 剑河县| 裕民县| 深水埗区| 雷山县| 黄平县| 海丰县| 龙江县| 凭祥市| 衡东县| 阿尔山市| 长乐市| 时尚| 六枝特区| 淳安县| 皋兰县| 来安县|