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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

《OpenCV3编程入门》学习笔记6 图像处理(一)线性滤波:方框滤波、均值滤波、高斯滤波

發布時間:2023/11/27 生活经验 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《OpenCV3编程入门》学习笔记6 图像处理(一)线性滤波:方框滤波、均值滤波、高斯滤波 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第6章 圖像處理

6.1 線性濾波:方框濾波、均值濾波、高斯濾波

6.1.1 圖像濾波與濾波器

1.圖像濾波:在盡量保留圖像細節特征的條件下對目標圖像的噪聲進行抑制
目的:
(1)抽出對象的特征作為圖像識別的特征模式
(2)適應圖像處理的要求,消除圖像數字化時所混入的噪聲
要求:
(1)不損壞圖像的輪廓及邊緣等重要信息
(2)使圖像清晰視覺效果好
2.平滑濾波:消除圖像中的噪聲成分,低頻增強的空間域濾波技術
目的:
(1)模糊
(2)消除噪音
3.濾波器種類
(1)方框濾波(boxFilter函數)
(2)均值濾波/領域平均濾波(blur函數)
(3)高斯濾波(GaussianBlur函數)
(4)中值濾波(medianBlur函數)
(5)雙邊濾波(bilateralFilter函數)
4.線性濾波器
(1)低通濾波器:允許低頻率
(2)高通濾波器:允許高頻率
(3)帶通濾波器:允許一定范圍頻率
(4)帶阻濾波器:阻止一定范圍頻率
(5)全通濾波:允許所有頻率通過,僅改變相位關系
(6)陷波濾波器:組織一個狹窄頻率范圍通過

6.1.2 鄰域算子與線性鄰域濾波

1.鄰域算子(局部算子):利用給定像素周圍的像素值決定此像素的輸出值的一種算子
用處:
(1)局部色調調整
(2)圖像濾波
2.線性鄰域濾波:一種常用的鄰域算子,像素輸出值g(i,j)取決于輸入像素f(i+k,j+I)的加權和:
??????????????
????????其中h(k,I)為濾波器加權系數
3.三種線性濾波操作
(1)方框濾波(BoxBlur函數)
(2)均值濾波/領域平均濾波(Blur函數)
(3)高斯濾波(GaussianBlur函數)

6.1.3 方框濾波(boxFilter)

1.封裝函數:boxFilter函數
2.函數原型

void boxFilter(InputArray src, OutputArray dst, int ddepth, Size ksize, Point anchor=Point(-1,-1), boolnormalize=true, int borderType=BORDER_DEFAULT )

3.參數說明
(1)輸入圖像,深度應為CV_8U、CV_16U、CV_16S、CV_32F、CV_64F之一
(2)目標圖像,與輸入圖像尺寸類型一致
(3)輸出圖像深度,-1代表使用原圖深度,即src.depth()
(4)內核大小,Size(w,h)表示w*h的核大小
(5)錨點,被平滑的那個點,默認值Point(-1,-1),點坐標為負值表示取內核中心為錨點
(6)標識符,默認值true,表示內核是否被其區域歸一化了,歸一化是把要處理的量縮放到一個范圍內
(7)用于推斷圖像外部像素的某種邊界模式,默認BORDER_DEFAULT
4.核表示
??????????????
其中:
???????????

6.1.4 均值濾波(blur)

1.濾波原理:輸出圖像的每一個像素值是核窗口內全體像素(除去目標像素本身)的平均值(所有像素加權系數相等),是歸一化后的方框濾波
??????????????
2.封裝函數:blur函數
3.函數原型

void blur(InputArray src, OutputArray dst, Size ksize, Point anchor=Point(-1,-1), int borderType=BORDER_DEFALUT)

4.缺點:圖像去噪的同時也破壞了圖像細節部分

6.1.5 高斯濾波(GaussianBlur)

1.濾波原理:輸出圖像的每個像素值都是其本身和鄰域內的其他像素值的加權平均值,具體為用一個模板(卷積/掩模)掃描圖像中的每一個像素,用模板確定的鄰域內像素的加權平均灰度值替代模板中心像素點的值
(1)從數學角度,圖像的高斯模糊過程就是源圖像與指定的高斯分布函數做卷積運算,圖像與圓形方框模糊做卷積會生成更加精確的焦外成像效果
(2)高斯濾波器是一類根據高斯函數的形狀來選擇權值的線性平滑濾波器,高斯平滑濾波器對于抑制服從正態分布的噪聲非常有效。
(3)一維零均值高斯函數:
??????????????
其中,高斯分布參數Sigma決定了高斯函數的寬度
(4)二維零均值離散高斯函數:
??????????????
2.封裝函數:GaussianBlur函數
3.函數原型

void GaussianBlur(InputArray src, OutputArray dst, Size ksize, double sigmaX, double sigmaY=0, int borderType=BORDER_DEFALUT)

