機(jī)器視覺原理與應(yīng)用 課件 第3、4章 機(jī)器視覺編程基礎(chǔ)、機(jī)器視覺測(cè)量系統(tǒng)_第1頁(yè)
機(jī)器視覺原理與應(yīng)用 課件 第3、4章 機(jī)器視覺編程基礎(chǔ)、機(jī)器視覺測(cè)量系統(tǒng)_第2頁(yè)
機(jī)器視覺原理與應(yīng)用 課件 第3、4章 機(jī)器視覺編程基礎(chǔ)、機(jī)器視覺測(cè)量系統(tǒng)_第3頁(yè)
機(jī)器視覺原理與應(yīng)用 課件 第3、4章 機(jī)器視覺編程基礎(chǔ)、機(jī)器視覺測(cè)量系統(tǒng)_第4頁(yè)
機(jī)器視覺原理與應(yīng)用 課件 第3、4章 機(jī)器視覺編程基礎(chǔ)、機(jī)器視覺測(cè)量系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩107頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第3章機(jī)器視覺編程基礎(chǔ)3.1Python安裝及環(huán)境搭建 3.1.1安裝Python 3.1.2安裝PyCharmCommunity 3.1.3PyCharm初始化

3.1.4在Prompt中安裝OpenCV庫(kù)函數(shù)3.2Python編譯器3.3Python數(shù)據(jù)類型 3.3.1數(shù)值類型 3.3.2字符串類型 3.3.3布爾類型3.4變量與常量第3章機(jī)器視覺編程基礎(chǔ)3.5運(yùn)算符 3.5.1運(yùn)算符簡(jiǎn)介 3.5.2字符串類型3.6選擇與循環(huán) 3.6.1if語(yǔ)句 3.6.2while循環(huán) 3.6.3for循環(huán) 3.6.4break和continue語(yǔ)句3.7列表與元組 3.7.1序列索引 3.7.2序列切片

第3章機(jī)器視覺編程基礎(chǔ) 3.7.3創(chuàng)建 3.7.4查詢 3.7.5修改 3.7.6刪除3.8Numpy數(shù)組 3.8.1Numpy.array 3.8.2創(chuàng)建Numpy數(shù)組 3.8.3Numpy數(shù)組切片3.9字典 3.9.1字典的創(chuàng)建 3.9.2字典的常規(guī)操作

第3章機(jī)器視覺編程基礎(chǔ) 3.9.3字典的遍歷3.10函數(shù) 3.10.1函數(shù)的定義與調(diào)用 3.10.2參數(shù)傳遞3.11面向?qū)ο蟮木幊?3.11.1類與對(duì)象

3.11.2繼承與多態(tài)3.12Python調(diào)用MATLAB程序

3.1Pyhton安裝及環(huán)境搭建Anaconda官網(wǎng)

/products/individualPyCharm官網(wǎng)

/pycharm/download/#section=windowsPyCharm初始化

創(chuàng)建一個(gè)新的工程在Interpreter目錄中選擇CondaEnvironment,在Interpreter右側(cè)目錄中選擇Python.exe,此文件Python.exe在已安裝好的Anaconda目錄下,點(diǎn)擊OK完成配置安裝OpenCV庫(kù)

選擇Anaconda3下的AnacondaPrompt,在窗口中輸入pipinstall-i/simpleopencv-python==53.2Pyhton編譯器Python是一種跨平臺(tái)的計(jì)算機(jī)程序語(yǔ)言是我們進(jìn)行項(xiàng)目開發(fā)而使用的一門計(jì)算機(jī)語(yǔ)言,通俗來(lái)說(shuō)就是編寫代碼,編寫完代碼之后,我們就需要運(yùn)行,這時(shí)我們需要運(yùn)行Python代碼的運(yùn)行環(huán)境和工具Anaconda是一個(gè)開源的Python發(fā)行版本,其包含了conda、Python等180多個(gè)科學(xué)包及其依賴項(xiàng),Conda是一個(gè)開源的包、環(huán)境管理器,可以用于在同一個(gè)機(jī)器上安裝不同版本的軟件包及其依賴,并能夠在不同的環(huán)境之間切換PyCharm是一種常用的PythonIDE,該IDE提供了一些高級(jí)功能,以用于支持Django框架下的專業(yè)Web開發(fā),界面編寫代碼和運(yùn)行操作更加簡(jiǎn)單3.2Pyhton編譯器我們使用以下四種方式來(lái)運(yùn)行Python代碼,前提是已經(jīng)下載好了Python解釋器,下載后配置好其系統(tǒng)環(huán)境變量,解釋器的作用就是將Python代碼解釋成機(jī)器可以識(shí)別并執(zhí)行的語(yǔ)言1.在命令窗口中運(yùn)行快捷鍵Win+R—>輸入cmd到命令窗口—>窗口內(nèi)輸入python3.2Pyhton編譯器2.腳本方式運(yùn)行新建一個(gè)A.txt腳本文件,寫完腳本之后,然后把名稱后綴命名為.py,到命令窗口找到相應(yīng)的文件目錄,然后執(zhí)行代碼pythonA.py3.2Pyhton編譯器3.使用Python自帶的IDLE編輯器IDLE是Python原生自帶的開發(fā)環(huán)境,是迷你版的IDE,與以上方式不同的是它帶有圖形界面,有簡(jiǎn)單的編輯和調(diào)試功能,但是操作起來(lái)比較麻煩。使用方式Win+R—>輸入IDLE3.2Pyhton編譯器4.使用第三方Python的IDE編輯器使用第三方Python的IDE相對(duì)于Python自帶的IDLE而言,功能更加全面,界面更加美觀,操作起來(lái)更加容易。目前比較流行的有PyCharm、Vscode、Jupyter等,本文推薦廣泛使用的Pycharm3.3.1數(shù)值類型數(shù)值類型一般用來(lái)存儲(chǔ)程序中的數(shù)值。Python支持三種不同的數(shù)值類型,分別是整型(int)、浮點(diǎn)型(float)和復(fù)數(shù)型(complex)1.整型整型就是我們常說(shuō)的整數(shù),沒有小數(shù)點(diǎn),但是可以有正負(fù)號(hào)。在Python中,可以對(duì)整型數(shù)據(jù)進(jìn)行(+)、減(-)、乘(*)、除(/)和乘方(**)的操作另外,Python中還支持運(yùn)算次序,可以在同一個(gè)表達(dá)式中使用多種運(yùn)算,還可以使用括號(hào)來(lái)修改運(yùn)算次序3.3.1數(shù)值類型2.浮點(diǎn)型Python將帶小數(shù)點(diǎn)的數(shù)字都稱為浮點(diǎn)數(shù)。大多數(shù)編程語(yǔ)言都使用這個(gè)術(shù)語(yǔ),它可以用來(lái)表示一個(gè)實(shí)數(shù),通常分為十進(jìn)制小數(shù)形式(如5.32)和指數(shù)形式.指數(shù)形式的浮點(diǎn)數(shù)用字母e或者(E)來(lái)表示以10為底的小數(shù),e之前為整數(shù)部分,之后為指數(shù)部分,而且兩部分必須同時(shí)存在3.復(fù)數(shù)型在科學(xué)計(jì)算中經(jīng)常會(huì)遇到復(fù)數(shù)型的數(shù)據(jù),鑒于此,Python提供了運(yùn)算方便的復(fù)數(shù)類型。對(duì)于復(fù)數(shù)類型的數(shù)據(jù),一般的形式是a+bj,其中a為實(shí)部,b為虛部,j為虛數(shù)單位

3.3.2字符串類型在Python中可以使用單引號(hào)、雙引號(hào)、三引號(hào)來(lái)定義字符串,使用單引號(hào)或者雙引號(hào)表示的字符串必須在同一行表示,而三引號(hào)表示的字符串可以多行表示,這種情況用于注釋:>>>str3="""helloPtyhon!""">>>print(str3)HelloPython!在Python中不可以對(duì)已經(jīng)定義的字符串進(jìn)行修改,只能重新定義字符串運(yùn)行結(jié)果3.3.3布爾類型

