OpenCV之cvSmooth函數平滑濾波

??????? 1、cvSmooth函數用法

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

<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(簡單不帶尺度變換的模糊)-對每個象素的 param1×param2 領域求和。如果鄰域大小是變化的,可以事先利用函數 cvIntegral 計算積分圖像. 但是該選項沒有計算平均值的操作,所以比? CV_BLUR? 的運算快,但是容易溢出,因此輸入輸出圖像必須有不同的數值精度,才能保證不會溢出。 不縮放比例的simple blur 支持8位的圖像輸入,但是結果必須是?? IPL_DEPTH_16S(CV_16S)?? 或者?? IPL_DEPTH_32S(CV_32S)??? 簡單無縮放的濾波不適合? IN_PLACE? 方式:因為輸入與輸出類型必須不同。


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

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

?

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


中值濾波????? 中值濾波法是一種非線性平滑技術,它將每一象素點的灰度值設置為該點某鄰域窗口內的所有象素點灰度值的中值。實現方法:
  1. 通過從圖像中的某個采樣窗口取出奇數個數據進行排序
  2. 用排序后的中值取代要處理的數據即可
  3. 中值濾波法對消除椒鹽噪音非常有效,在光學測量條紋圖象的相位分析處理方法中有特殊作用,但在條紋中心分析方法中作用不大。中值濾波在圖像處理中,常用于用來保護邊緣信息,是經典的平滑噪聲的方法
????????? 中值濾波原理

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

???? ? ? 高斯濾波

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

???? ? ? 濾波器就是建立的一個數學模型,通過這個模型來將圖像數據進行能量轉化,能量低的就排除掉,噪聲就是屬于低能量部分。其實編程運算的話就是一個模板運算,拿圖像的八連通區域來說,中間點的像素值就等于八連通區的像素值的均值,這樣達到平滑的效果。若使用理想濾波器,會在圖像中產生振鈴現象。采用高斯濾波器的話,系統函數是平滑的,避免了振鈴現象。



2、實例(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("簡單模糊:", CV_WINDOW_AUTOSIZE);cvMoveWindow("簡單模糊:", 200, 100);//(simple blur)簡單模糊- -對每個象素param1×param2鄰域求和并做尺度變換 1/(param1×param2)。cvSmooth(img_src, img_dst, CV_BLUR, 3, 3, 0, 0);cvShowImage("簡單模糊:", img_dst);//注意使用CV_BLUR_NO_SCALE時,原始圖像和目標圖像,他們的類型不能是一致的。IplImage* img_dst2 = 0;img_dst2 = cvCreateImage(cvGetSize(img_src), IPL_DEPTH_16S, 3);cvNamedWindow("簡單不帶尺度變換的模糊:", CV_WINDOW_AUTOSIZE);cvMoveWindow("簡單不帶尺度變換的模糊:", 300, 100);//(簡單不帶尺度變換的模糊)-對每個象素的 param1×param2 領域求和。如果鄰域大小是變化的,可以事先利用函數 cvIntegral 計算積分圖像cvSmooth(img_src, img_dst2, CV_BLUR_NO_SCALE, 3, 3, 0, 0);cvShowImage("簡單不帶尺度變換的模糊:", img_dst2);cvNamedWindow("高斯卷積:", CV_WINDOW_AUTOSIZE);cvMoveWindow("高斯卷積:", 400, 100);//對圖像進行核大小為 param1×param2 的高斯卷積。cvSmooth(img_src, img_dst, CV_GAUSSIAN, 3, 3, 0, 0);cvShowImage("高斯卷積:", img_dst);cvNamedWindow("中值濾波:", CV_WINDOW_AUTOSIZE);cvMoveWindow("中值濾波:", 500, 100);//對圖像進行核大小為param1×param1 的中值濾波 (鄰域是方的)。cvSmooth(img_src, img_dst, CV_MEDIAN, 3, 3, 0, 0);cvShowImage("中值濾波:", img_dst);//  cvSmooth(pFrameMat,pFrameMat,CV_BILATERAL,3,0,0);//雙向濾波  //參數不對,改成  //cvSmooth(pFrameMat,pFrameMat,CV_BILATERAL,3,3,11,11);  //試試,后面兩個參數分別代表了位置上和顏色上的sigma值,不能設為0的  cvNamedWindow("雙向濾波:", CV_WINDOW_AUTOSIZE);cvMoveWindow("雙向濾波:", 600, 100);//(雙向濾波) - -應用雙向 3x3 濾波,彩色 sigma=param1,空間 sigma=param2.。cvSmooth(img_src, img_dst, CV_BILATERAL, 3, 3, 11, 11);cvShowImage("雙向濾波:", img_dst);cvWaitKey(0);cvReleaseImage(&img_src);cvReleaseImage(&img_dst);cvDestroyWindow("原始圖像:");cvDestroyWindow("簡單不帶尺度變換的模糊:");cvDestroyWindow("高斯卷積:");cvDestroyWindow("中值濾波:");cvDestroyWindow("雙向濾波:");
}








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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/255522.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/255522.shtml
英文地址,請注明出處:http://en.pswp.cn/news/255522.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【python數字信號處理】——DFT、DTFT(頻譜圖、幅度圖、相位圖)

