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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

OpenCV之cvSmooth函数平滑滤波

發(fā)布時(shí)間:2023/12/10 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenCV之cvSmooth函数平滑滤波 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

??????? 1、cvSmooth函數(shù)用法

???????????? 定義原型

<span style="font-size:12px;"> void cvSmooth( const CvArr* src, CvArr* dst,int smoothtype=CV_GAUSSIAN,int param1, int param2, double param3, double param4 );</span> ??? src:輸入圖像.
??? dst:輸出圖像.
??? smoothtype平滑方法:

CV_BLUR_NO_SCALE(簡(jiǎn)單不帶尺度變換的模糊)-對(duì)每個(gè)象素的 param1×param2 領(lǐng)域求和。如果鄰域大小是變化的,可以事先利用函數(shù) cvIntegral 計(jì)算積分圖像. 但是該選項(xiàng)沒有計(jì)算平均值的操作,所以比? CV_BLUR? 的運(yùn)算快,但是容易溢出,因此輸入輸出圖像必須有不同的數(shù)值精度,才能保證不會(huì)溢出。 不縮放比例的simple blur 支持8位的圖像輸入,但是結(jié)果必須是?? IPL_DEPTH_16S(CV_16S)?? 或者?? IPL_DEPTH_32S(CV_32S)??? 簡(jiǎn)單無縮放的濾波不適合? IN_PLACE? 方式:因?yàn)檩斎肱c輸出類型必須不同。


CV_BLUR (simple blur)- -對(duì)每個(gè)象素param1×param2鄰域求和并做尺度變換 1/(param1×param2)。
CV_GAUSSIAN(gaussian blur) - -對(duì)圖像進(jìn)行核大小為 param1×param2 的高斯卷積。
CV_MEDIAN(median blur) - -對(duì)圖像進(jìn)行核大小為param1×param1 的中值濾波 (鄰域是方的)。
CV_BILATERAL(雙向?yàn)V波) - -應(yīng)用雙向 3x3 濾波,彩色 sigma=param1,空間 sigma=param2.。

??? 關(guān)于雙向?yàn)V波,可參考http://www.dai.ed.ac.uk/CVonline/LOCAL_COPIES/MANDUCHI1/Bilateral_Filtering.html。
????? param1? 平滑操作的第一個(gè)參數(shù).
????? param2? 平滑操作的第二個(gè)參數(shù). 對(duì)于簡(jiǎn)單/非尺度變換的高斯模糊的情況,如果param2的值為零,則表示其被設(shè)定為param1。
????? param3? 對(duì)應(yīng)高斯參數(shù)的 Gaussian sigma (標(biāo)準(zhǔn)差). 如果為零,則標(biāo)準(zhǔn)差由下面的核尺寸計(jì)算:
????? sigma = (n/2 - 1)*0.3 + 0.8, 其中 n=param1 對(duì)應(yīng)水平核,n=param2 對(duì)應(yīng)垂直核 .? 對(duì)小的卷積核 (3×3 to 7×7) 使用如上公式所示的標(biāo)準(zhǔn) sigma 速度會(huì)快。如果 param3 不為零,而 param1 和 param2 為零,則核大小由sigma 計(jì)算 (以保證足夠精確的操作).

?

???????? 函數(shù) cvSmooth 可使用上面任何一種方法平滑圖像。每一種方法都有自己的特點(diǎn)以及局限。
???????? 沒有縮放的圖像平滑僅支持單通道圖像,并且支持8位到16位的轉(zhuǎn)換(與cvSobel和cvaplace相似)和32位浮點(diǎn)數(shù)到32位浮點(diǎn)數(shù)的變換格式。
? ? ? ?? 簡(jiǎn)單模糊和高斯模糊支持 1- 或 3-通道, 8-比特 和 32-比特 浮點(diǎn)圖像。這兩種方法可以(in-place)方式處理圖像。
? ? ? ?? 中值和雙向?yàn)V波工作于 1- 或 3-通道, 8-位圖像,但是不能以 in-place 方式處理圖像.