布爾(bool)類型的數(shù)據(jù)用于描述邏輯運(yùn)算的結(jié)果,只有真(True)和假(False)兩種值,在Python中一般用在程序中表示條件,滿足為True,不滿足為False3.4變量與常量計(jì)算機(jī)中的變量類似于一個(gè)存儲(chǔ)東西的盒子,在定義一個(gè)變量后,可以將程序中表達(dá)式所計(jì)算的值放入該盒子中,即將其保存到一個(gè)變量中。在程序運(yùn)行過(guò)程中不能改變的數(shù)據(jù)對(duì)象稱為常量在Python中使用變量要遵循一定的規(guī)則,基本規(guī)則如下:(1)變量名只包含字母、數(shù)字和下劃線。變量名可以以字母或下劃線開頭,但不能以數(shù)字開頭。例如,可將變量命名為singal_2,但不能將其命名為2_singal。(2)變量名不包含空格,但可使用下劃線來(lái)分隔其中的單詞。例如,變量名open_cl可行,但變量名opencl會(huì)引發(fā)錯(cuò)誤。(3)變量名應(yīng)既簡(jiǎn)短又具有描述性。(4)不要將Python關(guān)鍵字和函數(shù)名用作變量名。例如,break、i、for等關(guān)鍵字不能用作變量名3.5.1運(yùn)算符簡(jiǎn)介

Python中,如正負(fù)號(hào)運(yùn)算符“+”和“-”接受一個(gè)操作數(shù)、可以將其稱為一元運(yùn)算符。而接受兩個(gè)操作數(shù)的運(yùn)算符可以稱為二元運(yùn)算符,如“*”“/”等。如果在計(jì)算過(guò)程中包含多個(gè)運(yùn)算符,其計(jì)算的順序需要根據(jù)運(yùn)算符的結(jié)合順序和優(yōu)先級(jí)而定。優(yōu)先級(jí)高的先運(yùn)算,同級(jí)的按照結(jié)合順序從左到右依次計(jì)算3.5.2運(yùn)算符優(yōu)先級(jí)按優(yōu)先順序排列:運(yùn)算符描述Or布爾“或”And布爾“與”Not布爾“非”in,notin成員測(cè)試is,isnot同一性測(cè)試<,<=,>,>=,!=,==比較|按位或^按位異或&按位與<<,>>移位+,-加法與減法*,/,%,//乘法,除法,取余,整數(shù)除法~x按位反轉(zhuǎn)**指數(shù)/冪3.6選擇與循環(huán)選擇結(jié)構(gòu)(根據(jù)程序執(zhí)行路線不同)循環(huán)結(jié)構(gòu)也是類似,需要有循環(huán)的條件和循環(huán)所執(zhí)行的程序(即循環(huán)體)單分支雙分支多分支3.6.1if語(yǔ)句

if語(yǔ)句的子句即if語(yǔ)句在條件成立時(shí)所要執(zhí)行的程序,它將在語(yǔ)句的條件為True時(shí)執(zhí)行。如果條件為False,那么將跳過(guò)子句。if單分支結(jié)構(gòu)一般的格式為:if表達(dá)式(條件):語(yǔ)句塊(子句)單分支if語(yǔ)句執(zhí)行過(guò)程3.6.1if語(yǔ)句if雙分支結(jié)構(gòu)if子句后有時(shí)也可以跟else語(yǔ)句。只有if語(yǔ)句的條件為False時(shí),else子句才會(huì)執(zhí)行if語(yǔ)句同樣可以實(shí)現(xiàn)雙分支結(jié)構(gòu),其一般格式為:

if表達(dá)式(條件):語(yǔ)句塊1(1f子句)else;語(yǔ)句塊2(else子句)單分支if語(yǔ)句執(zhí)行過(guò)程3.6.1if語(yǔ)句if多分支結(jié)構(gòu)雖然只有if或else子句會(huì)被執(zhí)行,但當(dāng)希望有更多可能的子句中有一個(gè)被執(zhí)行時(shí),elif語(yǔ)句就派上用場(chǎng)了。elif語(yǔ)句是“否則如果”,總是跟在if或另一條elif語(yǔ)句后面。它提供了另一個(gè)條件,僅在前面的條件為False時(shí)才檢查該條件。3.6.1if語(yǔ)句

if語(yǔ)句也可以實(shí)現(xiàn)多分支結(jié)構(gòu),它的一般格式為:if表達(dá)式1(條件1):語(yǔ)句塊1elif表達(dá)式2(條件2):語(yǔ)句塊2elif表達(dá)式3(條件3):語(yǔ)句塊3……elif表達(dá)式m(條件m):語(yǔ)句塊m[else:語(yǔ)句塊n]多分支if語(yǔ)句執(zhí)行過(guò)程3.6.2while循環(huán)

while循環(huán)結(jié)構(gòu)是通過(guò)判斷循環(huán)條件是否成立來(lái)決定是否要繼續(xù)進(jìn)行循環(huán)的一種循環(huán)結(jié)構(gòu),它可以先判斷循環(huán)的條件是否為True,若為True則繼續(xù)進(jìn)行循環(huán),若為False,則退出循環(huán)。while語(yǔ)句基本格式在Python中,while語(yǔ)句的一般格式為:while表達(dá)式(循環(huán)條件):語(yǔ)句塊 while循環(huán)語(yǔ)句執(zhí)行過(guò)程3.6.2while循環(huán)while語(yǔ)句中的else語(yǔ)句在Python中可以在while語(yǔ)句之后使用else語(yǔ)句。在while。運(yùn)向的循環(huán)體正常循環(huán)結(jié)束退出循環(huán)后會(huì)執(zhí)行else語(yǔ)句的子句,但是當(dāng)循環(huán)用break語(yǔ)句退出時(shí),else語(yǔ)句的子句則不會(huì)被執(zhí)行。3.6.3for循環(huán)當(dāng)想要在程序中實(shí)現(xiàn)計(jì)數(shù)循環(huán)時(shí),一般會(huì)采用for循環(huán)。在Python中,for循環(huán)是一個(gè)通用的序列迭代器,可以遍歷任何有序序列對(duì)象中的元素。for循環(huán)的格式for循環(huán)的一般格式為:for目標(biāo)變量in序列對(duì)象:語(yǔ)句塊for循環(huán)首先將序列中的元素依次賦給目標(biāo)變量,每賦值一次都要執(zhí)行一次循環(huán)體的代碼。for循環(huán)執(zhí)行結(jié)構(gòu)3.6.3for循環(huán)range在for循環(huán)中的應(yīng)用for循環(huán)經(jīng)常和range聯(lián)用。range是Python3.x內(nèi)部定義的一個(gè)迭代器對(duì)象,可以幫助for語(yǔ)句定義迭代對(duì)象的范圍。其基本格式為:range(start,stopl,[step])range的返回值從start開始,以step為步長(zhǎng),到stop結(jié)束,step為可選參數(shù),默認(rèn)為1。3.6.4break和continue語(yǔ)句break語(yǔ)句和continue語(yǔ)句都是循環(huán)控制語(yǔ)句,可以改變循環(huán)的執(zhí)行路徑。break語(yǔ)句break語(yǔ)句多用于for、while循環(huán)的循環(huán)體,作用是提前結(jié)束循環(huán),即跳出循環(huán)體。當(dāng)多個(gè)循環(huán)嵌套時(shí),break只是跳出最近的一層循環(huán)。continue語(yǔ)句continue語(yǔ)句類似于break語(yǔ)句,必須在for和while循環(huán)中使用。但是,與break語(yǔ)句不同的是,continue語(yǔ)句僅僅跳出本次循環(huán),返回到循環(huán)條件判斷處,并且根據(jù)判斷條件來(lái)確定是否繼續(xù)執(zhí)行循環(huán)。3.7列表和元組在數(shù)學(xué)里,序列也稱為數(shù)列,是指按照一定順序排列的一列數(shù),在程序設(shè)計(jì)中,序列是一種常用的數(shù)據(jù)存儲(chǔ)方式Python中內(nèi)置了5個(gè)常用的序列結(jié)構(gòu),分別是列表、元組、集合、字典和字符串在Python中,列表和元組這兩種序列可以存儲(chǔ)不同類型的元素。不同之處:列表的值是可以改變的,而元組的值是不可變的。3.7.1序列索引序列結(jié)構(gòu)遵循序列索引。序列中的每一個(gè)元素都有一個(gè)編號(hào),稱為索引。正數(shù)索引:從左往右計(jì)數(shù),第一個(gè)索引值是0負(fù)數(shù)索引:從右向左計(jì)數(shù),最后一個(gè)元素的索引值是-13.7.2序列切片切片操作是訪問(wèn)序列中元素的另一種方法,它可以訪問(wèn)一定范圍內(nèi)的元素。通過(guò)切片操作可以生成一個(gè)新的序列。實(shí)現(xiàn)切片操作的語(yǔ)法格式如下:qiepian[start:end:step]參數(shù)說(shuō)明:

qiepian:表示序列的名稱;

start:表示切片的開始位置(包括該位置),如果不指定,則默認(rèn)為0;

end:表示切片的截止位置(不包括該位置),如果不指定,則默認(rèn)為序列的長(zhǎng)度;

step:表示切片的步長(zhǎng),如果省略,則默認(rèn)為1,當(dāng)省略該步長(zhǎng)時(shí),最后一個(gè)冒號(hào)也可以省略。3.7.3創(chuàng)建列表的創(chuàng)建方法一:列表的創(chuàng)建采用在方括號(hào)中用逗號(hào)分隔的定義方式,基本形式如下:

方法二:列表也可以通過(guò)list對(duì)象來(lái)創(chuàng)建,基本形式如下:list()#創(chuàng)建一個(gè)空列表list(iterable)#創(chuàng)建一個(gè)空列表,iterable為列舉對(duì)象元素3.7.3創(chuàng)建元組的創(chuàng)建采用括號(hào)中逗號(hào)分隔的定義方式,其中,圓括號(hào)可以省略?;拘问饺缦拢?/p>

或者為:注意當(dāng)元組中只有一個(gè)項(xiàng)目時(shí),其后面的逗號(hào)可以省略,否則,Python解釋器會(huì)把(x1)當(dāng)做x1元組也可以通過(guò)tuple對(duì)象來(lái)創(chuàng)建,基本形式如下:tuple()#創(chuàng)建一個(gè)空元組tuple(iterable)#創(chuàng)建一個(gè)空元組,iterable為列舉對(duì)象元素3.7.4查詢列表和元組都支持查詢(訪問(wèn))其中的元素。在Python中,序列的每一個(gè)元素被分配一個(gè)位置編號(hào),稱為索引(index)。第一個(gè)元素的索引是0,序列中的元素都可以通過(guò)索引進(jìn)行訪問(wèn)。一般格式為:

序列名[索引]列表與元組的正向索引查詢:list_1=[1,2,3]print(list_1[1])tuple_1=((1,2,3))print(tuple_1[0])運(yùn)行結(jié)果為:3.7.4查詢另外,Python序列還支持反向索引(負(fù)數(shù)索引)。這種索引方式可以從最后一個(gè)元素開始計(jì)數(shù),即倒數(shù)第一個(gè)元素的索引是-1。這種方法可以在不知道序列長(zhǎng)度的情況下訪問(wèn)序列最后面的元素。列表與元組的反向索引查詢:list_1=[1,2,3]print(list_1[-1])tuple_1=((1,2,3))print(tuple_1[-2])運(yùn)行結(jié)果為:運(yùn)行結(jié)果為:3.7.5修改對(duì)于修改操作,由于元組的不可變性,元組的數(shù)據(jù)不可以被改變,除非將其改為列表類型。對(duì)于列表來(lái)說(shuō),要修改其中某一個(gè)值,可以采用索引的方式,這種操作也叫作賦值。

例如: list_1=[1,2,3] list_1[1]=9 print(list_1)

運(yùn)行結(jié)果為:3.7.5修改append函數(shù)的作用是在列表末尾添加一個(gè)元素extend函數(shù)用于將一個(gè)列表添加到另一個(gè)列表的尾部由于元組的不可變性,我們不能改變?cè)M的元素,但是可以將元組轉(zhuǎn)換為列表進(jìn)行修改,例如:tuple_1=[1,2,3]list_1=list(tuple_1)#元祖轉(zhuǎn)列表list_1[1]=8tuple_1=tuple(list_1)#列表轉(zhuǎn)元祖print(tuple_1)運(yùn)行結(jié)果為:3.7.5修改方法解釋說(shuō)明s.append(x)把對(duì)象x追加到列表s的尾部s.clear()刪除所有元素s.copy()復(fù)制列表s.extend(t)把序列t附加到列表s的尾部s.insert(i,x)在下標(biāo)i的位置插入對(duì)象xs.pop([i])返回并移除下標(biāo)i位置的對(duì)象,省略i時(shí)為最后的對(duì)象s.remove(x)移除列表中第一個(gè)出現(xiàn)的xs.remove()列表反轉(zhuǎn)s.sort()列表排序,默認(rèn)為升序列表對(duì)象的主要操作方法3.7.6刪除元素的刪除操作也只適用于列表,而不適用于元組,同樣,將元組轉(zhuǎn)換為列表就可以進(jìn)行刪除操作。從列表中刪除元素很容易,可以使用del、clear、remove等操作del不僅可以刪除某個(gè)元素,還可以刪除對(duì)象clear會(huì)刪除列表中所有的元素remove(x)操作會(huì)將列表中出現(xiàn)的第一個(gè)x刪除3.8Numpy數(shù)組Numpy是Python編程語(yǔ)言的擴(kuò)展,它增加了對(duì)大型多維數(shù)組和矩陣的支持,以及對(duì)這些數(shù)組進(jìn)行操作的大型高級(jí)數(shù)學(xué)函數(shù)庫(kù)的支持。在Numpy中,數(shù)組的類型為ndarray(n維數(shù)組),所有元素必須具有相同的類型3.8.1Numpy.array在OpenCV中,很多PythonAPI是基于NumPy的,Numpy是Python的一種開源數(shù)值計(jì)算擴(kuò)展,用來(lái)處理多維數(shù)組。例1:使用Numpy生成一個(gè)灰度圖像,其中的像素均為隨機(jī)數(shù)。importcv2ascvimportnumpyasnppicturegray=np.random.randint(0,256,size=[256,256],dtype=np.uint8)cv.imshow("picturegray",picturegray)cv.waitKey()cv.destroyAllWindows()3.8.1Numpy.array例2:使用Numpy生成一個(gè)彩色圖像,其中的像素均為隨機(jī)數(shù)。importcv2ascvimportnumpyasnppicturecolor=np.random.randint(0,256,size=[256,256,3],dtype=np.uint8)cv.imshow("picturecolor",picturecolor)cv.waitKey()cv.destroyAllWindows()3.8.2創(chuàng)建Numpy數(shù)組使用numpy中的函數(shù)構(gòu)建數(shù)組使用arange()函數(shù)構(gòu)建數(shù)組importnumpyasnpa1=np.arange(12) #產(chǎn)生0到11一維數(shù)組print(a1) #[01234567891011]print(a1.shape) #(12,)使用zeros()函數(shù)創(chuàng)建一個(gè)特定大小、全部填充為0的數(shù)組importnumpyasnpa2=np.zeros(9) #產(chǎn)生全是0的一維數(shù)組print(a2) #[000000000]print(a2.shape) #(9,)3.8.2創(chuàng)建Numpy數(shù)組2從Python列表中創(chuàng)建數(shù)組importnumpyasnplist1=[2,6,7,8,1]b1=np.array(list1)print(b1)#[2,6,7,8,1]print(b1.shape)#(5,)3.8.3Numpy數(shù)組切片在Python中,可以使用像m:n這樣的表達(dá)式來(lái)選擇一系列元素,選擇的是以m開頭并以n-1結(jié)尾的元素(注意不包括第n個(gè)元素)。切片m:n也可以更明確地寫為m:n:1,其中數(shù)字1表示應(yīng)該選擇m和n之間的每個(gè)元素。要從m和n之間每?jī)蓚€(gè)元素選擇一個(gè),請(qǐng)使用m:n:2,p個(gè)元素,則使用m:n:p一維數(shù)組(冒號(hào):),通過(guò)冒號(hào)分隔切片參數(shù)start:stop:step來(lái)進(jìn)行切片操作。一個(gè)參數(shù):a[i] 返回與該索引相對(duì)應(yīng)的單個(gè)元素兩個(gè)參數(shù):b=a[i:j] 表示復(fù)制a[i]到a[j-1],以生成新的list對(duì)象三個(gè)參數(shù):b=a[i:j:s] 三個(gè)參數(shù)時(shí),i、j、s為索引,通過(guò)冒號(hào)分隔切片參數(shù)start:stop:step來(lái)進(jìn)行切片操作3.9.1字典的創(chuàng)建字典就是用大括號(hào)括起來(lái)的“關(guān)鍵字:值”對(duì)的集合體,每一個(gè)“關(guān)鍵字:值”對(duì)被稱為字典的一個(gè)元素。創(chuàng)建字典的一般格式為:字典名={[關(guān)鍵字1:值1[,關(guān)鍵字2:值2,……,關(guān)鍵字n:值n]]}其中,關(guān)鍵字與值之間用“:”分隔,元素與元素之間用逗號(hào)分隔。字典中關(guān)鍵字必須是唯一的,值可以不唯一。字典的元素是列表、元祖和字典另外,在Python中還有一種創(chuàng)建字典的方法,即dict函數(shù)法3.9.2字典的常規(guī)操作訪問(wèn)在Python中可以通過(guò)關(guān)鍵字進(jìn)行訪問(wèn),一般格式為:字典[關(guān)鍵字]例如:

運(yùn)行結(jié)果為:dict_1={'name':'LiHua','score':95}print(dict_1['score'])3.9.2字典的常規(guī)操作更新在Python中更新字典的格式一般為:字典名[關(guān)鍵字]=值如果在字典中已經(jīng)存在該關(guān)鍵字,則修改它;如果不存在,則向字典中添加一個(gè)這樣的新元素。

dict_2={'name':'LiHua','score':95}dict_2['score']=80 運(yùn)行結(jié)果為:print(dict_2)dict_2['agr']=19print(dict_2)3.9.2字典的常規(guī)操作刪除在Python中刪除字典有很多種方法,這里介紹del和clear方法。del方法的一般格式如下:del字典名[關(guān)鍵字] #刪除關(guān)鍵字對(duì)應(yīng)的元素del字典真名 #刪除整個(gè)字典字典的刪除如下所示:dict_3={'name':'LiHua','score':95,'age':19}deldict_3['score']print(dict_3)dict_3.clear()print(dict_3)運(yùn)行結(jié)果為:3.9.2字典的常規(guī)操作方法說(shuō)明d.copy()字典復(fù)制,返回d的副本d.clear()字典刪除,清空字典d.pop(key)從字典d中刪除關(guān)鍵字key并返回刪除的值d.popitem()刪除字典的“關(guān)鍵字:值”對(duì),并返回關(guān)鍵字和值構(gòu)成的元祖d.fromkeys()創(chuàng)建并返回一個(gè)新字典d.keys()返回一個(gè)包含字典所有關(guān)鍵字的列表d.values()返回一個(gè)包含字典所有值的列表d.items()返回一個(gè)包含字典所有“關(guān)鍵字:值”對(duì)的列表len()計(jì)算字典中所有“關(guān)鍵字:值”對(duì)的數(shù)目字典的其他操作方法3.9.3字典的遍歷對(duì)字典進(jìn)行遍歷一般會(huì)使用for循環(huán),但建議在訪問(wèn)之前使用in或notin判斷字典的關(guān)鍵字是否存在。字典的遍歷操作如下所示。dict_4={'name':'LiHua','score':95,}forkeyindict_4.keys():print(key,dict_4[key]) forvalueindict_4.values(): print(value) foritemindict_4.items():print(item) 運(yùn)行結(jié)果為:3.10.1函數(shù)的定義和調(diào)用函數(shù)是帶有名字的代碼塊,用于完成具體的任務(wù)在Python中,函數(shù)是一種運(yùn)算或處理過(guò)程,即將一個(gè)程序段完成的運(yùn)算或處理過(guò)程放在一個(gè)自定義函數(shù)中完成。這種操作首先要定義一個(gè)函數(shù),然后可以根據(jù)實(shí)際需要多次調(diào)用它,而不用再次編寫,大大減少了工作量。函數(shù)的定義

Python函數(shù)定義的一般格式為:def函數(shù)名([形式參數(shù)]):

函數(shù)體3.10.1函數(shù)的定義和調(diào)用有了函數(shù)的定義,在之后的編程中,只要用到該函數(shù)都可以直接調(diào)用它。調(diào)用函數(shù)的一般格式為:函數(shù)名(實(shí)際參數(shù)表)如果定義的函數(shù)有形式參數(shù),那么可以在調(diào)用函數(shù)時(shí)傳入實(shí)際參數(shù),當(dāng)然,如果沒有,可以不傳,只保留一個(gè)空括號(hào)。但需要注意的是,無(wú)論有沒有參數(shù)的傳遞,函數(shù)名后的括號(hào)都不可以省略。3.10.1函數(shù)的定義和調(diào)用例:根據(jù)海倫公式計(jì)算三角形的面積。importmathdefangle_area(a,b,c):#定義一個(gè)angle_area函數(shù)

p=(a+b+c)/2s=math.sqrt(p*(p-a)*(p-b)*(p-c))#利用海倫公式計(jì)算三角形面積

returnsarea_s=angle_area(3,4,5)#調(diào)用angle_area函數(shù)print("三角形面積為:",area_s)運(yùn)行結(jié)果3.10.2參數(shù)傳遞在調(diào)用函數(shù)時(shí),Python必須將函數(shù)調(diào)用中的每個(gè)實(shí)參都關(guān)聯(lián)到函數(shù)定義中的一個(gè)形參。因此,最簡(jiǎn)單的關(guān)聯(lián)方式是基于實(shí)參的順序,這種關(guān)聯(lián)方式稱為位置實(shí)參位置實(shí)參演示defperson(name_n,sex_o):#定義一個(gè)person函數(shù)

print("Mynameis",name_n)print("Iama",sex_o)person('LiHua','man')#調(diào)用函數(shù)程序運(yùn)行結(jié)果在函數(shù)中,可根據(jù)需要使用任意數(shù)量的位置實(shí)參,Python將按順序?qū)⒑瘮?shù)調(diào)用中的實(shí)參關(guān)聯(lián)到函數(shù)定義中相應(yīng)的形參3.10.2參數(shù)傳遞關(guān)鍵字參數(shù)是傳遞給函數(shù)的名稱。由于直接在實(shí)參中將名稱和值關(guān)聯(lián)起來(lái),因此向函數(shù)傳遞實(shí)參時(shí)不會(huì)混淆。使用關(guān)鍵字參數(shù)時(shí)無(wú)須考慮函數(shù)調(diào)用中的實(shí)參順序,而且關(guān)鍵字參數(shù)還清楚地指出了函數(shù)調(diào)用中各個(gè)值的用途。在Python中,關(guān)鍵字參數(shù)的形式為:

形參名=實(shí)參值關(guān)鍵字參數(shù)演示defperson(name_n,sex_o):#定義一個(gè)person函數(shù)

print("Mynameis",name_n)print("Iama",sex_o)person(name_n='LiHua',sex_o='man')#調(diào)用函數(shù)程序運(yùn)行結(jié)果3.10.2參數(shù)傳遞編寫函數(shù)時(shí),可以為每個(gè)形參指定默認(rèn)值。在調(diào)用函數(shù)中為形參提供了實(shí)參時(shí)將使用指定的實(shí)參值;否則將使用形參的默認(rèn)值。因此,為形參指定默認(rèn)值后,可在函數(shù)調(diào)用中省略相應(yīng)的實(shí)參。在Python中,默認(rèn)值參數(shù)的形式為:

形參名=默認(rèn)值默認(rèn)值參數(shù)演示defperson(name_n,sex_o='man'): #定義一個(gè)person函數(shù)

print("Mynameis",name_n)print("Iama",sex_o)person(name_n='LiHong',sex_o='woman') #調(diào)用函數(shù),修改第二個(gè)參數(shù)person(name_n='LiHua') #采用默認(rèn)參數(shù)程序運(yùn)行結(jié)果3.11.1類與對(duì)象類是一種廣義的數(shù)據(jù),這種數(shù)據(jù)類型的元素既包含數(shù)據(jù),也包含操作數(shù)據(jù)的函數(shù)類的創(chuàng)建在Python中,可以通過(guò)class關(guān)鍵字來(lái)創(chuàng)建類。類的格式一般如下:claas類名:

類體類一般由類頭和類體兩部分組成。類頭由關(guān)鍵字class開頭,后面緊跟著類名,類體包括所有細(xì)節(jié),向右縮進(jìn)對(duì)齊3.11.1類與對(duì)象例