目錄 一、離散時間傅里葉變換DTFT 二、離散傅里葉變換DFT 三、DFT與DTFT的關系 ? 參考&#xff1a; 《數字信號處理》——&#xff08;一&#xff09;.DTFT、DFT(python實現)_遠行者223的博客-CSDN博客python繪制頻譜圖DTFT&#xff0c;DFTpython繪制頻譜圖&#xff1a;…

ERROR:Tried to register widget id ==basemapGalleryDiv but that id is already registered解決辦法

在ArcGIS Server開發中&#xff0c;遇到DIV已經被注冊的情況&#xff0c;不能對原DIV內容進行更新。這里需要調用Dojo的destroyRecursive&#xff08;&#xff09;方法&#xff0c;逐個銷毀該Widget下的子元素及其后代元素。然后就可以在原DIV上注冊新的小部件。 示例代碼&…

通過Spring Data Neo4J操作您的圖形數據庫

在前面的一篇文章《圖形數據庫Neo4J簡介》中&#xff0c;我們已經對其內部所使用的各種機制進行了簡單地介紹。而在我們嘗試對Neo4J進行大版本升級時&#xff0c;我發現網絡上并沒有任何成型的樣例代碼以及簡介&#xff0c;而其自身的文檔也對如何使用Spring Data Neo4J介紹得語…

圖像金字塔

圖像金字塔被廣泛用于各種視覺應用中。圖像金字塔是一個圖像集合&#xff0c;集合中所有的圖像都源于同一個原始圖像&#xff0c;而且是通過對原始圖像連續降采樣活得&#xff0c;直到達到某個中止條件才停止降采樣。&#xff08;當然&#xff0c;降為一個像素肯定是中止條件。…

python使用git進行版本控制-分支管理

1、遠程克隆 最好的方式是先創建遠程庫&#xff0c;然后&#xff0c;從遠程庫克隆&#xff1a; 首先在github上創建一個新的倉庫&#xff0c;名字叫gitskills 我們勾選Initialize this repository with a README&#xff0c;這樣GitHub會自動為我們創建一個README.md文件。 下一…

【python數字信號處理】——Z變換

目錄 一、公式 二、代碼 三、結果 一、公式 頻域變量&#xff1a;z 時域變量&#xff1a;n 常見序列的Z變換&#xff1a;信號與系統復習歸納&#xff08;十一&#xff09;&#xff1a;Z變換例題_百把人的博客-CSDN博客_z變換例題基于東南大學陳從顏譯《信號、系統和變換》和…

九宮格拼圖 支持44 55等

代碼下載轉載于:https://www.cnblogs.com/ygcool/p/5395343.html

144. Binary Tree Preorder Traversal

