国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

Python在數(shù)字圖像處理課程教學(xué)中的應(yīng)用

2018-01-03 22:09李振江
求知導(dǎo)刊 2017年24期
關(guān)鍵詞:直方圖調(diào)用灰度

李振江

摘 要:為了更好地開(kāi)展數(shù)字圖像處理課程的教學(xué),教師應(yīng)在分析課程實(shí)際需求以及語(yǔ)言特點(diǎn)的基礎(chǔ)上,將Python選為課程實(shí)踐語(yǔ)言,在引入Python數(shù)字圖像處理基本知識(shí)的基礎(chǔ)上,對(duì)一些最基本的圖像處理算法進(jìn)行實(shí)現(xiàn)。文章就此對(duì)Python在數(shù)字圖像處理課程教學(xué)中的應(yīng)用進(jìn)行了分析。

一、引言

數(shù)字圖像處理是一門(mén)綜合性多領(lǐng)域交叉的學(xué)科,經(jīng)過(guò)多年的發(fā)展,已經(jīng)在機(jī)器視覺(jué)、自動(dòng)控制、虛擬現(xiàn)實(shí)等領(lǐng)域取得了長(zhǎng)足的發(fā)展。很多院校都在本科階段開(kāi)設(shè)了相關(guān)課程,其教學(xué)目的在于讓學(xué)生了解數(shù)字圖像處理的一般概念,掌握該領(lǐng)域最基本的算法原理以及實(shí)現(xiàn)方法,為進(jìn)一步的學(xué)習(xí)打下基礎(chǔ)。

在該課程的教學(xué)實(shí)踐中,教師選擇一門(mén)合適的語(yǔ)言工具進(jìn)行授課尤為重要。語(yǔ)言工具的選擇要注意這樣幾個(gè)問(wèn)題;首先,語(yǔ)言要易于上手,這樣才能讓學(xué)生較快進(jìn)入圖像處理知識(shí)的學(xué)習(xí)而不是在一些編程細(xì)節(jié)上占用過(guò)多時(shí)間;其次,選擇的語(yǔ)言要與當(dāng)前新技術(shù)有較好的結(jié)合,這樣在學(xué)習(xí)過(guò)程中才有助于開(kāi)拓學(xué)生視野;最后,語(yǔ)言的擴(kuò)展性要強(qiáng),便于學(xué)生日后快速在其他相關(guān)領(lǐng)域展開(kāi)學(xué)習(xí)應(yīng)用。

二、Python語(yǔ)言的特點(diǎn)

1.簡(jiǎn)單易用

Python是一種面向?qū)ο蟮慕忉屝驼Z(yǔ)言,在其豐富外部庫(kù)的支持下,實(shí)現(xiàn)數(shù)字圖像處理的基本算法,通常都只需要不多的幾行代碼,非常方便。一方面,編程能力較低的本科學(xué)生使用Python語(yǔ)言也可以對(duì)課程內(nèi)容進(jìn)行實(shí)現(xiàn);另一方面,在具體實(shí)踐中能讓學(xué)生從煩瑣的底層邏輯(如IO操作、顯示等)中擺脫出來(lái),專注于圖像處理的方法層面。從培養(yǎng)學(xué)生學(xué)習(xí)興趣的角度講,與早期選擇使用的C++等語(yǔ)言相比,大部分學(xué)生都能使用Python完成基本算法的實(shí)現(xiàn)并將結(jié)果圖像進(jìn)行顯示,這在初期對(duì)學(xué)生的學(xué)習(xí)興趣是一種極大的鼓舞。

2.應(yīng)用廣泛