中值濾波????? 中值濾波法是一種非線性平滑技術(shù),它將每一象素點(diǎn)的灰度值設(shè)置為該點(diǎn)某鄰域窗口內(nèi)的所有象素點(diǎn)灰度值的中值。實(shí)現(xiàn)方法:
  • 通過從圖像中的某個(gè)采樣窗口取出奇數(shù)個(gè)數(shù)據(jù)進(jìn)行排序
  • 用排序后的中值取代要處理的數(shù)據(jù)即可
  • 中值濾波法對(duì)消除椒鹽噪音非常有效,在光學(xué)測(cè)量條紋圖象的相位分析處理方法中有特殊作用,但在條紋中心分析方法中作用不大。中值濾波在圖像處理中,常用于用來保護(hù)邊緣信息,是經(jīng)典的平滑噪聲的方法
  • ????????? 中值濾波原理

    ????? ? ? 中值濾波是基于排序統(tǒng)計(jì)理論的一種能有效抑制噪聲的非線性信號(hào)處理技術(shù),中值濾波的基本原理是把數(shù)字圖像或數(shù)字序列中一點(diǎn)的值用該點(diǎn)的一個(gè)拎域中各點(diǎn)值的中值代替,讓周圍的像素值接近的值,從而消除孤立的噪聲點(diǎn)。方法是去某種結(jié)構(gòu)的二維滑動(dòng)模板,將板內(nèi)像素按照像素值的大小進(jìn)行排序,生成單調(diào)上升(或下降)的為二維數(shù)據(jù)序列。二維中值濾波輸出為g(x,y)=med{f(x-k,y-l),(k,l∈W)} ,其中,f(x,y),g(x,y)分別為原始圖像和處理后圖像。W為二維模板,通常為2*2,3*3區(qū)域,也可以是不同的的形狀,如線狀,圓形,十字形,圓環(huán)形等。

    ???? ? ? 高斯濾波

    ???????? 高斯濾波實(shí)質(zhì)上是一種信號(hào)的濾波器,其用途是信號(hào)的平滑處理,我們知道數(shù)字圖像用于后期應(yīng)用,其噪聲是最大的問題,由于誤差會(huì)累計(jì)傳遞等原因,很多圖像處理教材會(huì)在很早的時(shí)候介紹Gauss濾波器,用于得到信噪比SNR較高的圖像(反應(yīng)真實(shí)信號(hào))。于此相關(guān)的有Gauss-Lapplace變換,其實(shí)就是為了得到較好的圖像邊緣,先對(duì)圖像做Gauss平滑濾波,剔除噪聲,然后求二階導(dǎo)矢,用二階導(dǎo)的過零點(diǎn)確定邊緣,在計(jì)算時(shí)也是頻域乘積=>空域卷積。

    ???? ? ? 濾波器就是建立的一個(gè)數(shù)學(xué)模型,通過這個(gè)模型來將圖像數(shù)據(jù)進(jìn)行能量轉(zhuǎn)化,能量低的就排除掉,噪聲就是屬于低能量部分。其實(shí)編程運(yùn)算的話就是一個(gè)模板運(yùn)算,拿圖像的八連通區(qū)域來說,中間點(diǎn)的像素值就等于八連通區(qū)的像素值的均值,這樣達(dá)到平滑的效果。若使用理想濾波器,會(huì)在圖像中產(chǎn)生振鈴現(xiàn)象。采用高斯濾波器的話,系統(tǒng)函數(shù)是平滑的,避免了振鈴現(xiàn)象。



    2、實(shí)例(OpenCV 2.48+VS2012)

    #include<cv.h> #include<highgui.h> #include<stdio.h> void main() {IplImage* img_src = 0;IplImage* img_dst = 0;char* pictureImage = (char*)("11.bmp");img_src = cvLoadImage(pictureImage, 1);if (!img_src){printf("Could not load image file:%s", pictureImage);exit(0);}img_dst = cvCreateImage(cvGetSize(img_src), IPL_DEPTH_8U, 3);cvNamedWindow("原始圖像:", CV_WINDOW_AUTOSIZE);cvMoveWindow("原始圖像:", 100, 100);cvShowImage("原始圖像:", img_src);cvNamedWindow("簡(jiǎn)單模糊:", CV_WINDOW_AUTOSIZE);cvMoveWindow("簡(jiǎn)單模糊:", 200, 100);//(simple blur)簡(jiǎn)單模糊- -對(duì)每個(gè)象素param1×param2鄰域求和并做尺度變換 1/(param1×param2)。cvSmooth(img_src, img_dst, CV_BLUR, 3, 3, 0, 0);cvShowImage("簡(jiǎn)單模糊:", img_dst);//注意使用CV_BLUR_NO_SCALE時(shí),原始圖像和目標(biāo)圖像,他們的類型不能是一致的。IplImage* img_dst2 = 0;img_dst2 = cvCreateImage(cvGetSize(img_src), IPL_DEPTH_16S, 3);cvNamedWindow("簡(jiǎn)單不帶尺度變換的模糊:", CV_WINDOW_AUTOSIZE);cvMoveWindow("簡(jiǎn)單不帶尺度變換的模糊:", 300, 100);//(簡(jiǎn)單不帶尺度變換的模糊)-對(duì)每個(gè)象素的 param1×param2 領(lǐng)域求和。如果鄰域大小是變化的,可以事先利用函數(shù) cvIntegral 計(jì)算積分圖像cvSmooth(img_src, img_dst2, CV_BLUR_NO_SCALE, 3, 3, 0, 0);cvShowImage("簡(jiǎn)單不帶尺度變換的模糊:", img_dst2);cvNamedWindow("高斯卷積:", CV_WINDOW_AUTOSIZE);cvMoveWindow("高斯卷積:", 400, 100);//對(duì)圖像進(jìn)行核大小為 param1×param2 的高斯卷積。cvSmooth(img_src, img_dst, CV_GAUSSIAN, 3, 3, 0, 0);cvShowImage("高斯卷積:", img_dst);cvNamedWindow("中值濾波:", CV_WINDOW_AUTOSIZE);cvMoveWindow("中值濾波:", 500, 100);//對(duì)圖像進(jìn)行核大小為param1×param1 的中值濾波 (鄰域是方的)。cvSmooth(img_src, img_dst, CV_MEDIAN, 3, 3, 0, 0);cvShowImage("中值濾波:", img_dst);// cvSmooth(pFrameMat,pFrameMat,CV_BILATERAL,3,0,0);//雙向?yàn)V波 //參數(shù)不對(duì),改成 //cvSmooth(pFrameMat,pFrameMat,CV_BILATERAL,3,3,11,11); //試試,后面兩個(gè)參數(shù)分別代表了位置上和顏色上的sigma值,不能設(shè)為0的 cvNamedWindow("雙向?yàn)V波:", CV_WINDOW_AUTOSIZE);cvMoveWindow("雙向?yàn)V波:", 600, 100);//(雙向?yàn)V波) - -應(yīng)用雙向 3x3 濾波,彩色 sigma=param1,空間 sigma=param2.。cvSmooth(img_src, img_dst, CV_BILATERAL, 3, 3, 11, 11);cvShowImage("雙向?yàn)V波:", img_dst);cvWaitKey(0);cvReleaseImage(&img_src);cvReleaseImage(&img_dst);cvDestroyWindow("原始圖像:");cvDestroyWindow("簡(jiǎn)單不帶尺度變換的模糊:");cvDestroyWindow("高斯卷積:");cvDestroyWindow("中值濾波:");cvDestroyWindow("雙向?yàn)V波:"); }







    從結(jié)果可以看出,對(duì)于椒鹽噪聲,3x3中值濾波已有很好的效果。

    總結(jié)

    以上是生活随笔為你收集整理的OpenCV之cvSmooth函数平滑滤波的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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