創(chuàng)建Dog類classDog():def_init_(self,name,age):#初始化Dog類

=nameself.age=agedefsit(self):#定義類方法

print(.title()+"isnowsitting.")defroll_over(self):#定義類方法

print(.title()+"rolledover!"根據(jù)Dog類創(chuàng)建的每個(gè)實(shí)例都將存儲(chǔ)名字和年齡,我們賦予每只小狗蹲下(sit())和打滾(roll_over())的能力。類中的函數(shù)稱為方法,之前或今后學(xué)習(xí)的方法都適用于它。_init_())是一個(gè)特殊的方法,每當(dāng)根據(jù)Dog類創(chuàng)建新實(shí)例時(shí),Python都會(huì)自動(dòng)運(yùn)行該方法3.11.1類與對(duì)象類的使用(實(shí)例化)進(jìn)行Dog類的實(shí)例化:my_dog=Dog('wangcai',6)print("Mydog'snameis"+my_.title())print("Mydogis"+str(my_dog.age)+"yearsold.")程序運(yùn)行結(jié)果:

(Dog類實(shí)例化顯示結(jié)果)3.11.1類與對(duì)象屬性和方法的訪問(wèn)句點(diǎn)表示法訪問(wèn)屬性:my_my_dog.age訪問(wèn)Dog類中定義的name和age屬性訪問(wèn)方法:my_dog=Dog('wangcai',6)my_dog.sit()my_dog.roll_over()訪問(wèn)Dog類中定義的sit()和roll.over()方法3.11.2繼承與多態(tài)繼承如果要編寫的類是另一個(gè)現(xiàn)成類的特殊版本,則可使用繼承的方法。一個(gè)類繼承另一個(gè)類時(shí),它將自動(dòng)獲得另一個(gè)類的所有屬性和方法。原有的類稱為父類,新創(chuàng)建的類稱為子類。子類除了繼承父類的屬性和方法之外,同時(shí)也有自己的屬性和方法在Python中定義繼承的一般格式為:Class子類名(父類名) 類體3.11.2繼承與多態(tài)多態(tài)多態(tài)是指不同的對(duì)象收到同一種消息時(shí)產(chǎn)生不同的行為。在Python中,消息是指函數(shù)的調(diào)用,不同的行為是指執(zhí)行不同的函數(shù)在例3-21的程序中中,Animal類和兩個(gè)子類中都有talk()方法,雖然同名,但是在每個(gè)類中調(diào)用的函數(shù)是不一樣的。當(dāng)調(diào)用該方法時(shí),所得結(jié)果取決于不同的對(duì)象,同樣的信息在不同的對(duì)象下所得的結(jié)果不同,這就是多態(tài)的體現(xiàn)。3.12Python調(diào)用MATLAB程序Python調(diào)用MATLAB函數(shù)首先要找到MATLABR2017b中python所在的安裝路徑,如D:\ProgramFiles\MATLAB\R2017b\extern\engines\python,打開文件夾setup.py是python調(diào)用MATLAB所需要的文件。3.12Python調(diào)用MATLAB程序MATLAB提供了一套python接口,即MATLABAPIforPython,需要我們自行安裝,在命令行中輸入下列命令cd:D:\ProgramFiles\MATLAB\R2017b\extern\engines\pythonpythonsetup.pyinstall3.12Python調(diào)用MATLAB程序打開MATLAB中的build目錄,將目錄中的matlab文件夾復(fù)制到D:\ProgramFiles\Python\Anaconda3\Lib文件夾下。在python中加載matlab.engine和matlab啟動(dòng)Matlab引擎3.12Python調(diào)用MATLAB程序Python調(diào)用MATLAB的.m文件如調(diào)用matlab代碼add.m,MATLAB端的代碼如下:a=1.0;b=2.0;c=a+b將add.m拷貝到python項(xiàng)目文件下。python調(diào)用add.m,python端代碼如下:importmatlabimportmatlab.engine #importnumpyasnpeng=matlab.engine.start_matlab()eng.add(nargout=0)執(zhí)行結(jié)果為:3思考與練習(xí)3-1簡(jiǎn)述Python和PyCharm安裝的具體步驟。3-2Python具有哪幾類編譯器,各有何特點(diǎn)?3-3使用Numpy生成一個(gè)灰度圖像,其中的像素均為隨機(jī)數(shù)。3-4使用Numpy生成一個(gè)彩色圖像,其中的像素均為隨機(jī)數(shù)。3-5編程實(shí)現(xiàn)使用arange()函數(shù)構(gòu)建數(shù)組的程序。3-6簡(jiǎn)述在Python中,Numpy數(shù)組切面的特點(diǎn)及引用規(guī)則。3-7舉例說(shuō)明Python調(diào)用Matlab程序的步驟。第4章機(jī)器視覺測(cè)量系統(tǒng)4.1工業(yè)相機(jī)4.2鏡頭 4.2.1鏡頭結(jié)構(gòu) 4.2.2現(xiàn)場(chǎng) 4.2.3光學(xué)倍率和數(shù)值孔徑 4.2.4景深 4.2.5曝光量和光圈數(shù) 4.2.6分辨率 4.2.7鏡頭選擇4.3光源 4.3.1光源的基本性能參數(shù) 4.3.2常見可用光源4.4圖像采集卡4.5數(shù)據(jù)通信接口

第4章機(jī)器視覺測(cè)量系統(tǒng)機(jī)器視覺測(cè)量系統(tǒng)包含工業(yè)相機(jī)、光源照明系統(tǒng)與圖像處理軟件、圖像采集系統(tǒng)、數(shù)據(jù)通信接口。除具備上述硬件系統(tǒng)后,工業(yè)相機(jī)成像后,需要進(jìn)行攝像機(jī)標(biāo)定,包括坐標(biāo)系間的變換關(guān)系,工業(yè)相機(jī)成像模型。一個(gè)典型的工業(yè)機(jī)器視覺系統(tǒng)包括:光源、鏡頭(定焦鏡頭、變倍鏡頭、遠(yuǎn)心鏡頭、顯微鏡頭)、相機(jī)(包括CCD相機(jī)和COMS相機(jī))、圖像處理單元(或圖像捕獲卡)、圖像處理軟件、監(jiān)視器、通訊/輸入輸出單元等。第4章機(jī)器視覺測(cè)量系統(tǒng)工業(yè)機(jī)器視覺系統(tǒng)定焦鏡頭

光源鏡頭圖像處理單元相機(jī)圖像處理軟件監(jiān)視器通訊/輸入輸出單元變倍鏡頭

遠(yuǎn)心鏡頭

顯微鏡頭

CCD相機(jī)

COMS相機(jī)

4.1

工業(yè)相機(jī)工業(yè)相機(jī)是視覺系統(tǒng)的關(guān)鍵部件,其性能直接影響到識(shí)別精度和定位抓取的精度。選用工業(yè)相機(jī)要考慮到工件托盤的特征、工件的輪廓特征以及光線等條件。工業(yè)相機(jī)又稱工業(yè)攝像頭、工業(yè)攝像頭、工業(yè)照相機(jī)等。根據(jù)所使用的的芯片類型分為工業(yè)CCD相機(jī)和工業(yè)CMOS相機(jī);根據(jù)信號(hào)種類分為工業(yè)模擬相機(jī)和工業(yè)數(shù)字相機(jī);其中數(shù)字相機(jī)又分為:GigE千兆網(wǎng)、USB2.0、USB3.0、CameraLink、1394A和1394B等多種接口。4.1

工業(yè)相機(jī)CCD相機(jī)

COMS相機(jī)

根據(jù)使用的芯片不同:根據(jù)信號(hào)種類:工業(yè)數(shù)字相機(jī)

工業(yè)模擬相機(jī)

GigE千兆網(wǎng)USB2.0 USB3.0 CameraLink

1934A

1934B

4.2

