Opencv實(shí)現(xiàn)聯(lián)合雙邊濾波
本文實(shí)例為大家分享了Opencv實(shí)現(xiàn)聯(lián)合雙邊濾波的具體代碼,供大家參考,具體內(nèi)容如下
1.介紹
雙邊濾波是一種可以保邊去噪的濾波器,主要是因?yàn)樗暮吮容^特殊,公式(1)為它的調(diào)用公式,公式(2)為它的核公式,其中,大括號(hào)左邊公式為空間域小核,和高斯濾波器是一樣的,而大括號(hào)右邊公式為值域小核(f表示取其灰度值),而對(duì)于聯(lián)合雙邊濾波與雙邊濾波的區(qū)別主要在于值域小核所用到的圖片,如果所用到的圖片是引入的另外一幅圖像,那么就是在使用聯(lián)合雙邊濾波。
(1)
(2)
2.代碼
此代碼就是用聯(lián)合雙邊濾波簡(jiǎn)單去一個(gè)噪聲
#include<opencv2/opencv.hpp> #include<ximgproc.hpp> using namespace cv; Mat addSaltNoise(const Mat srcImage, int n) { Mat dstImage = srcImage.clone(); for (int k = 0; k < n; k++) { //隨機(jī)取值行列 int i = rand() % dstImage.rows; int j = rand() % dstImage.cols; //圖像通道判定 if (dstImage.channels() == 1) { dstImage.at<uchar>(i, j) = 255; //鹽噪聲 } else { dstImage.at<Vec3b>(i, j)[0] = 255; dstImage.at<Vec3b>(i, j)[1] = 255; dstImage.at<Vec3b>(i, j)[2] = 255; } } for (int k = 0; k < n; k++) { //隨機(jī)取值行列 int i = rand() % dstImage.rows; int j = rand() % dstImage.cols; //圖像通道判定 if (dstImage.channels() == 1) { dstImage.at<uchar>(i, j) = 0; //椒噪聲 } else { dstImage.at<Vec3b>(i, j)[0] = 0; dstImage.at<Vec3b>(i, j)[1] = 0; dstImage.at<Vec3b>(i, j)[2] = 0; } } return dstImage; } int main() { Mat src = imread("test.png", 1); src = addSaltNoise(src, 3000); Mat joint = imread("test.png", 0); Mat dst; int64 begin = cvGetTickCount(); ximgproc::jointBilateralFilter(joint, src, dst, -1, 3, 9); int64 end = cvGetTickCount(); float time = (end - begin) / (cvGetTickFrequency() * 1000.); printf("time= %fms\n", time); imshow("src", src); imshow("joint", joint); imshow("jointBilateralFilter", dst); waitKey(0); return 0; }
原圖:
噪聲圖:
導(dǎo)向圖片:
結(jié)果圖(去噪之后的圖片和原圖很接近呀)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
基于C語言實(shí)現(xiàn)簡(jiǎn)單的12306火車售票系統(tǒng)
火車售票系統(tǒng)給我們的出行帶來了極大的方面,那么他基于編程是如何實(shí)現(xiàn)的呢?今天小編抽時(shí)間給大家分享一個(gè)使用C語言寫的一個(gè)簡(jiǎn)單的火車票系統(tǒng),感興趣的朋友參考下2016-09-09C++實(shí)現(xiàn)LeetCode(46.全排列)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(46.全排列),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07C++實(shí)現(xiàn)LeetCode(159.最多有兩個(gè)不同字符的最長子串)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(159.最多有兩個(gè)不同字符的最長子串),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07C++靜態(tài)成員函數(shù)不能調(diào)用非靜態(tài)成員變量(詳解)
下面小編就為大家?guī)硪黄狢++靜態(tài)成員函數(shù)不能調(diào)用非靜態(tài)成員變量(詳解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-12-12Qt實(shí)現(xiàn)實(shí)時(shí)鼠標(biāo)繪制圖形
這篇文章主要介紹了Qt中QGraphicsView架構(gòu)下如何實(shí)現(xiàn)實(shí)時(shí)鼠標(biāo)繪制圖形,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起動(dòng)手試一試2022-02-02C++實(shí)現(xiàn)LeetCode(154.尋找旋轉(zhuǎn)有序數(shù)組的最小值之二)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(154.尋找旋轉(zhuǎn)有序數(shù)組的最小值之二),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07C++中function的實(shí)現(xiàn)原理詳解
類模版std::function是一種通用、多態(tài)的函數(shù)封裝。function的實(shí)例可以對(duì)任何可以調(diào)用的目標(biāo)實(shí)體進(jìn)行存儲(chǔ)、復(fù)制、和調(diào)用操作。本文主要聊聊它的實(shí)現(xiàn)原理,需要的可以參考一下2022-12-12C++實(shí)現(xiàn)簡(jiǎn)單BP神經(jīng)網(wǎng)絡(luò)
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)簡(jiǎn)單BP神經(jīng)網(wǎng)絡(luò),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-05-05