Python自20世紀(jì)90年代初誕生到現(xiàn)在,在各個(gè)領(lǐng)域都得到了廣泛的應(yīng)用。最初它的應(yīng)用較為局限,大都以系統(tǒng)管理和web編程這兩個(gè)方面為主。在該語(yǔ)言誕生之初,其一個(gè)核心的思想就是開(kāi)放和開(kāi)源,在眾多開(kāi)源社區(qū)的支持下,自2004年以來(lái),Python的使用率有一個(gè)明顯的增長(zhǎng)。2017年IEEE Spectrum發(fā)布了第四屆頂級(jí)編程語(yǔ)言交互排行榜,Python高居排行榜榜首,說(shuō)明時(shí)下Python語(yǔ)言又成為業(yè)界應(yīng)用的熱點(diǎn)。尤其是在科學(xué)計(jì)算領(lǐng)域,隨著深度學(xué)習(xí)技術(shù)引發(fā)的人工智能新一輪熱潮,眾多的代碼都是基于Python語(yǔ)言進(jìn)行發(fā)布,給這一領(lǐng)域傳統(tǒng)的霸主MATLAB帶了來(lái)巨大的挑戰(zhàn)。

3.擴(kuò)展性強(qiáng)

Python語(yǔ)言功能強(qiáng)大,有“膠水語(yǔ)言”的別稱,能夠方便地對(duì)其他語(yǔ)言實(shí)現(xiàn)的功能模塊進(jìn)行調(diào)用。對(duì)于某一具體問(wèn)題,可以使用Python搭建整體框架,然后在不同的位置調(diào)用已有的成熟模塊進(jìn)行實(shí)現(xiàn),是一種快速的軟件實(shí)現(xiàn)方法。同時(shí)Python語(yǔ)言的擴(kuò)展庫(kù)數(shù)目繁多,在很多不同的應(yīng)用領(lǐng)域,都有相應(yīng)的庫(kù)與之配合,如數(shù)學(xué)工具庫(kù)NumPy、圖形庫(kù)Tkinter或者PIL、多媒體封裝庫(kù)PyOpenGL、數(shù)據(jù)庫(kù)接口MySQLdb、機(jī)器學(xué)習(xí)庫(kù)scikit-learn等。

結(jié)合數(shù)字圖像處理課程本身的需求以及Python語(yǔ)言的自身特點(diǎn),選擇Python作為課程講授的語(yǔ)言是較為符合實(shí)際需求的。同時(shí),為了便于以后在數(shù)字圖像處理方面的進(jìn)一步學(xué)習(xí),使用了OpenCV的Python庫(kù)作為主要的圖像處理工具,同時(shí)使用NumPy作為基礎(chǔ)的數(shù)學(xué)庫(kù)。

三、Python數(shù)字圖像處理基礎(chǔ)

1.Python的安裝和庫(kù)的導(dǎo)入

有兩種方式對(duì)Python進(jìn)行安裝,使用第一種方式,在官網(wǎng)下載相應(yīng)操作系統(tǒng)的安裝包對(duì)語(yǔ)言本體進(jìn)行安裝,之后根據(jù)應(yīng)用的需求下載相應(yīng)的庫(kù),手工對(duì)其進(jìn)行安裝配置。第二種方式則是直接選用第三方的集成安裝管理環(huán)境對(duì)其進(jìn)行安裝。由于Python功能庫(kù)數(shù)目較多,且很多庫(kù)與庫(kù)之間還存在依賴關(guān)系,對(duì)于初學(xué)者建議使用第二種方式進(jìn)行安裝,推薦使用的安裝工具為Anaconda,該工具可以一鍵式安裝Python并對(duì)功能庫(kù)進(jìn)行集成化管理。在熟悉使用后,還可以使用第一種方式重新安裝一次,以便進(jìn)一步加深對(duì)Python開(kāi)發(fā)中使用到各種工具以及庫(kù)的理解。預(yù)裝好的Anaconda中沒(méi)有OpenCV,還需要在Anaconda的庫(kù)管理工具中對(duì)OpenCV進(jìn)行安裝。安裝完成后,在代碼中使用import命令導(dǎo)入相應(yīng)的庫(kù),就可以方便地使用庫(kù)的相關(guān)功能。

2.圖像的讀取、顯示以及保存

載入、顯示并保存圖像是數(shù)字圖像處理的最基本操作,對(duì)于常見(jiàn)的各種圖像格式,Python的OpenCV庫(kù)都能對(duì)其進(jìn)行較好的支持,其代碼如下所示:

import cv2

img = cv2.imread('d:/1.bmp')

cv2.imshow('title', img)

cv2.waitKey(0)

cv2.destroyAllWindows()