4.參數說明
(1)輸入圖像,深度應為CV_8U、CV_16U、CV_16S、CV_32F、CV_64F之一
(2)目標圖像,與輸入圖像尺寸類型一致
(3)內核大小,Size(w,h)表示w*h的核大小,ksize.width和ksize.height都必須是正數和奇數或0,都由sigma計算而來
(4)高斯核函數在X方向的標準偏差
(5)高斯核函數在Y方向的標準偏差,若sigmaY為0,就將它設置為sigmaX,如果sigmaX和sigmaY都是0,就由ksize.width和ksize.height計算出來
(6)用于推斷圖像外部像素的某種邊界模式,默認BORDER_DEFAULT

6.1.6 線性濾波OpenCV源碼

(…\OpenCV3.4.1\opencv\sources\modules\imgproc\src\smooth.cpp)

FilterEngine類:OpenCV圖像濾波核心引擎,使用FilterEngine類可以分塊處理大量的圖像,構建復雜的管線

1.boxFilter函數
(1)復制源圖形參Mat數據到臨時變量,定義一些臨時變量
(2)處理ddepth小于0的情況
(3)處理borderType不為BORDER_CONSTANT且normalize為真的情況
(4)調用FilterEngine濾波引擎創建一個BoxFilter,正式開始濾波操作
2.blur函數
(1)調用boxFilter函數:boxFilter(src,dst,-1,ksize,anchor,true,borderType);
3.GaussianFilter函數

6.1.7 線性濾波示例

1.三種濾波調用

#include<opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;int main()
{//載入原圖Mat srcImage = imread("love.jpg");//顯示原圖namedWindow("線性濾波【原圖】");imshow("線性濾波【原圖】", srcImage);//[1]方框濾波Mat dstImage1;boxFilter(srcImage, dstImage1, -1, Size(3, 3), Point(-1, -1), true);namedWindow("方框濾波【效果圖】");imshow("方框濾波【效果圖】", dstImage1);//[2]均值濾波Mat dstImage2;blur(srcImage, dstImage2, Size(5, 5), Point(-1, -1));namedWindow("均值濾波【效果圖】");imshow("均值濾波【效果圖】", dstImage2);//[3]高斯濾波Mat dstImage3;GaussianBlur(srcImage, dstImage3, Size(7, 7), 0, 0);namedWindow("高斯濾波【效果圖】");imshow("高斯濾波【效果圖】", dstImage3);waitKey(0);return 0;
}

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

#include<opencv2/opencv.hpp>
#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, g_dstImage3;
int g_nBoxFilterValue;
int g_nMeanBlurValue;
int g_nGaussianBlurValue;
//全局函數聲明
static void on_BoxFilter(int, void*);
static void on_MeanBlur(int, void*);
static void on_GaussianBlur(int, void*);int main()
{//改變console字體顏色//system("color5E");//載入原圖g_srcImage = imread("love.jpg");if (!g_srcImage.data){printf("讀取srcImage錯誤~!\n");return false;}//復制原圖到三個Mat類型中g_dstImage1 = g_srcImage.clone();g_dstImage2 = g_srcImage.clone();g_dstImage3 = g_srcImage.clone();//初始化內核值g_nBoxFilterValue = 3;g_nMeanBlurValue = 3;g_nGaussianBlurValue = 3;//顯示原圖namedWindow("【原圖窗口】");imshow("【原圖窗口】", g_srcImage);//=========================【<1>方框濾波】========================//創建窗口namedWindow("【<1>方框濾波】");//創建軌跡條createTrackbar("內核值:", "【<1>方框濾波】", &g_nBoxFilterValue, 40, on_BoxFilter);on_BoxFilter(g_nBoxFilterValue, 0);//================================================================//=========================【<2>均值濾波】========================//創建窗口namedWindow("【<2>均值濾波】");//創建軌跡條createTrackbar("內核值:", "【<2>均值濾波】", &g_nMeanBlurValue, 40, on_MeanBlur);on_MeanBlur(g_nMeanBlurValue, 0);//================================================================//=========================【<3>高斯濾波】========================//創建窗口namedWindow("【<3>高斯濾波】");//創建滑動條createTrackbar("內核值:", "【<3>高斯濾波】", &g_nGaussianBlurValue, 40, on_GaussianBlur);on_GaussianBlur(g_nGaussianBlurValue, 0);//================================================================//輸出一些幫助信息cout << endl << "\t請調整滑動條觀察圖像效果~\n\n" << "\t按下\"q\"鍵時,程序退出~!\n";//按下"q"鍵時,程序退出while (char(waitKey(1)) != 'q') {}return 0;
}
static void on_BoxFilter(int, void*)
{boxFilter(g_srcImage, g_dstImage1, -1, Size(g_nBoxFilterValue+1, g_nBoxFilterValue+1), Point(-1, -1), true);imshow("【<1>方框濾波】", g_dstImage1);
}
static void on_MeanBlur(int, void*)
{blur(g_srcImage, g_dstImage2, Size(g_nMeanBlurValue+1, g_nMeanBlurValue+1), Point(-1, -1));imshow("【<2>均值濾波】", g_dstImage2);
}
static void on_GaussianBlur(int, void*)
{GaussianBlur(g_srcImage, g_dstImage3, Size(g_nGaussianBlurValue*2 + 1, g_nGaussianBlurValue*2 + 1), 0, 0);imshow("【<3>高斯濾波】", g_dstImage3);
}

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。