日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

《OpenCV3编程入门》学习笔记6 图像处理(二)非线性滤波:中值滤波、双边滤波

發(fā)布時(shí)間:2023/11/27 生活经验 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《OpenCV3编程入门》学习笔记6 图像处理(二)非线性滤波:中值滤波、双边滤波 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

第6章 圖像處理

6.2 非線性濾波:中值濾波、雙邊濾波

6.2.1 非線性濾波

很多情況下,使用領(lǐng)域像素的非線性濾波會得到更好的效果,如在噪聲是散粒噪聲而不是高斯噪聲,即圖像偶爾會出現(xiàn)很大值時(shí),高斯濾波效果不如中值濾波

6.2.2 中值濾波(medianBlur)

1.濾波原理:基于排序統(tǒng)計(jì)理論的一種能有效抑制噪聲的非線性信號處理技術(shù),用像素點(diǎn)鄰域灰度值的中值替代像素點(diǎn)的灰度值,讓周圍的像素值接近真實(shí)值,從而消除孤立的噪聲點(diǎn),該方法在去除脈沖噪聲、斑點(diǎn)噪聲(speckle noise)、椒鹽噪聲(salt-and-pepper noise)的同時(shí)又能保留圖像的邊緣細(xì)節(jié)。
2.優(yōu)點(diǎn):在均值濾波中,由于噪聲成份被放入平均計(jì)算中,所以輸出受到了影響,但在中值濾波中,由于噪聲成分很難選上,所以幾乎不會影響輸出。可克服線性濾波的細(xì)節(jié)模糊。
3.缺點(diǎn):中值濾波是均值濾波的5倍以上時(shí)間,且不適合細(xì)節(jié)多的圖像
4.取3*3函數(shù)窗,計(jì)算以點(diǎn)[i,j]為中心的函數(shù)窗像素中值,步驟
(1)按強(qiáng)度值大小排列像素點(diǎn)
(2)選擇排序像素集的中間值作為點(diǎn)[i,j]的值
5.封裝函數(shù):medianBlur函數(shù)
6.函數(shù)原型

void medianBlur(InputArray src,OutputArray dst,int ksize)

7.參數(shù)說明
(1)Mat類型輸入圖像(1/3/4通道),ksize為3或5時(shí),圖像深度應(yīng)為CV_8U、CV_16U、CV_32F之一
(2)目標(biāo)圖像,與輸入圖像尺寸類型一致,可用srcImage.clone()初始化目標(biāo)圖像
(3)ksize,孔徑的線性尺寸(aperture linear size),必須是大于1的奇數(shù)

6.2.3 雙邊濾波(bilateralFilter)

1.雙邊濾波:一種非線性濾波方法,圖像的空間鄰近度和像素值相似度的折中,同時(shí)考慮空域信息和灰度相似性,達(dá)到保邊去噪的目的,具有簡單、非迭代、局部特點(diǎn)
2.優(yōu)點(diǎn):基于空間分布的高斯濾波函數(shù),較遠(yuǎn)像素不會太影響邊緣像素,保證了邊緣保存(edge-preserving)
3.缺點(diǎn):由于保存了過多高頻信息,對彩色圖像里的高頻噪聲不能很好過濾,只能對低頻信息較好濾波
4.濾波原理:輸出像素依賴于鄰域像素值的加權(quán)值組合:
????????????????
加權(quán)系數(shù)w(i,j,k,l)取決于定義域核和值域核乘積
定義域核:
????????????????
值域核:
????????????????
???????????
兩者相乘后,會產(chǎn)生依賴于數(shù)據(jù)的雙邊濾波權(quán)重函數(shù)
????????????
5.封裝函數(shù):bilateralFilter函數(shù)
6.函數(shù)原型

void bilateralFilter(InputArray src,OutputArray dst,int d,double sigmaColor,double simgmaSpace,int borderType=BORDER_DEFAULT)