cv2.imwrite('d:/1.jpg',img)

第一行代碼為引入OpenCV庫(kù),后空一行,開(kāi)始對(duì)圖像進(jìn)行讀取以及顯示。第三行中,使用imread方法讀取了一幅圖像,將該圖像賦值給變量img。第四行調(diào)用imshow方法繪制窗口并顯示圖像。第五行是對(duì)窗口的阻塞式顯示,第六行銷(xiāo)毀了所有窗口。第七行調(diào)用imwrite方法保存圖像,這里的文件后綴由原始的bmp變?yōu)閖pg,該方法可以根據(jù)文件后綴自動(dòng)判別所需要保存的文件類(lèi)型。

3.圖像的像素操作

圖像基本的像素操作包括像素值的讀取與寫(xiě)入,在OpenCV中,一幅圖像被看作一個(gè)數(shù)值矩陣,矩陣中點(diǎn)的值就是對(duì)應(yīng)位置像素的值,所有和矩陣相關(guān)的操作都是調(diào)用NumPy庫(kù)來(lái)進(jìn)行處理的,其代碼如下所示:

img = cv2.imread('d:/1.bmp')endprint

pixel = img[1,1,0]

print (pixel)

pixel = 10

img[1,1,0] = 10

print (img[1,1,0])

首先讀取一幅圖像,之后使用方括號(hào)索引對(duì)指定位置的像素進(jìn)行讀取,在上述代碼中,索引位置為“[1,1,0]”,表示要讀取的像素坐標(biāo)為“1,1”,顏色通道為第0號(hào)通道。之后將數(shù)值10重新賦給這個(gè)坐標(biāo)位置,同時(shí)將數(shù)值進(jìn)行控制臺(tái)輸出,以便觀察變化。除了以單個(gè)的方式對(duì)像素進(jìn)行讀寫(xiě)外,還可以以某一坐標(biāo)范圍對(duì)像素進(jìn)行批量處理。

四、基本的圖像處理算法

1.直方圖處理

灰度直方圖是圖像不同灰度級(jí)出現(xiàn)概率的統(tǒng)計(jì),通過(guò)直方圖可以非常直觀地了解一幅圖像的明暗程度以及色彩均勻程度,是多種空間域處理技術(shù)的基礎(chǔ)。我們可以調(diào)用calcHist方法來(lái)計(jì)算一幅圖像的灰度直方圖,并調(diào)用matplotlib庫(kù)的相關(guān)方法對(duì)其進(jìn)行顯示。同時(shí),對(duì)于灰度級(jí)分布不均勻的圖像,可以使用直方圖均衡化方法對(duì)圖像進(jìn)行增強(qiáng),調(diào)用equalizeHist方法即可實(shí)現(xiàn)該操作。相關(guān)代碼如下:

import cv2

import matplotlib.pyplot as plt

img = cv2.imread('d:/1.jpg',0) # 直接讀為灰度圖像

hist_cv = cv2.calcHist([img],[0],None,[256],[0,256]) # 計(jì)算灰度直方圖

plt.plot(hist_cv) # 使用matplotlib顯示直方圖

res = cv2.equalizeHist(img) # 對(duì)原始圖像進(jìn)行直方圖均衡化計(jì)算

plt.subplot(121),plt.imshow(img,'gray') # 對(duì)比顯示均衡化前后的圖像

plt.subplot(122),plt.imshow(res,'gray')

plt.show

2.空間濾波

空間濾波是由一個(gè)鄰域模板對(duì)原始圖像進(jìn)行卷積操作,將卷積的結(jié)果代替該位置的像素,以達(dá)到某種處理的效果。最常見(jiàn)的濾波方式有兩種,一種是空間平滑濾波,常用于模糊處理和降噪處理;還有一種是空間銳化濾波,常用于突出邊緣操作。以下代碼演示了使用均值濾波器進(jìn)行平滑濾波以及使用Sobel濾波器進(jìn)行銳化濾波。

import cv2

