Opencv實現(xiàn)聯(lián)合雙邊濾波
本文實例為大家分享了Opencv實現(xiàn)聯(lián)合雙邊濾波的具體代碼,供大家參考,具體內容如下
1.介紹
雙邊濾波是一種可以保邊去噪的濾波器,主要是因為它的核比較特殊,公式(1)為它的調用公式,公式(2)為它的核公式,其中,大括號左邊公式為空間域小核,和高斯濾波器是一樣的,而大括號右邊公式為值域小核(f表示取其灰度值),而對于聯(lián)合雙邊濾波與雙邊濾波的區(qū)別主要在于值域小核所用到的圖片,如果所用到的圖片是引入的另外一幅圖像,那么就是在使用聯(lián)合雙邊濾波。
(1)
(2)
2.代碼
此代碼就是用聯(lián)合雙邊濾波簡單去一個噪聲
#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++)
{
//隨機取值行列
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++)
{
//隨機取值行列
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;
}
原圖:

噪聲圖:

導向圖片:

結果圖(去噪之后的圖片和原圖很接近呀)

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
基于C語言實現(xiàn)簡單的12306火車售票系統(tǒng)
火車售票系統(tǒng)給我們的出行帶來了極大的方面,那么他基于編程是如何實現(xiàn)的呢?今天小編抽時間給大家分享一個使用C語言寫的一個簡單的火車票系統(tǒng),感興趣的朋友參考下2016-09-09
C++實現(xiàn)LeetCode(159.最多有兩個不同字符的最長子串)
這篇文章主要介紹了C++實現(xiàn)LeetCode(159.最多有兩個不同字符的最長子串),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下2021-07-07
C++靜態(tài)成員函數(shù)不能調用非靜態(tài)成員變量(詳解)
下面小編就為大家?guī)硪黄狢++靜態(tài)成員函數(shù)不能調用非靜態(tài)成員變量(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-12-12
C++實現(xiàn)LeetCode(154.尋找旋轉有序數(shù)組的最小值之二)
這篇文章主要介紹了C++實現(xiàn)LeetCode(154.尋找旋轉有序數(shù)組的最小值之二),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下2021-07-07
C++實現(xiàn)簡單BP神經(jīng)網(wǎng)絡
這篇文章主要為大家詳細介紹了C++實現(xiàn)簡單BP神經(jīng)網(wǎng)絡,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-05-05