Given a binary tree, return the preorder traversal of its nodes values. For example:Given binary tree {1,#,2,3}, 1\2/3return [1,2,3]. 該題是對樹做前序遍歷 下面分別是遞歸&#xff0c;非遞歸&#xff0c;分治三種思路的解題結果 #遞歸寫法 class Solution(object):d…

一體化點焊機將要取代分體式焊鉗在汽車制造生產線上的使用

目前大多數汽車制造廠及相關配套鈑金件廠家選用的是懸掛式點焊機及分體式焊鉗&#xff0c;從焊接變壓器的功率參數看&#xff0c;約70 % 為160KVA 的&#xff0c;約30 % 為200 kVA 的。原因主要有兩方面&#xff0c;一是新材料如鍍鋅鋼板、高強度鋼板、鋁合金板的應用&#xff…

【python數字信號處理】——線性卷積

目錄 一、公式概念 二、代碼 1、numpy庫 2、自定義打印出每一步結果 三、結果 一、公式概念 線性卷積_百度百科線性卷積(linear convolution) 在時域描述線性系統輸入和輸出之間關系的一種運算。這種運算在線性系統分析和信號處理中應用很多&#xff0c;通常簡稱卷積。中文…

activiti web流程設計器 整合視頻 教程 SSM和獨立部署的方式

本視頻為activiti工作流的web流程設計器整合視頻教程整合Acitiviti在線流程設計器(Activiti-Modeler 5.21.0 官方流程設計器&#xff09;本視頻共講了兩種整合方式1. 流程設計器和其它工作流項目分開部署的方式2. 流程設計器和SSM框架項目整合在一起的方式視頻大小 1.13 GB ~【…

移動端判斷橫屏豎屏

1. CSS判斷橫屏豎屏 寫在同一個CSS中 media screen and (orientation: portrait) {   /*豎屏 css*/} media screen and (orientation: landscape) and (min-width:450px){   /*橫屏 css*/}分開寫在2個CSS 豎屏<link rel"stylesheet" media"all and (orie…

第五章 - 圖像形態學 - 基于圖像金字塔的圖像分割(cvPyrSegmentation)

本例程涉及到幾個數據結構及方法&#xff0c;CvMemStorage、cvPyrSegmentation()、CvConnectedComp、cvGetSeqElem(). CvMemStorage CvMemStorage Growing memory storage typedef struct CvMemStorage { struct CvMemBlock* bottom;/* first allocated block */ struct CvM…

泛型參數轉換的問題

泛型不同參數類型生成的對象是相互獨立的。 //如 Tuple<string> ts; Tuple<object> to; //ts to 是兩個類型的對象。很多時候&#xff0c;我們希望實現 to ts 這種操作&#xff0c;為什么&#xff1f;因為看上去它應該如此。 為了達到這個目的&#xff0c;就要解決…

【python數字信號處理】——循環卷積(也叫圓圈卷積)

目錄 一、公式 二、代碼 方法一:遍歷 方法二:利用卷積定理 一、公式

UI-UIScrollView

- (void)viewDidLoad { [super viewDidLoad]; scrollView [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)]; scrollView.backgroundColor [UIColor redColor]; // 是否支持滑動最頂端 // scrollView.scrollsToTop NO; scrollView.delegate self; // 設…

[COCI2015]ZGODAN

題目大意&#xff1a;   給你一個數$n(n\leq10^1000)$&#xff0c;定義一個數是“美麗數”當且僅當這個數各個數位上的數奇偶性不同。   求最接近$n$的“美麗數”&#xff0c;若有多個&#xff0c;則依次輸出。 思路&#xff1a;   貪心高精度。   首先找出$n$的第一個…

OpenCV學習筆記(三)——Mat,圖像的新容器

自從版本2.0&#xff0c;OpenCV采用了新的數據結構&#xff0c;用Mat類結構取代了之前用extended C寫的cvMat和lplImage&#xff0c;更加好用啦&#xff0c;最大的好處就是更加方便的進行內存管理&#xff0c;對寫更大的程序是很好的消息。 需要注意的幾點&#xff1a;1. Mat的…

jq實現事件委托

事件委托首 頁產品展示公司簡介關于我們聯系我們轉載于:https://www.cnblogs.com/haley168/p/eventTarget.html

【python數字信號處理】——scipy庫設計濾波器(IIR為例)、繪制濾波器頻譜響應、IIR濾波器濾波、讀寫wav音頻文件

目錄 一、參考文獻 1、scipy接口 2、scipy庫介紹+IIR濾波器設計(含GUI)+繪制頻譜響應