img = cv2.imread(d:/1.jpg',0) # 直接讀為灰度圖像

blur = cv2.blur(img,(5,5)) # 使用5*5的模板對(duì)圖像進(jìn)行中值濾波

sobelx = cv2.Sobel(img, cv2.CV_64F, 1, 0) # 分別沿著x和y方向計(jì)算sobel圖像

sobely = cv2.Sobel(img, cv2.CV_64F, 0, 1)

sobelx = numpy.uint8(numpy.absolute(sobelx)) # 將計(jì)算得到的圖像轉(zhuǎn)換為uint8類(lèi)型

sobely = numpy.uint8(numpy.absolute(sobely))

sobelcombine = cv2.bitwise_or(sobelx, sobely) # 合并兩個(gè)方向的圖像 得到最終的濾波結(jié)果

3.圖像分割

圖像分割是將圖像的前景或感興趣區(qū)域從背景中提取出來(lái)的一種技術(shù)手段,是從圖像中提取相關(guān)語(yǔ)義信息的必要步驟。目前圖像分割的技術(shù)手段多種多樣,最基本的圖像分割即圖像的二值化處理,將整個(gè)圖像劃分為前景和背景兩個(gè)部分。我們可以使用手工閾值方法對(duì)圖像進(jìn)行二值化處理,還可以使用自動(dòng)閾值方法對(duì)其二值化。以下代碼演示了使用手工閾值方法以及經(jīng)典的自動(dòng)閾值方法Otsu對(duì)圖像進(jìn)行二值化分割。

import cv2

img = cv2.imread('d:/dd.jpg', 0) # 讀取灰度圖像

ret1, bwimg1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY) # 手工閾值進(jìn)行二值化

ret2,bwimg2 = cv2.threshold(img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU) # Otsu二值化

五、小結(jié)

在數(shù)字圖像處理課程的教學(xué)過(guò)程中,選擇Python作為實(shí)踐教學(xué)使用的程序語(yǔ)言,一方面,降低了數(shù)字圖像處理編程的學(xué)習(xí)門(mén)檻,提高了學(xué)生的學(xué)習(xí)積極性;另一方面,該語(yǔ)言與目前熱門(mén)技術(shù)結(jié)合緊密,擴(kuò)展性強(qiáng),為以后的相關(guān)學(xué)習(xí)打下基礎(chǔ)。本文簡(jiǎn)單介紹了該語(yǔ)言在教學(xué)過(guò)程中的基本應(yīng)用手段,如何在此基礎(chǔ)上進(jìn)一步進(jìn)行學(xué)習(xí)還有待研究。

參考文獻(xiàn):

[1]周海芳.“數(shù)字圖像處理”課程研討式教學(xué)[J].計(jì)算機(jī)教育,2010(24).

[2]李國(guó)軍.數(shù)字圖像處理的一種新方法[J].鞍山師范學(xué)院學(xué)報(bào),2016(18).endprint

猜你喜歡
直方圖調(diào)用灰度
天津港智慧工作平臺(tái)灰度發(fā)布系統(tǒng)和流程設(shè)計(jì)
華為“灰度”哲學(xué)
Arduino小車(chē)巡線程序的灰度閾值優(yōu)化方案
用直方圖控制畫(huà)面影調(diào)
基于Android Broadcast的短信安全監(jiān)聽(tīng)系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)
例析頻率分布直方圖
中考頻數(shù)分布直方圖題型展示
利用RFC技術(shù)實(shí)現(xiàn)SAP系統(tǒng)接口通信
一種基于灰度分割的調(diào)焦評(píng)價(jià)函數(shù)
C++語(yǔ)言中函數(shù)參數(shù)傳遞方式剖析
澄迈县| 榆社县| 长汀县| 茂名市| 平塘县| 建德市| 邳州市| 游戏| 高州市| 惠安县| 顺平县| 江永县| 德钦县| 安西县| 灯塔市| 永仁县| 福清市| 浦北县| 西城区| 吉水县| 阳西县| 米易县| 石嘴山市| 泊头市| 榆社县| 和顺县| 澄江县| 益阳市| 哈尔滨市| 原平市| 阿克苏市| 冀州市| 淳化县| 肥城市| 闻喜县| 登封市| 文山县| 景谷| 泸溪县| 绥江县| 新丰县|