原標題:數字圖像處理的一種新方法
摘要:以數字圖像處理課程主要內容為例,探討了Python語言在提取圖像信息、提高圖像質量和圖像數據變換時的應用方法。主要包括: 圖像直方圖、空間濾波、頻率域濾波、邊緣檢測和形態學圖像處理。應用表明,Python的處理方法簡便靈活,表征數據圖形直觀明了,適合推廣使用。
關鍵詞:Python; 數字圖像處理;課程應用
數字圖像處理課程內容主要包括提高圖像的視感質量( 亮度、色彩、對比度、幾何變換、圖像增強和復原)、提取圖像中所包含的某些特征( 圖像分割、圖像信息描述、模式識別或計算機視覺)、圖像數據的變換、編碼和壓縮等方面內容[1].在國內高等院校教學與科研中,其實驗分析多用MATLAB、Visual C ++和JAVA,且以MATLAB為主。Python是一種面向對象、支持動態語義、內置高級數據結構、語法簡潔優美、易于擴展的解釋型腳本語言(script language)[2].與MATLAB相比,Python是一門更易學、更嚴謹的程序設計語言,最重要的是其開源和免費。其擴展庫Num Py相當于Matlab,它提供了矩陣、線性代數、傅里葉變換等的解決方法,還包含Fortran代碼集、C++代碼集[3].雖然Python語言應用靈活、廣范,但在數字圖像處理中應用并不多見。為此,筆者以國內相關教材為參考[4],并省略實驗的基本原理和實驗公式的推導過程,主要借助開源跨平臺計算機視覺庫Open CV(Open Source Computer Vision Library) 已經實現了的圖像處理和計算機視覺方面的通用算法[5],并且借鑒了PIL(Python Imaging Library Python,圖像處理類庫) 的處理方法,突出表現Python語言數據分析處理、繪圖的基本過程,推動Python在數字圖像處理課程的應用研究。
1圖像直方圖
圖像是由像素構成,圖像直方圖是反映一個圖像像素分布的統計表。其橫坐標代表了圖像像素的種類,可以是灰度的,也可以是彩色的; 縱坐標代表了每一種顏色值在圖像中的像素總數或者占所有像素個數的百分比。在實際工程中,圖像直方圖在特征提取、圖像匹配等方面都有很好的應用。Open CV中利用calc Hist方法完成圖像直方圖計算[6],本次研究中代碼如下,其結果如圖1.
img = cv2.imread(‘myson.jpg’)
r,g,b = cv2.split(img)#利用通道分離技術,調整cv2和pyplot圖像色彩通道順序#
img = cv2.merge( [b,g,r])
plt.subplot(121) ,plt.imshow(img) ,plt.title(“ origin map”)
color =(‘b','g','r’)#BGR三種顏色#
plt.subplot(122)
for i,col in enumerate(color) :#循環畫出直方圖#
histr = cv2.calc Hist( [img],[i],None,[256],[0,256])
plt.plot(histr,color = col)#畫直方曲線#
plt.xlim( [0,256])
2空間濾波
濾波是信號和圖像處理中基本的任務,目的是根據應用環境的不同,選擇性地提取圖像中某些認為是重要的信息??臻g濾波是一種采用濾波處理的影像增強方法。其理論基礎是空間卷積。目的是改善影像質量,包括去除高頻噪聲與干擾??沼驗V波器分為低通( 平滑) 濾波器和高通( 銳化) 濾波器,平滑濾波減弱傅立葉空間高頻分量,用積分實現,銳化濾波減弱傅立葉空間低頻分量,用微分實現[7]. opencv包中Gaussian Blur算法用于模糊,解決圖像平滑一致問題;Sobel和Laplacian算法用于銳化,提高圖像邊緣清晰度問題。本次研究中Python使用Gaussian Blur和Laplacian算法,代碼如下,其結果如圖2.
img = cv2.imread(“ lena.png”,0)
img = cv2.Gaussian Blur(img,(3,3) ,0)#用高斯平滑處理原圖像降噪#
gray_lap = cv2.Laplacian(img,cv2.CV_16S,ksize = 3)# Laplacian濾波,經驗參數ksize設為3 #
dst = cv2.convert Scale Abs(gray_lap)#將其轉回原來的uint8形式,否則將無法顯示圖像#