王曉鵬
(遼寧建筑職業(yè)學院,遼寧 遼陽 111000)
OpenCV的全稱是Open Source Computer Vision Library。它是一個開源發(fā)行的跨平臺計算機視覺庫,可以運行在Linux、Windows和Mac OS操作系統(tǒng)上,由一系列C函數(shù)和少量C++類構成,提供多種語言接口,它不依賴于其他外部庫,擁有多個跨平臺的中、高層API及多種圖像處理和計算機視覺方面的通用算法。
中值濾波技術是基于排序統(tǒng)計理論的一種能有效抑制噪聲的非線性信號處理技術,其基本原理是:數(shù)字圖像或數(shù)字序列中某一點的數(shù)值[1],由該點的一個鄰域中各點值的中值來代替,讓周圍的像素值接近真實值,從而消除孤立的噪聲點。采用的方法是使用序列結構的二維滑動模板,將模塊內的像素按照像素值的大小進行排序,生成單調上升或下降的為二維數(shù)組。二維中值濾波輸出為g(x,y)=med{f(xk,y-l),(k,l∈W)},其中g(x,y),f(x,y)分別為原始圖像和處理后的圖像,W為二維模板,通常為2×2或3×3區(qū)域,可以是不同的的形狀。
數(shù)學形態(tài)濾波幾個主要流程為膨脹、腐蝕、膨脹處理、腐蝕處理過程。膨脹主要是將與物體接觸的所有背景點合并到該物體中,并使邊界向外部擴張,利用膨脹技術可以填補物體中的空洞。其處理結果是與物體接觸的所有背景點合并到該物體中;腐蝕和腐蝕過程主要使邊界向內部收縮,消除小且無意義的物體或邊界點[2]。
高斯濾波是一種線性平滑濾波,適用于消除高斯噪聲,廣泛應用于圖像處理等減噪過程。高斯濾波的主要過程是對整幅圖像的像素值進行加權然后求平均值的過程,也就是說每一個像素點的數(shù)值,都由其本身和鄰域內的其他像素值經(jīng)過加權平均后得到[3]。
主要的編程思路和過程為:
1)使用imread()函數(shù)讀入原始的彩色圖像;
2)由于中值濾波只能處理灰度圖像,采用rgb2g ray命令將彩色圖像轉化為灰度圖像;
3)用imnoise()函數(shù)在灰度圖像中加入椒鹽噪聲(由圖像切割產(chǎn)生黑白相間的噪聲);
4)利用medfilt2()函數(shù)進行中值濾波,并在Matlab環(huán)境下運行。
相應的MATLAB主程序如下:
自從Open CV踏入2.0時代,使用Mat類數(shù)據(jù)結構作為主打之后,OpenCV變得越發(fā)類似于Matlab計算仿真工具[4],甚至有些函數(shù)名稱都和Matlab一樣,如大家所熟知的imread,imwrite,imshow等函數(shù),本算法程序清單如下:
本文介紹了用Matlab和Visual C++調用OpenCV函數(shù)庫來實現(xiàn)圖像濾波,包括中值濾波、高斯濾波、數(shù)學形態(tài)學濾波等處理算法,并給出相應的程序,使用這種調用OpenCV函數(shù)處理圖像的方法,提高了開發(fā)效率,減少了設計成本。該方法可廣泛應用于圖像處理領域,為解決復雜的圖像處理算法提供了簡潔的的途徑,具有一定的實用價值。
[1]石青云.數(shù)學空間中的數(shù)學形態(tài)學[M].北京:科學出版社,1997:60-62.
[2]何東健.數(shù)學圖像處理[M].西安:西安電子科技大學出版社,2003:110-116.
[3]鄭南寧.計算機視覺與模式識別[M].北京:國防工業(yè)出版社,1998:50-60.
[4]Haralick R M.Ridges and valleys on digital images[J].Computer Vision Graphics&Image Processing,1983,22(1):28-38.