鏡頭鏡頭相當(dāng)于人眼的晶狀體,如果沒有晶狀體,人眼看不到任何物體;如果沒有鏡頭,攝像機(jī)所輸出的圖像就是白茫茫的一片,沒有清晰的圖像輸出。當(dāng)人眼的睫狀體無(wú)法按需要調(diào)整晶狀體凸度時(shí),將出現(xiàn)人們常說(shuō)的近視(或遠(yuǎn)視)眼,眼前的景物就變得模糊不清;攝像機(jī)與鏡頭的配合也有類似現(xiàn)象,當(dāng)圖像變得不清楚時(shí),可以調(diào)整攝像機(jī)的像方焦點(diǎn),改變攝像機(jī)芯片與鏡頭基準(zhǔn)面的距離(相當(dāng)于調(diào)整人眼晶狀體的凸度),可以將模糊的圖像變得清晰。由此我們知道,光學(xué)鏡頭的主要作用是將景物的光學(xué)圖像聚焦在圖像傳感器的光敏陣列上。視覺系統(tǒng)處理的所有圖像信息均通過(guò)鏡頭得到,鏡頭的質(zhì)量直接影響視覺系統(tǒng)的整體性能4.2

鏡頭分類依據(jù)類型說(shuō)明工作波長(zhǎng)紫外鏡頭同一光學(xué)系統(tǒng)對(duì)不同波長(zhǎng)的光其折射率不同,這導(dǎo)致同一點(diǎn)發(fā)出的不同波長(zhǎng)的光成像時(shí)不能會(huì)聚成一點(diǎn),從而產(chǎn)生色差。常用鏡頭的消色差設(shè)計(jì)只針對(duì)可見光范圍,而應(yīng)用于其他波段的鏡頭則需要進(jìn)行專門的消色差設(shè)計(jì)可見光鏡頭近紅外鏡頭紅外鏡頭變焦與否定焦鏡頭(按焦距長(zhǎng)短分)魚眼鏡頭焦距長(zhǎng)短劃分不是以焦距的絕對(duì)值為首要標(biāo)準(zhǔn),而是以像角的大小為主要區(qū)分依據(jù),所以當(dāng)靶面的大小不等時(shí),其標(biāo)準(zhǔn)鏡頭的焦距大小也不同短焦鏡頭標(biāo)準(zhǔn)鏡頭長(zhǎng)焦鏡頭變焦鏡頭手動(dòng)變焦變焦鏡頭最長(zhǎng)和最短焦距值之比稱為變焦倍率電動(dòng)變焦4.2

鏡頭視場(chǎng)大小廣角鏡頭視角90°以上,觀察范圍較大,短焦距提供寬角度視場(chǎng),魚眼鏡頭是一種焦距約6~16mm的短焦距超廣角攝影鏡頭標(biāo)準(zhǔn)鏡頭視角50°左右,使用范圍較廣長(zhǎng)焦(遠(yuǎn)攝)鏡頭視角20°以內(nèi),焦距幾十或上百毫米,長(zhǎng)焦距提供高倍放大變焦鏡頭鏡頭焦距連續(xù)可變,焦距可以從廣角變到長(zhǎng)焦工作距離望遠(yuǎn)鏡頭物距很大普通攝影鏡頭物距適中顯微鏡頭物距很小分類依據(jù)類型說(shuō)明4.2

鏡頭接口類型C型鏡頭基準(zhǔn)面至焦平面距離為17.526mm,C型鏡頭與CS型攝像機(jī)配合使用需在二者之間增加一個(gè)5mm的C/CS轉(zhuǎn)接環(huán)CS型鏡頭基準(zhǔn)面至焦平面距離為12.5mmF型F接口鏡頭是尼康鏡頭的接口標(biāo)準(zhǔn),又稱尼康口,是通用型接口,一般適用于焦距大于25mm的鏡頭、以及靶面大于1英寸的攝像機(jī)V型V接口鏡頭是施耐德鏡頭主要使用的標(biāo)準(zhǔn),一般也用于攝像機(jī)靶面較大或特殊用途的鏡頭特殊用途鏡頭顯微鏡頭一般用于光學(xué)倍率大于10:1的系統(tǒng),但由于目前CCD像元尺寸已經(jīng)做到3μm以內(nèi),所以光學(xué)倍率大于2:1時(shí)也會(huì)選用顯微鏡頭微距鏡頭一般是指光學(xué)倍率為2:1~1:4范圍內(nèi)特殊設(shè)計(jì)的鏡頭。當(dāng)圖像質(zhì)量要求不高時(shí),一般可采用在鏡頭和攝像機(jī)之間增加近攝接圈的方式或在鏡頭前增加近拍鏡的方式達(dá)到放大成像的效果遠(yuǎn)心鏡頭主要為糾正傳統(tǒng)鏡頭視差而特殊設(shè)計(jì)的鏡頭,可以在一定的物距范圍內(nèi),使得拍攝到的圖像其放大倍率不隨物距的變化而變化分類依據(jù)類型說(shuō)明4.2

鏡頭按照有效像場(chǎng)的大小進(jìn)行分類

鏡頭類型有效像場(chǎng)尺寸(1英寸=25.4mm)電視攝像鏡頭1/4英寸攝像鏡頭3.2mm×2.4mm(對(duì)角線4mm)1/3英寸攝像鏡頭4.8mm×3.6mm(對(duì)角線6mm)1/2英寸攝像鏡頭6.4mm×4.8mm(對(duì)角線8mm)2/3英寸指像鏡頭8.8mm×6.6mm(對(duì)角線11mm)1英寸攝像鏡頭12.8mm×9.6mm(對(duì)角線16mm)電影攝影鏡頭35mm電影攝影鏡頭21.95mm×16mm(對(duì)角線27.16mm)16mm電影攝影鏡頭10.05mm×7.42mm(對(duì)角線12.49mm)照相鏡頭135型攝影鏡頭36mm×24mm127型攝影鏡頭40mm×40mm120型攝影健頭80mm×60mm中型攝影鏡頭82mm×56mm大型攝影鏡頭240mm×180mm4.2

鏡頭由于系統(tǒng)中所用攝像機(jī)的靶面尺寸有各種型號(hào),所以在選擇鏡頭時(shí)須注意鏡頭的有效像場(chǎng)應(yīng)該大于或等于攝像機(jī)的靶面尺寸,否則成像的邊角部分會(huì)模糊甚至沒有影像。下面介紹鏡頭的結(jié)構(gòu)、相關(guān)參數(shù)及鏡頭選擇方法,以便在實(shí)際應(yīng)用中獲取最優(yōu)的系統(tǒng)性能。4.2.1

鏡頭結(jié)構(gòu)鏡頭由多個(gè)透鏡、可變(亮度)光圈和對(duì)焦環(huán)組成,有些鏡頭有固定調(diào)節(jié)系統(tǒng)。使用時(shí)通過(guò)觀察顯示圖像的明亮程度及清晰度來(lái)調(diào)整可變光圈和焦點(diǎn)4.2.2

視場(chǎng)視場(chǎng)(FOV)是指系統(tǒng)能夠觀察到的物體的物理尺寸范圍,也就是CCD芯片上所成圖像最大時(shí)對(duì)應(yīng)的物體的大小。它與工作距離dw,焦距f、CCD芯片尺寸sc有關(guān)。在不使用近攝環(huán)的情況下,四個(gè)參數(shù)之間的關(guān)系可用以下比例表達(dá)式表示

光學(xué)成像示意圖4.2.3

光學(xué)倍率和數(shù)值孔徑光學(xué)倍率是指成像大小與物體尺寸的比值,可以表示為

式中: NA——物方數(shù)值孔徑 NA'——像方數(shù)值孔徑物方孔徑角和折射率分別為u和n,像方孔徑角和折射率分別為u'和n’,則物方和像方的數(shù)值孔徑分別表示為

數(shù)值孔徑示意圖

4.2.4

景深拍攝有限距離的景物時(shí),可在像面上成清晰圖像的物距范圍叫做景深按理想光學(xué)系統(tǒng)的特性及透鏡公式計(jì)算: (4-5)對(duì)于從透鏡中心至圖像平面的距離,只有一個(gè)距離等于z的空間平面與之共軛,該平面稱為對(duì)準(zhǔn)平面。嚴(yán)格來(lái)講,除對(duì)準(zhǔn)平面上的點(diǎn)能成點(diǎn)像外,其他空間點(diǎn)在圖像平面上只能為一個(gè)彌散斑。當(dāng)彌散斑小于一定限度時(shí),仍可認(rèn)為是一個(gè)點(diǎn),這是由成像裝置的空間分辨率所決定的,于是小于成像裝置分辨率的一定量的離焦可以忽略。

4.2.4

景深

4.2.4

