python計(jì)算機(jī)視覺編程_第1頁
python計(jì)算機(jī)視覺編程_第2頁
python計(jì)算機(jī)視覺編程_第3頁
python計(jì)算機(jī)視覺編程_第4頁
python計(jì)算機(jī)視覺編程_第5頁
已閱讀5頁,還剩170頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

ProgrammingComputerVisionwithPython

安裝

。1需要準(zhǔn)備的安裝包

。2安裝Pvthon(xy)

03安裝PCV庫

0.4VLfeat

為順利幫助讀者完成本書中實(shí)例的學(xué)習(xí),譯者已對(duì)代碼做了相應(yīng)整理,下面給出在對(duì)本書實(shí)例學(xué)習(xí)前,你需要做的前期安裝

工作。注意,下面譯者給出的安裝過程是針對(duì)Windows下的,其他平臺(tái)如Linux、Mac請(qǐng)查閱中譯本附錄。

0.1需要準(zhǔn)備的安裝包

要完整復(fù)現(xiàn)書中的實(shí)例,你需要的主要四個(gè)文件包括Python(x,y)2.7.x安裝包、PCV庫、VLfeat

(/download.html評(píng)口本書用到的數(shù)據(jù)庫。Pvthon(x.v)可以在GoogleCode

((https://code.aooqle.eom/p/pvthonxv/)),PCV庫、本書整理出來的實(shí)例代碼以及本書用到的所有圖像數(shù)據(jù)可以從苴頁

(http:〃/pcvwithpvthon/)給出的鏈接下載。

0.2安裝Python(x,y)

在Windows下,譯者推薦你安裝Python(x,y)2.7.x。Python(x,y)2.7.x是一個(gè)庫安裝包,除了包含Python自身外,還包含了很

多第三方庫,下面是安裝Python(x,y)時(shí)的界面:

#Python(x,y)Setup區(qū)

ChooseComponents

ChoosewhichfeaturesofPython(xry)youwantto

install.

Checkthecomponentsyouwanttoinstallanduncheckthecomponentsyoudon'twantto

install.ClickNexttocontinue.

Selectthetypeofinstall:Full

Or,selecttheoptional二□Directories

componentsyouwishtoL-0Default

install:

???l~~lCustom

Python2.7.6

00Python

0BaseLibraries1.5.0-10

ItIC.CfC.

Description

Spacerequired:794.3MBPositjonyourmouseoveracomponenttoseeits

description.

Python(x4y),thePythonDistributionmadebyScientistsforScientists

<BackNext>Cancel

0R]PythonYE

IPytnon1.2.0-4vitables0py2exe0.6.9

BaseUbranes1.5.0*10叵B

0OpenCV2.4.8-5

BasePython1.9.2-24Eguidatd1.6.1-3EParallelPython1.6.4-3

0pyparsing2.0.1-2

setuptools3.0-12Eguiqwt2.3.1-4EPywm32218.4-2

Matptotiib1.3.1-4SendKeysO.30Veusz1.20.1-9

requests2.2.1-1叵E

netcdf41.0.8-S0pandas0.13.1-8

htmlSb0.999-2Bnose1.3.0*2E

Hopenpyxi1.8.3-6

Pip1.5.2-7fbrmlavout1.0.15*3Epywinauto0.4.2-1

PyCrypto2.6-1Cython0.21.1*100pyvisa1.4(Spsuti1.2.1-7

3PyQt4.9.6-4docutis0.11-2EPySenal2.7-10statsmodds0.5.0-1

WJxydocjn)a22.7.2-3EPyParaBd0SQLAkhemy0.8.4-10

3xy132Tpygments1.6-1EpyhdfO.8.3-20virtuatenv1.11,2*6

自QtHdp4.8.5?3Sphinx1.2.1-4ExW0.9.2-3回uncertaribes2.4.4-10

ReportLab2.7-1xlwtO.7.5-1

Spyder2.2.5-10E0freemage3.6.0-5

smplejson3.3.2-7pyint1.1.0-90Pyicui.s-i

PyQwt5.2.1-5E

r$t2pdf0.93-3wxPython-1

NumPy1.8.0-5E0lxmi3.3.1-11

PyOpenGL3.0.2-3,Ainpdb

SoPy0.13.3-6E回gevent1.0.0-4

VPython5.74-2VIK5.10.1-3

numexpr2.3-5E回paramrfco1.12.2-7

SymPy-4ITK4.5.0-40Bottleneck0.8.O,3

h5py2.2.1-5E

PMwZ3.0-6cvxopt1.1.6-1EP?y3.40mahotas1.1.0-^

Pyreadme2.0-1PyV/avelets0.2.2EETS4.4.1-60PycURL-6

scfats-tearn0.14.1-4

pyeparser2.10-2Emx3.2.7-30Babel1.3-3

cffiO.8.1-5scfcts.mdgeO.9.3-SEgnuplot0pyodbc3.0.7-1

pyzmq14.0.1-6MDPEGOAL1.10.1-3(3pyganie1.9.2-2

Torando3.2-5NebvorkX1.8.1-1Epydictxn0.9.8-20BeaubfUSoup44.322

patsy0.2.1-1PYTabte53.1.0-4Eoc_Freeze4.3.2-20pygraphviz1.3-3

pyyaml3.10-1btosc-python1.2.blESdTE3.3.2-3

fabric1.8.2-3pyOpenSSL0.13.1-1EConsole2.0.148-8

astropy0.3.0-3?EV/rMefge

pytest2.5.2-6EM<1GW

enam!0.9.0-3ESWIG2.0.11-3

gettext

從上面第二幅圖可以看出,pythonxy不僅包含了SciPy、NumPy、PyLab、OpenCV、MatplotLib,還包含了機(jī)器學(xué)習(xí)庫

scikits-learno為避免出現(xiàn)運(yùn)行實(shí)例時(shí)出現(xiàn)的依賴問題,譯者建議將上面的庫全部選上,也就是選擇“full”(譯者也是用的全部

安裝的方式進(jìn)行后面的實(shí)驗(yàn)的)。安裝完成后,為驗(yàn)證安裝是否正確,可以在Pythonshell里確認(rèn)一下OpenCV是否已安裝來

進(jìn)行驗(yàn)證,在PythonShell里輸入下面命令:

fromcv2import_version_

_version_

輸入上面命令,如果可以看到OpenCV的版本信息,則說明python(x,y)已安裝正確。

另外,需要提醒讀者的是,Python是沒有平臺(tái)區(qū)分的,這里指的平臺(tái)不是指Linux和Mac這樣的平臺(tái)概念,而是在Windows

上沒有位數(shù)的區(qū)分。舉個(gè)簡單的例子,比如你是64位的Windows系統(tǒng),你可以安裝32位的Python。對(duì)于這一部分的詳細(xì)說

明,可以參閱譯者的一篇博文Diango配置MySQL(httpj//blog/config-mysal-for-diango.html)最后一段的說

明。好了,關(guān)于Python(x,y)的安裝說明就說到這里。

0.3安裝PCV庫

PCV庫是原書作者寫的一個(gè)第三方庫,書中幾乎所有的實(shí)例到要用到改庫。假設(shè)你已從下載本書由譯者整理的中譯版源碼,

從Windowsemd終端進(jìn)入PCV所在目錄:

cdPCV

pythonsetup.pyinstall

運(yùn)行上面命令,即可完成PCV庫的安裝。為了驗(yàn)證PCV庫是否安裝成功,在運(yùn)行上面命令后,可以打開Python自帶的

Shell,在Shell輸入:

importPCV

如果未報(bào)錯(cuò),則表明你已成功安裝了該P(yáng)CV庫。

0.4VLfeat

VLFeat是一個(gè)跨平臺(tái)的開源機(jī)器視覺庫,它囊括了當(dāng)前流行的機(jī)器視覺算法,如SIFT,MSER,HOG,同時(shí)還包含了諸如K-

MEANS,HierarchicalK-means的聚類算法。本書中主要在提取sift特征時(shí)用到了VLfeat。

VLF

HomeDownloadTutorialsApplicationsDocumentation

Home

TheVLFeatopensourcelibraryimplementspopularcomputervisionaigonthmsincludingHOGSIFTMSERK-meansACMOpenSource

merarcfiicaik-meanssgg!omeratr/e/nformattonbottfenecK.SUCsuperp<xe:s,andQUICKshiftItiswritteninCforAward2010

efficiencyandcompatibilitywithinterfacesinMATLABforeaseofuseanddetaileddocumentationthroughoutIt

supportsWindows.MacOSX.andLinuxThelatestversionofVLFeatis

DownloadDocumentation

?VLFT(WindowsklacLinux)[間3匕】nds

?CAPIwithalgorithmdescnptions

?Commandline〔oois

如上圖所示,從紅色框標(biāo)的地方下載VLFeat,解壓:

?Works(D:)?/盤H?Sci_codes?vlfeat-0.9.17-bin?vlfeat-0.9.17?bin?

/)I*(T)幫助(H)

共享▼新建文件夾

ll

glnx86glnxa64macimaci64Win32win64

你需要的僅是對(duì)應(yīng)平臺(tái)的可執(zhí)行文件,譯者系統(tǒng)是32位的,所以選用的是Win32。注意目前VLFeat最新發(fā)布版已到0.9.18

了。對(duì)于0.9.18,目錄結(jié)構(gòu)和0.9.17的一樣,所以你也僅需bin下對(duì)應(yīng)的文件夾下的可執(zhí)行文件。將該Win32拷貝到你想放置

的某個(gè)目錄,譯者將其放置在計(jì)算機(jī)的如下目錄:

?Works(D:)?mltools?

V)I*(T)幫助(H)

共享▼新建文件夾

PCVpython-grwin32vlfea

aph-core-

1.8.2

需要注意的是,譯者將原來的“bin”文件名重新"winSZvIfeat"。完成該步驟后,進(jìn)入PCV所在目錄:

>Works(D:)?mltools>PCV>PCV?localdescriptors

V)I*C0幫助(H)

,共享▼新建文件夾

購購?g

_init_.pydsift.pyharris.pysift.py

打開sift.py,找到下面代碼:

defprocess__image(imagename,resultname,params="--edge-thresh10--peak-thresh5"):

"""processanimageandsavetheresuLtsinafiLe"""

ifimagename[-3:]!='pgm':

^createapgmfiLe

im=Image.open(imagename).convert('L')

im.save('tmp.pgm')

imagename='tmp.pgm'

cmmd=str("D:\mltools\win32vlfeat\sift.exe"+imagename+"--output="+resultname+

""+params)

os.system(cmmd)

print'processed',imagename,'to',resultname

將cmmd中的目錄修改為你自己放置的Vlfeatbin所在目錄。這里稍微解釋一下os.system(cmmd)這句話的意思,這里Python

通過os.system()調(diào)用外部可執(zhí)行文件,也就是Vlfeatbin目錄下的sift.exe。

好了,安裝完后,你便可以運(yùn)行書中的大部分實(shí)例代碼了。這里之所以是“大部分”是因?yàn)闀械哪承?shí)例,還要用到別的