7.參數(shù)說明
(1)輸入圖像,8位或浮點(diǎn)型單通道、三通道圖像
(2)目標(biāo)圖像,與輸入圖像尺寸類型一致
(3)過濾過程中每個(gè)像素鄰域的直徑,為非正數(shù)時(shí),從參數(shù)sigmaSpace計(jì)算它
(4)顏色空間濾波器的sigma值,值越大表明像素鄰域內(nèi)有越寬廣的顏色會被混合到一起,產(chǎn)生較大的半相等顏色區(qū)域
(5)坐標(biāo)空間中濾波器的sigma值,坐標(biāo)空間的標(biāo)注方差,值越大,表明越遠(yuǎn)的像素會相互影響,使更大的區(qū)域中足夠相似的顏色獲取相同顏色。d>0時(shí),d指定了領(lǐng)域大小且與sigmaSpace無關(guān),否則d正比于sigmaSpace
(6)用于推斷圖像外部像素的某種邊界模式

6.2.4 非線性濾波示例

1.兩種非線性濾波

#include<opencv2/opencv.hpp>
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;int main()
{//載入原圖Mat srcImage = imread("love.jpg");//顯示原圖namedWindow("中值濾波【原圖】");imshow("中值濾波【原圖】", srcImage);//中值濾波Mat dstImage1;medianBlur(srcImage, dstImage1, 7);namedWindow("中值濾波【效果圖】");imshow("中值濾波【效果圖】", dstImage1);//雙邊濾波Mat dstImage2;bilateralFilter(srcImage, dstImage2, 25, 25 * 2, 25 / 2);namedWindow("雙邊濾波【效果圖】");imshow("雙邊濾波【效果圖】", dstImage2);waitKey(0);return 0;
}

2.滑動條控制濾波模糊度

#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include<iostream>
using namespace cv;
using namespace std;
//全局變量
Mat g_srcImage, g_dstImage1, g_dstImage2;
int g_nMedianBlurValue;
int g_nBilateralFilterValue;//全局函數(shù)
static void on_MedianBlur(int, void*);
static void on_BilateralFilter(int, void*);int main()
{//改變控制臺字體顏色system("color 5E");//載入原圖g_srcImage = imread("love.jpg");if (!g_srcImage.data){printf("載入原圖像失敗~!\n");return false;}//復(fù)制原圖到目標(biāo)圖像g_dstImage1 = g_srcImage.clone();g_dstImage2 = g_srcImage.clone();//初始化內(nèi)核值g_nMedianBlurValue = 7;g_nBilateralFilterValue = 10;//顯示原圖namedWindow("非線性濾波【原圖】",1);imshow("非線性濾波【原圖】", g_srcImage);//========================【<1>中值濾波】=======================//創(chuàng)建窗口namedWindow("中值濾波【效果圖】",1);//創(chuàng)建滑動條createTrackbar("內(nèi)核值:", "中值濾波【效果圖】", &g_nMedianBlurValue, 50, on_MedianBlur);on_MedianBlur(g_nMedianBlurValue, 0);//===============================================================//========================【<2>雙邊濾波】========================//創(chuàng)建窗口namedWindow("雙邊濾波【效果圖】",1);//創(chuàng)建滑動條createTrackbar("內(nèi)核值:", "雙邊濾波【效果圖】", &g_nBilateralFilterValue, 50, on_BilateralFilter);on_BilateralFilter(g_nBilateralFilterValue, 0);//===============================================================waitKey(0);return 0;
}
static void on_MedianBlur(int, void*)
{medianBlur(g_srcImage, g_dstImage1, g_nMedianBlurValue*2+1);imshow("中值濾波【效果圖】", g_dstImage1);
}
static void on_BilateralFilter(int, void*)
{bilateralFilter(g_srcImage, g_dstImage2, g_nBilateralFilterValue, g_nBilateralFilterValue * 2, g_nBilateralFilterValue / 2);imshow("雙邊濾波【效果圖】", g_dstImage2);
}

總結(jié)

以上是生活随笔為你收集整理的《OpenCV3编程入门》学习笔记6 图像处理(二)非线性滤波:中值滤波、双边滤波的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。