景深物點(diǎn)處于離焦位置時(shí),成像在圖像平面上的是一個(gè)圓形的彌散斑。如果圓斑的直徑小于成像裝置的分辨率,離焦量可以忽略。假設(shè)圓斑直徑為b’,入射光瞳直徑為D,焦距為f,透鏡中心距圖像平面的長(zhǎng)度為。如果圖像平面向透鏡方向移動(dòng)到一個(gè)新的距離,那么模糊程度為: (4-6)根據(jù)相似三角形,b’/2與之比等于d/2與之比。由式(4-5)能分別解出對(duì)應(yīng)于z和z1情況下的

,并且將這些表達(dá)式代入式(4-6)得到與物距相關(guān)的模糊量: (4-7)

4.2.4

景深假設(shè)b等于可以接受的彌散圓的最大直徑,由式(4-7)計(jì)算出能成清晰像的最近平面(即近景平面)的距離: (4-8)為了計(jì)算遠(yuǎn)景平面的距離,讓 (4-9)式中,是對(duì)應(yīng)于最大模糊量情況下的圖像平面遠(yuǎn)離透鏡方向移動(dòng)到一個(gè)新的距離。同理可以得到: (4-10)進(jìn)一步求解式(4-10)得到遠(yuǎn)景平面距離

4.2.4

景深上面的公式給出了這條與近景平面位置與焦距f、入射光瞳直徑D、最大可接受的像糊量b’、對(duì)準(zhǔn)平面位置z之間的關(guān)系。

,稱為超焦距(hyperfocaldistance),此時(shí),遠(yuǎn)景平面位置和景深為無(wú)窮遠(yuǎn)。遠(yuǎn)景與近景平面位置之差表示為景深:由上式可知,景深與孔徑光闌(光圈),焦距,鏡頭與物體間距離有直接的關(guān)系。焦距越短,景深越大;鏡頭離物體的距離越遠(yuǎn),景深越大;光圈越小,景深越大。光圈增大,通光量增加,景深減小,于是在光圈與景深之間需要有一個(gè)折中或平衡。而小光圈和良好的光線使聚焦更簡(jiǎn)單。

4.2.5

曝光量和光圈數(shù)攝像機(jī)收集到的光景,即曝光量(exposure),依賴于到達(dá)像面上的光強(qiáng)(圖像輻照度,imageirradiance)與曝光持續(xù)時(shí)間(快門速度,shutterspeed)的乘積 功率乘以時(shí)間所得結(jié)果為能量,當(dāng)圖像輻照度的單位為W/m2時(shí),曝光量的單位為J/m2。光圈數(shù),或稱F數(shù)(F-number,f#),它與焦距f,入射光瞳直徑D之間的關(guān)系為指定物鏡以F數(shù)為單位,因?yàn)閷?duì)于相同F(xiàn)數(shù)的不同物鏡來(lái)說(shuō),圖像強(qiáng)度(恒定快門速度下的曝光量)是一樣的。換句話說(shuō),F(xiàn)數(shù)表征單位入射光瞳直徑下不同焦距透鏡的接受光強(qiáng)的能力。

4.2.5

曝光量和光圈數(shù)F數(shù)是以

為公比的等比級(jí)數(shù),因?yàn)閮杀度胪娣e(aperturearea)等于入瞳直徑增加

倍,F(xiàn)數(shù)的常用值為1.4、2、2.8、4、5.6、8、11、16、22等。每一擋F數(shù)的變化改變1.4倍入瞳直徑,提高2倍到達(dá)像面的光強(qiáng)。最小F數(shù)是衡量鏡頭質(zhì)量好壞的重要參數(shù)之一。例如,電影攝影機(jī)用的鏡頭,最小F數(shù)可達(dá)0.85。F數(shù)越小,表示它能在光線較暗的情況曝光或用較短的時(shí)間曝光,可以進(jìn)行高速攝影。攝影光學(xué)系統(tǒng)采用調(diào)節(jié)光圈大小的方法來(lái)調(diào)節(jié)F數(shù),光圈越小,F(xiàn)數(shù)越大,景深也越大,但由于像面的照度變小,需要相應(yīng)增加曝光時(shí)間,才能使感光底片得到相同的曝光量,定量關(guān)系是:曝光時(shí)間與F數(shù)的平方成正比。4.2.6

分辨率從波動(dòng)光學(xué)的角度看,當(dāng)光通過(guò)光學(xué)系統(tǒng)中的光闌等限制光波傳播的光學(xué)元件時(shí)要發(fā)生衍射,因而物點(diǎn)的像并不是一個(gè)幾何點(diǎn),而是以像點(diǎn)為中心具有一定大小的斑,稱為愛里斑(Airydisk)。如果兩個(gè)物點(diǎn)相距很遠(yuǎn),它們各自形成的愛里斑就比較遠(yuǎn),它們的像就容易區(qū)分開;如果兩個(gè)物點(diǎn)相距很近,對(duì)應(yīng)的愛里斑重疊太多,就不能清楚地分辨出兩個(gè)物點(diǎn)的像,所以光的衍射限制了光學(xué)成像系統(tǒng)的分辨能力瑞利(Raylcigh)判據(jù):當(dāng)一個(gè)愛里斑的邊緣正好與另一個(gè)愛里斑的中心重合時(shí),這兩個(gè)愛里斑剛好能被區(qū)分開,如圖4-6所示。瑞利判據(jù)也是一條經(jīng)驗(yàn)判據(jù),它是根據(jù)正常人眼的分辨能力提出的,正常人眼可以分辨出光強(qiáng)差20%的差別,當(dāng)一個(gè)愛里斑邊緣與另一個(gè)愛里斑中心重疊時(shí),兩個(gè)愛里斑中心的光強(qiáng)是兩中心連線中點(diǎn)處光強(qiáng)的1.2(1.0/0.7351.2)倍。剛好被人眼區(qū)分開。用光學(xué)術(shù)語(yǔ)來(lái)說(shuō),瑞利判據(jù)定義了像中的圓形分辨單元,因?yàn)閮蓚€(gè)點(diǎn)光源可以被分辨的條件是它們不落在同一個(gè)分辨單元里。4.2.6

分辨率根據(jù)以上描述,瑞利距離可以表示為

圖4-6瑞利判據(jù)示意圖當(dāng)衍射斑中心距離大于或等于時(shí)可以分辨,小于時(shí)不能分辨。4.2.6

分辨率如果使用最小分辨角來(lái)描述,則瑞利判據(jù)可以表示為

。也就是說(shuō),兩個(gè)愛里斑中心對(duì)圓孔中心的張角,正好等于愛里斑半徑對(duì)圓孔中心的張角。光學(xué)系統(tǒng)的分辨率定義為的倒數(shù),即

(4-17)式(4-17)表明,增大透鏡的直徑或減小入射光的波長(zhǎng)都可以提高系統(tǒng)的光學(xué)分辨率。在天文望遠(yuǎn)鏡中,為了提高分辨率和增加光通量,總是使用直徑很大的透鏡作為物鏡。例如,加那列望遠(yuǎn)鏡通光孔徑達(dá)10.4m。而在顯微鏡中,為了提高分辨率,可用紫外光照射,在電子顯微鏡(electronmicorscope)中,電子物質(zhì)波的波長(zhǎng)很短(0.001~0.1nm),因此電子顯微鏡的分辨率可比一般光學(xué)顯微鏡提高數(shù)千倍。4.2.6

分辨率式(4-17)決定了視場(chǎng)中心的分辨率,視場(chǎng)邊緣由于成像光束的孔徑角比軸上點(diǎn)小,分辨率有所降低。實(shí)際的成像物鏡總有一定的剩余像差,其分辨率要比理想分辨率低得多,而視場(chǎng)邊緣受軸外像差和光束漸暈的影響,要低得更多。有人認(rèn)為瑞利判據(jù)過(guò)于寬松,于是又提出另外兩個(gè)判據(jù),即道斯(Dawes)判據(jù)和斯派羅(Sparrow)判據(jù)。根據(jù)道斯判據(jù),人眼剛好能分辨兩個(gè)衍射斑的最小中心距為

根據(jù)斯派羅判據(jù),兩衍射斑之間的最小中心距為

4.2.6