庫。

?作者譯者(author.html)第一章圖像處理基礎(chǔ)》(chaoterl.html)

。。

?2014YonaYuan(http:〃vuanvonci.orQ)保留部分權(quán)力。在線閱讀版本基于“CC3.0BY-SA協(xié)議"(http:〃creativecommons.ora/licenses/bv-sa/3.0/)發(fā)

ProgrammingComputerVisionwithPython

第一章圖像處理基礎(chǔ)

1.1PIL-Pvthon圖像庫

1.1.1對(duì)圖片進(jìn)行格式轉(zhuǎn)換

1.1.2創(chuàng)建縮略圖

1.1.3拷貝并粘貼區(qū)域

1.1.4調(diào)整尺寸及旋轉(zhuǎn)

1.2MatDlotlib庫

1.2.1畫圖、描點(diǎn)和線

1.2.2圖像輪廓和直方圖

1.2.4交互注釋

1.3NumPy庫

1.3.1圖像數(shù)組表示

1.3.2灰度變換

1.3-3調(diào)整圖像尺寸

133直方圖均衡化

1.3.4圖像平均

1.3.5對(duì)圖像進(jìn)行主成分分析

1.3.6Pickle模塊

1.4SciPv模塊

1.4.1圖像模糊

1.4.2圖像差分

1.4.3形態(tài)學(xué)-物體計(jì)數(shù)

1.4.4有用的SciPv模塊

1.5更高級(jí)的例子:圖像降噪

1.1PIL-Python圖像庫

PIL(PythonImagingLibrary)圖像庫提供了很多常用的圖像處理及很多有用的圖像基本操作。PIL庫下載地

址[/products/pil/](http:〃www.D/Droducts/Dil/)c下面演示原書P001-Figi-1讀入一幅

圖片的例子:

#-*-coding:utf-8

fromPILimportImage

frompylabimport*

#添加中文字體支持

frommatplotlib.font_managerimportFontProperties

font=FontProperties(fname=r"c:\windows\fonts\SimSun.ttc",size=14)

figure()

pil_im=Image.open('../data/empire.jpg')

gray。

subplot(121)

title(u'原圖',,fontproperties=font)

axis('off')

imshow(pil_im)

pil_im=Image.open('../data/empire.jpg').convert(1L1)

subplot(122)

title(u'灰度圖,,fontproperties=font)

axis('off')

imshow(pil__im)

show()

運(yùn)行上面的代碼,可以得出原書P002-Fig1-1中的前兩幅圖片,如下:

更多關(guān)于PIL的實(shí)例,可以參閱PIL在線文檔fwww./librarv/pil/handbook/index.htm./l

(http:〃/library/pil/handbook/index.htm)。

1.1.1對(duì)圖片進(jìn)行格式轉(zhuǎn)換

利用save()方法,PIL可以將圖片保存問很多不同的圖像格式。下面演示原書P002中對(duì)圖片進(jìn)行轉(zhuǎn)換的例子。

#-*-coding:utf-8

fromPCV.tools.imtoolsimportget_imlist#導(dǎo)入原書的PCV模塊

fromPILimportImage

importos

importpickle

filelist=get_imlist('../data/convert_images_format_test/')#獲取convert_images_format_test文件夾

下的圖片文件名(包括后綴名)

imlist=file('../data/convert_images_format_test/imlist.txt'/w')#將獲取的圖片文件列表保存到

imList.txt中

pickle,dump(filelist,imlist)#序列化

imlist.close()

forinfileinfilelist:

outfile=os.path.splitext(infile)[0]+".png"#分離文件名與擴(kuò)展名

ifinfile!=outfile:

try:

Image.open(infile).save(outfile)

exceptlOError:

print"cannotconvert",infile

上面3^0代而2965b舊211651文件夾是譯者放的測(cè)試圖片,共24幅圖像,如下圖示,測(cè)試圖片全部為.jpg格式的。譯者在

源代碼中添加了部分代碼以便將獲取的圖像文件名列表保存下來,同時(shí)將原來的所有圖像轉(zhuǎn)化為.png格式的圖像。注意,

在載入模塊時(shí),載入了原書的PCV模塊,關(guān)于PCV模塊的安裝,詳見[PCV模塊的安裝1。運(yùn)行上面代碼,可以得到轉(zhuǎn)化格式后

的圖像,運(yùn)行結(jié)果為:

?JP£G09?(24)ukbenchJPG格式圖像

隨I

ulcbenchOukbefxhOvkb?xhOukb?<tchOuktMAchOukberxM)ukb?KhOukbeochOukbeixhOukbrxHOukbefKhO9kbechO

0000加OOOHP90002jpgOOOJjpgOOWMOOOSjpg0006jpg0007而g0008^90009MOOlOjpg0011jP9

M

ukbenchOukbeixhOukbenchOukkxochOukbenchOukbenchOulcbenchOulcb^chOukbenchOukbenchOukbechOukbc?KhO

0012^0013*9OOMjpgOOlSipgOOl6jpg0017jpg00叫pg0019加9820jpgOWljpg0022;pg823通

?PNG圖6(24)ukbenchJPG格式轉(zhuǎn)化為PNG格式后的圖像

ukbeftchOukbenchOukbenchOukbmchOukb?fxhOukbetxhOukb?<KhOukbeochOukbenchOukbenchOukb?nchOukbeocH)

0000.pr>9OOOl.pngOOO2.pn90001吟0004.pr^0005,po9OOO&pn90007.pr?9OOOa-png0009.pn9OOIO.P09OOltpng

時(shí)跟睡ja

uicbt^liOukb??xH>ukbenchOukbeochOukb?r<>?0ukbenchOwkbe<KhOukbenchOukben<2ukbeechOukbenchO

0012^rtgOOllpng814呻001$^r?981&p^9OO17.png001&.|X>9819fOO2O.pftg82l.p?90022.pc90023^9

?文本文檔⑴

ukbenchJPG格式圖像文件名列表

■mKttM

1.1.2創(chuàng)建縮略圖

利用PIL可以很容易的創(chuàng)建縮略圖,設(shè)置縮略圖的大小,并用元組保存起來,調(diào)用thumnail。方法即可生成縮略圖。創(chuàng)建縮略

圖的代碼見下面。

1.1.3拷貝并粘貼區(qū)域

調(diào)用crop。方法即可從一幅圖像中進(jìn)行區(qū)域拷貝,拷貝出區(qū)域后,可以對(duì)區(qū)域進(jìn)行旋轉(zhuǎn)等變換。關(guān)于拷貝、旋轉(zhuǎn)粘貼的代碼

見下面。

1.1.4調(diào)整尺寸及旋轉(zhuǎn)

要對(duì)一幅圖像的尺寸進(jìn)行調(diào)整,可以調(diào)用resize。方法,元組中放置的便是你要調(diào)整尺寸的大小。如果要對(duì)圖像進(jìn)行旋轉(zhuǎn)變換

的話,可以調(diào)用rotate。方法。

下面代碼顯示上面提到的所有的圖像處理操作,即原圖顯示、RGB圖像轉(zhuǎn)為灰度圖像、拷貝粘貼區(qū)域、生成縮略圖、調(diào)整圖

像尺寸、圖像旋轉(zhuǎn)變換的實(shí)例代碼:

#-*-coding:utf-8

fromPILimportImage

frompylabimport*

#添加中文字體支持

frommatplotlib.font_managerimportFontProperties

font=FontProperties(fname=r"c:\windows\fonts\SimSun.ttc",size=14)

figure()

#顯示原圖

pil_im=Image.open('../data/empire.jpg*)

printpil_im,mode,pil_im.size^pil_im.format

subplot(231)

title(u'原圖‘,fontproperties=font)

axis('off')

imshow(pil_im)

#顯示灰度圖

pil_im=Image.open('../data/empire.jpg1).convert('L')

gray()

subplot(232)

title(u'灰度圖',fontproperties二font)

axis('off')

imshow(pil_im)

#拷貝粘貼區(qū)域

pil_im=Image.open('../data/empire.jpg')

box=(100,100,400,400)

region=pil_im.crop(box)

region=region.transpose(Image.ROTATE_180)

pil_im.paste(region,box)

subplot(233)

title(u'拷貝粘貼區(qū)域',fontproperties=font)

axis('off')

imshow(pil_im)

#縮略圖

pil_im=Image.open('../data/empire.jpg')

size=128,128

pil_im.thumbnail(size)

printpil_im.size

subplot(234)

title(u'縮略圖',fontproperties=font)

axis('off')

imshow(pil_im)

pil_im.save('../images/ch01/thumbnail.jpg')#保存縮略圖

#調(diào)整圖像尺寸

pil_im=Image.open('../data/empire.jpg')

pil_im=pil_im.resize(size)

printpil__im.size

subplot(235)

title(u'調(diào)整尺寸后的圖像’,fontproperties=font)

axis('off')

imshow(pil_im)

#旋轉(zhuǎn)圖^^45。

pil_im=Image.open('../data/empire.jpg')

pil_im=pil_im.rotate(45)

subplot(236)

旋轉(zhuǎn)45。后的圖像',fontproperties=font)

axis('off')

imshow(pil_im)

show()

運(yùn)行上面代碼,可得P002Figure中出現(xiàn)的所有實(shí)例圖,結(jié)果如下:

原圖灰度圖拷貝粘貼區(qū)域

縮略圖旋轉(zhuǎn)45°后的圖像

調(diào)整尺寸后的圖像

1.2Matplotlib庫

當(dāng)在處理數(shù)學(xué)及繪圖或在圖像上描點(diǎn)、畫直線、曲線時(shí),Matplotlib是一個(gè)很好的繪圖庫,它比PIL庫提供了更有力的特性。

Matplotlib是開源的,可以在[matD](http:〃/)上下載.并且它還提供了詳細(xì)

的文檔及教程。這里,會(huì)展示一些我們?cè)诒緯竺鏁?huì)用到的函數(shù)的一些實(shí)例。

1.2.1畫圖、描點(diǎn)和線

雖然Matplotlib可以創(chuàng)建漂亮的條狀圖、餅圖、散點(diǎn)圖等,但是在很多計(jì)算機(jī)視覺應(yīng)用場(chǎng)合,其實(shí)只用到了一些常用的命

令。下面展示在一幅圖像上描一些點(diǎn)和畫一條直線的例子。

#-*-coding:utf-8-*-

fromPILimportImage

frompylabimport*

#添加中文字體支持

frommatplotlib.font_managerimportFontproperties

font=FontProperties(fname=r"c:\windows\fonts\SimSun.ttc",size=14)

im=array(Image.open('../data/empire.jpg'))

figure()

#畫有坐標(biāo)軸的

subplot(121)

imshow(im)

x=[100,100,400,400]

y=[200,500,200,500]

plot(x,y,'r*')

plot(x[:2],y[:2])

title(u'繪圖:"empire.jpg",,fontproperties=font)

#不顯示坐標(biāo)軸

subplot(122)

imshow(im)

X=[100,100,400,400]

y=[200,500,200,500]

plot(x,y,'r*')

plot(x[:2],y[:2])

axis('off')#顯示坐標(biāo)軸

title(u'繪圖:"empire.jpg",,fontproperties=font)

show()

運(yùn)行上面代碼,即可得原書P005中Figure1-2中左邊的結(jié)果。去掉上面代碼中坐標(biāo)軸的注釋,即可得Figure1-2中右邊的結(jié)

果。運(yùn)行結(jié)果如下:

繪圖:"empire.jpg”

-100

0

100

200

300

400

500

600

700

8嗚000100200300400500600

1.2.2圖像輪廓和直方圖

下面我們看兩個(gè)特別的例子:圖像輪廓線和圖線等高線。在畫圖像輪廓前需要轉(zhuǎn)換為灰度圖像,因?yàn)檩喞枰@取每個(gè)坐標(biāo)

[x,y]位置的像素值。下面是畫圖像輪廓和直方圖的代碼:

#?*-coding:utf-8

fromPILimportImage

frompylabimport*

#添加中文字體支持

frommatplotlib.font_managerimportFontProperties

font=FontProperties(fname=r"c:\windows\fonts\SimSun.ttc"?size=14)

im=array(Image.open('../data/empire.jpg').convert('L'))#打開圖像,并轉(zhuǎn)成灰度圖像

figure()

subplot(121)

gray()

contour(im,origin='image')

axis('equal')

axis('off')

title(u'圖像輪廓,,fontproperties=font)

subplot(122)

hist(im.flatten()>128)

title(u'圖像直方圖',fontproperties二font)

pit.xlim([0,260])

pit.ylim([0,11000])

show()

運(yùn)行上面代碼,可以得到書中的圖1-3所示的結(jié)果:

困像輪廓圖像直方圖

10000

1.2.4交互注釋

有時(shí),用戶需要和應(yīng)用進(jìn)行交互,比如在圖像中用點(diǎn)做標(biāo)識(shí),或者在一些訓(xùn)練數(shù)據(jù)中進(jìn)行注釋。PyLab提供了一個(gè)很簡潔好

用的函數(shù)ginput。,它可以完成該任務(wù),下面是一個(gè)演示交互注釋的簡短示例:

fromPILimportImage

frompylabimport*

im=array(Image.open('../data/empire.jpg'))

imshow(im)

print'Pleaseclick3points'

imshow(im)

x=ginput(3)

print'Youclicked:',x

show()

上面代碼先讀取empire.jpg圖像,顯示讀取的圖像,然后用ginput。交互注釋,這里設(shè)置的交互注釋數(shù)據(jù)點(diǎn)設(shè)置為3個(gè),用戶

在注釋后,會(huì)將注釋點(diǎn)的坐標(biāo)打印出來。

1.3NumPy庫

NumPy(httD:〃www.sciQy.or?g/NumPy/)是Pvthon一個(gè)流行的用于科學(xué)計(jì)算包。它包含了很多諸如矢量、矩陣、圖像等其他

非常有用的對(duì)象和線性代數(shù)函數(shù)。在本書中幾乎所有的例子都用到了NumPy數(shù)組對(duì)象。NumPv可以在sciD/Download]

(http:〃/Download)下載,在線文檔(http:〃docs.sciDy.orq/doc/numDy/)包含了很多常見問題的答案。

1.3.1圖像數(shù)組表示

在前面載入圖像的示例中,我們將圖像用array。函數(shù)轉(zhuǎn)為NumPy數(shù)組對(duì)象,但是并沒有提到它表示的含義。數(shù)組就像列表一

樣,只不過它規(guī)定了數(shù)組中的所有元素必須是相同的類型。下面的例子用于說明圖像數(shù)組表示:

#coding:utf-8

fromPILimportImage

frompylabimport*

im=array(Image.open('../data/empire.jpg'))

printim.shape,im.dtype

im=array(Image.open('../data/empire.jpg').convert('L'),'f')

printim.shape.,im.dtype

運(yùn)行上面代碼,會(huì)給出下面結(jié)果:

(800,569,3)uint8

(800,569)float32

數(shù)組可以通過索引訪問和操作其中的元素。比如:value=im[i,j,k]。i,j是坐標(biāo),k是顏色通道。對(duì)于多個(gè)元素,可以用切片操

作,如:

im[ij:]=im[j:]#setthevaluesofrowiwithvaluesfromrowj

im[:,i]=100#setallvaluesincolumnito100

im[:100,:50].sum()#thesumofthevaluesofthefirst100rowsand50columns

50:100]#rows50-100,columns50-100(100thnotincluded)

im[i].mean()#averageofrowi

im[:,-1]#lastcolumn

:](orim[-2])#secondtolastrow

在使用數(shù)組時(shí)有很多操作和方式,我們會(huì)在后面介紹貫穿于本書所需要的操作。

1.3.2灰度變換

在讀入圖像到NumPy數(shù)組后,就可以對(duì)它進(jìn)行任何我們想要的操作了。對(duì)圖像進(jìn)行灰度變換便是一個(gè)簡單的例子。這里給出

一些進(jìn)行灰度變換的例子:

#-*-coding:utf-8

fromPILimportImage

fromnumpyimport*

frompylabimport*

im=array(Image.open('../data/empire.jpg').convert('L'))

printint(im.min()),,int(im.max())

im2=255-im#invertimage

printint(im2.min()),int(im2.max())

im3=(100.0/255)*im+100#damptointervaL100...200

printint(im3?min()),int(im3.max())

im4=255.0*(im/255.0)**2#squared

printint(im4?min()),int(im4.max())

figure()

gray。

subplot(l,,3,1)

imshow(im2)

axis('off')

title(r'$f(x)=255-x$')

subplot(1,3,2)

imshow(im3)

axis('off')

title(r'$f(x)=\frac{100}{255}x+100$,)

subplot(lj3,3)

imshow(im4)

axis('off')

title(r'$f(x)=255(\frac{x}{255})A2$')

show()

上面左邊灰度變換函數(shù)采用的是f(x)=255-x,中間采用的是f(x)=(100/255)x+100,右邊采用的是變換函數(shù)是f(x)=255(x/255)A2。

運(yùn)行上面代碼,可以得到P009Fig1-5中的結(jié)果:

/(a?)=255—cf⑺=擺,+100f⑺=255(短)2

正如上面代碼所示,你可以用通過下面命令檢查每幅圖像的最小值和最大值:

printint(im.min()),,int(im.max())

如果你對(duì)每幅圖像用到了打印最小像素值和最大像素值,你會(huì)得到下面的輸出結(jié)果:

2255

0253

100200

0255

1.3-3調(diào)整圖像尺寸

NumPy數(shù)組符成為我們對(duì)圖像及數(shù)據(jù)進(jìn)行處理的最主要工具,但是調(diào)整矩陣大小并沒有一種簡單的方法。我們可以用PIUS

像對(duì)象轉(zhuǎn)換寫一個(gè)簡單的圖像尺寸調(diào)整函數(shù):

defimresizeCim^sz):

"""ResizeanimagearrayusingPIL."""

pil_im=Image.fromarray(uint8(im))

returnarray(pil_im.resize(sz))

上面定義的調(diào)整函數(shù),在imtools.py中你可以找到它。

1.3.3直方圖均衡化

一個(gè)極其有用的例子是灰度變換后進(jìn)行直方圖均衡化。圖像均衡化作為預(yù)處理操作,在歸一化圖像強(qiáng)度時(shí)是一個(gè)很好的方

式,并且通過直方圖均衡化可以增加圖像對(duì)比度。下面是對(duì)圖像直方圖進(jìn)行均衡化處理的例子:

#-*-coding:utf-8

fromPILimportImage

frompylabimport*

fromPCV.toolsimportimtools

#添加中文字體支持

frommatplotlib.font_managerimportFontProperties

font=FontProperties(fname=r"c:\windows\fonts\SimSun.ttc",size=14)

im=array(Image.open('../data/empire.jpg').convert('L'))#打開圖像,并轉(zhuǎn)成灰度圖像

=array(Image.open(r../data/AquaTermi_LOMContrast.JPG').convert('L'))

im2,cdf=imtools.histeq(im)

figure()

subplot(2j2,1)

axis('off')

gray。

原始圖像‘,fontproperties=font)

imshow(im)

subplot(2,2,2)

axis('off')

直方圖均衡化后的圖像‘,fontproperties=font)

imshow(im2)

subplot(2J2,3)

axis('off')

title(u,原始直方圖',fontproperties=font)

im.fLattenOj128,cumuLative=True,normed=True)

hist(im.flatten(),128,normed=True)

subplot(2,2,4)

axis('off')

title(u'均衡化后的直方圖',fontproperties=font)

#hist(im2.fLatten()J128,cumulative;True,normed=True)

hist(im2.flatten()>128,normed=True)

show()

運(yùn)行上面代碼,可以得到書中的結(jié)果:

原始圖像直方圖均衡化后的圖像

原始直方圖均衡化后的直方圖

原始圖像直方圖均衡化后的圖像

原始直方圖均衡化后的直方圖

1.3.4圖像平均

對(duì)圖像取平均是一種圖像降噪的簡單方法,經(jīng)常用于產(chǎn)生藝術(shù)效果。假設(shè)所有的圖像具有相同的尺寸,我們可以對(duì)圖像相同

位置的像素相加取平均,下面是一個(gè)演示對(duì)圖像取平均的例子:

#-*-coding:utf-8-*-

fromPCV.tools.imtoolsimportget_imlist

fromPILimportImage

frompylabimport*

fromPCV.toolsimportimtools

#添加中文字體支持

frommatplotlib.font_managerimportFontProperties

font=FontProperties(fname=r"c:\windows\fonts\SimSun.ttc'\size=14)

filelist=get_imlist('../data/avg/')#獲取convert_tmages_format_test文件夾下的圖片文件名(包括后綴

名)

avg=pute_average(filelist)

forimpathinfilelist:

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論