分辨率通過(guò)單獨(dú)分析單個(gè)透鏡分辨率以及后面章節(jié)中的光電成像器件和圖像采樣等,將它們綜合起來(lái)確定整個(gè)數(shù)字成像系統(tǒng)的像素間距。無(wú)論物體中包含有多高的頻率,超過(guò)成像系統(tǒng)MTF的截止頻率的那些信息并不能提供給數(shù)字化設(shè)備。而這個(gè)頻率也不會(huì)超出初始成像透鏡或反射鏡的光學(xué)傳遞函數(shù)(OTF)的截止頻率

這樣,如果我們令折疊頻率(采樣頻率的一半)等于OTF的截止頻率,就可以避免混疊。恰當(dāng)進(jìn)行插值,就能根據(jù)采樣點(diǎn)無(wú)誤差地重構(gòu)圖像。令折疊頻率等于圖像中出現(xiàn)的最高頻率,稱為按Nyquist標(biāo)準(zhǔn)采樣。按此準(zhǔn)則像素間距對(duì)攝像機(jī)而言為

。如果按照瑞利距離,像素間距應(yīng)為

,該數(shù)值比Nyquist標(biāo)準(zhǔn)給出的大22%。4.2.7

鏡頭選擇光學(xué)鏡頭是視覺測(cè)量系統(tǒng)的關(guān)鍵設(shè)備,在選擇鏡頭時(shí)需要考慮多方面的因素。(1)鏡頭的成像尺寸應(yīng)大于或等于攝像機(jī)芯片尺寸。(2)考慮環(huán)境照度的變化。(3)選用合適的鏡頭焦距。(4)成像過(guò)程中需要改變放大倍率,采用變焦鏡頭,否則采用定焦鏡頭,并根據(jù)被測(cè)目標(biāo)的狀態(tài)應(yīng)優(yōu)先選用定焦鏡頭。(5)接口類型互相匹配。(6)特殊要求優(yōu)先考慮。結(jié)合實(shí)際應(yīng)用特點(diǎn),可能會(huì)有特殊要求。4.3光源光源照明系統(tǒng)是影響機(jī)器視覺系統(tǒng)檢測(cè)質(zhì)量的重要因素,其直接影響輸入數(shù)據(jù)的質(zhì)量和應(yīng)用效果。需要具有以下特點(diǎn)或要求:(1) 盡可能突出物體的特征;(2) 增強(qiáng)目標(biāo)區(qū)域與背景區(qū)域的對(duì)比度,能夠有效的分割圖像;(3) 光譜要求:光源光譜功率分布的峰值波長(zhǎng)應(yīng)與光電成像器件的靈敏波長(zhǎng)一致;(4) 強(qiáng)度要求:光強(qiáng)會(huì)影響攝像機(jī)的曝光,光線不足對(duì)比度變低,需要加大放大倍數(shù),這樣噪聲也會(huì)相應(yīng)放大,也可能使鏡頭的光圈加大,于是景深將減小。反過(guò)來(lái),光強(qiáng)過(guò)高會(huì)浪費(fèi)能量,并產(chǎn)生熱量;(5) 均勻性要求:在所有的機(jī)器視覺應(yīng)用中,都會(huì)要求均勻的光照,因?yàn)樗械墓庠措S著距離的增加和照射角度的偏離,其照射強(qiáng)度減小,所以在對(duì)大面積物體照射時(shí),會(huì)帶來(lái)較大的問(wèn)題,有時(shí)只能做到視場(chǎng)的中心位置保持均勻;(6) 成像質(zhì)量要求:物體位置變化不影響成像質(zhì)量,測(cè)量過(guò)程中在一定范圍內(nèi)移動(dòng)物體時(shí),照明效果不受影響。4.3.1光源的基本性能參數(shù)輻射效率和發(fā)光效率在給定的波長(zhǎng)范圍內(nèi),某一光源所發(fā)出的輻射通量與產(chǎn)生該輻射通量所需要的功率P之比,成為該光源的輻射效率在可見光范圍內(nèi),某一光源的發(fā)光效率為光通量與功率P之比

和分別表示測(cè)量系統(tǒng)的光譜范圍,實(shí)際應(yīng)用中,采用輻射效率高的光源以節(jié)省能源。4.3.1光源的基本性能參數(shù)光譜功率分布光源輸出的功率與光譜有關(guān),即與光的波長(zhǎng)有關(guān),稱為光譜的功率分布。四種典型的光譜功率分布如圖4-7所示。圖4-7(a)為線光源,如低壓汞燈光譜的功率分布;圖4-7(b)為帶狀光源,如高壓汞燈光譜;圖4-7(c)為連續(xù)光譜光譜,如白熾燈、鹵素?zé)艄庾V;圖4-7(d)為復(fù)合光譜,它由連續(xù)光譜與線狀、帶狀光譜組合而成,熒光燈光譜。4.3.1光源的基本性能參數(shù)光譜功率分布圖4-7四種典型的光譜功率分布(a)線狀光源(b)帶狀光源(c)連續(xù)光源(d)復(fù)合光源4.3.1光源的基本性能參數(shù)光源的顏色光源的顏色包含鈉色表和顯色性。一般用眼睛直接觀察光源時(shí)所看到的顏色稱為光源的色表,如高壓鈉燈的色表呈黃色,熒光燈的色表呈白色等。當(dāng)用這種光源照射物體時(shí),物體呈現(xiàn)的顏色(即物體反射光在人眼內(nèi)產(chǎn)生的顏色感覺)與該物體在完全輻射體照射下所呈現(xiàn)的顏色的一致性,稱為該光源的顯色性。4.3.2常用可見光源任何發(fā)出光輻射的物體都可以叫做光輻射源。這里所指的光輻射包括紫外光、可見光洪紅外光的輻射。通常把能夠發(fā)出可見光的物體叫做光源,而把能夠發(fā)出非可見光的物體叫做輻射源。按照光輻射來(lái)源的不同,通常將光源分成兩大類:自然光源和人工光源。自然光源主要包括太陽(yáng)、恒星等,這些光源對(duì)地面輻射通常不穩(wěn)定且無(wú)法控制,在視覺測(cè)量中很少使用,并且作為雜散光予以消除或抑制,因而視覺測(cè)量系統(tǒng)中大量使用人工光源。按照工作原理不同,人工光源大致分為熱輻射光源、氣體放電光源、發(fā)光二極管和激光光源。4.3.2常用可見光源

自然光源:太陽(yáng)、恒星…… 按照光輻射來(lái)源不同

人工光源(按照工作原理不同)

熱輻射光源氣體放電光源發(fā)光二極管激光光源4.4圖像采集卡計(jì)算機(jī)通過(guò)圖像采集卡(imagecapturecard)接收來(lái)自圖像傳感器的模擬信號(hào),對(duì)其進(jìn)行采樣、量化成數(shù)字信號(hào),然后壓縮編碼成數(shù)字視頻序列。一般圖像采集卡采用幀內(nèi)壓縮的算法把數(shù)字化的視頻存儲(chǔ)成AVI文件,高檔的圖像采集卡直接把采集到的數(shù)字視頻數(shù)據(jù)實(shí)時(shí)壓縮成MPEG-1格式的文件4.4圖像采集卡圖像采集卡模擬圖像采集卡與數(shù)字圖像采集卡彩色圖像采集卡與黑白圖像采集卡面掃描圖像采集卡與線掃描圖像采集卡圖像采集卡的分類4.4圖像采集卡圖像采集卡的技術(shù)參數(shù)(1)圖像傳輸格式。圖像采集卡需要支持系統(tǒng)中攝像機(jī)所采用的輸出信號(hào)格式大多數(shù)攝像機(jī)采用RS422或EIA(LVDS)作為輸出信號(hào)格式。在數(shù)字?jǐn)z像機(jī)中廣泛應(yīng)用IEEE1394,USB2.0,USB3.0,GigE,5GigE和CameraLink幾種圖像傳輸形式。(2)圖像格式(像素格式)①黑白圖像。通常情況下,圖像灰度等級(jí)可分為256級(jí),即以8位表示。

在對(duì)圖像灰度有更高的要求時(shí),可用10位、12位等來(lái)表示。②彩色圖像。彩色圖像可由RGB(YUV)3種色彩組合而成,根據(jù)其亮度

級(jí)別的不同有8-8-8,10-10-10等格式。4.4圖像采集卡圖像采集卡的技術(shù)參數(shù)(3)傳輸通道數(shù)。當(dāng)攝像機(jī)以較高速率拍攝高分辦率的圖像時(shí),會(huì)產(chǎn)生很高的輸出速率,一般需要多

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論