機器視覺原理與應用 課件 喬景慧 第1-6章 機器視覺理論簡介-基于OPENCV和PYTHON的圖像預處理_第1頁
機器視覺原理與應用 課件 喬景慧 第1-6章 機器視覺理論簡介-基于OPENCV和PYTHON的圖像預處理_第2頁
機器視覺原理與應用 課件 喬景慧 第1-6章 機器視覺理論簡介-基于OPENCV和PYTHON的圖像預處理_第3頁
機器視覺原理與應用 課件 喬景慧 第1-6章 機器視覺理論簡介-基于OPENCV和PYTHON的圖像預處理_第4頁
機器視覺原理與應用 課件 喬景慧 第1-6章 機器視覺理論簡介-基于OPENCV和PYTHON的圖像預處理_第5頁
已閱讀5頁,還剩426頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

機器視覺原理與應用第1章機器視覺理論簡介1.1機器視覺簡介1.2機器視覺的發(fā)展1.3Marr視覺計算理論1.3.1機器視覺的三個層次1.3.2視覺表示框架1.4深度學習1.5機器視覺的研究內(nèi)容及面臨的問題1.5.1機器視覺的研究內(nèi)容1.5.2機器視覺研究面臨的問題1.6機器視覺的應用1.1

機器視覺簡介機器視覺(MachineVision)機器視覺是一個系統(tǒng)的概念,集成了光學、機械、電子、計算機軟硬件等方面的技術(shù),涉及計算機、圖像處理、模式識別、機械工程、電光源照明、人工智能、信號處理、光機電一體化、光學成像、傳感器、模擬與數(shù)字視頻技術(shù)、計算機軟硬件技術(shù)(圖像增強和分析算法、圖像卡、

I/O卡等)等多個領(lǐng)域。一個典型的機器視覺應用系統(tǒng)包括圖像捕捉、光源系統(tǒng)、圖像數(shù)字化模塊、數(shù)字圖像處理模塊、智能判斷決策模塊和機械控制執(zhí)行模塊。1.1

機器視覺簡介國際制造工程師學會(SME)機器視覺分會和美國機器人工業(yè)協(xié)會(RIA)自動化視覺分會關(guān)于機器視覺的定義為:機器視覺是使用光學器件進行非接觸感知,自動獲取和解釋一個真實場景的圖像,以獲取信息和用于控制機器運動的裝置。通俗地講,機器視覺就是為機器安裝上一雙“智慧的眼睛”,讓機器具有像人一樣的視覺功能,從而實現(xiàn)引導、檢測、測量、識別等功能。1.1

機器視覺簡介機器視覺與計算機視覺既有區(qū)別又有聯(lián)系。機器視覺側(cè)重于機器,也就是機器應用。而計算機視覺側(cè)重于計算機,也就是計算機圖像處理。從學科上說,計算機視覺是計算機科學發(fā)展出來的一個分支,機器視覺則是系統(tǒng)工程領(lǐng)域內(nèi)多學科知識的交叉應用。機器視覺屬于應用領(lǐng)域,更多的是利用現(xiàn)有的各學科理論來實現(xiàn)機器替代,最終結(jié)果是完成現(xiàn)實生產(chǎn)目標。計算機視覺則側(cè)重于理論研究,其研究在實踐中存在著不確定性。機器視覺系統(tǒng)是可以自動獲取一幅或多幅目標物體圖像,對所獲取圖像的各種特征量進行處理、分析和測量,根據(jù)最終結(jié)果做出定性分析和定量解釋,從而得到有關(guān)目標物體的某種認識并作出相應決策,執(zhí)行可直接創(chuàng)造經(jīng)濟價值或社會價值的功能活動。1.1

機器視覺簡介機器視覺對于計算機的圖像處理功能存在極強的依賴性。計算機視覺為機器視覺提供了圖像處理分析的理論和算法,而機器視覺則實現(xiàn)了計算機視覺研究成果向?qū)嶋H應用的轉(zhuǎn)化。機器視覺和計算機視覺的區(qū)別機器視覺機器視覺側(cè)重于機器,也就是機器應用從學科上說,機器視覺則是系統(tǒng)工程領(lǐng)域內(nèi)多學科知識的交叉應用機器視覺屬于應用領(lǐng)域,更多的是利用現(xiàn)有的各學科理論來實現(xiàn)機器替代,最終結(jié)果是完成現(xiàn)實生產(chǎn)目標。計算機視覺計算機視覺側(cè)重于計算機,也就是計算機圖像處理從學科上說,計算機視覺是計算機科學發(fā)展出來的一個分支計算機視覺則側(cè)重于理論研究,其研究在實踐中存在著不確定性。71.2機器視覺的發(fā)展機器視覺的發(fā)展經(jīng)過初期的數(shù)字圖像處理,20世紀80年代的卡爾曼濾波及正則化時代,20世紀90年代的圖像分割,21世紀的計算攝像學與機器視覺中的深度學習等。20世紀70年代:初期的數(shù)字圖像處理階段機器視覺始于20世紀70年代早期,它被視為模擬人類智能并賦予機器人智能行為的感知組成部分。人工智能和機器人的早期研究者(麻省理工大學、斯坦福大學、卡內(nèi)基梅隆大學的研究者)認為,在解決高層次推理和規(guī)劃等更困難問題的過程中,針對“視覺輸入”問題應該是一個簡單的步驟。比如,1966年麻省理工大學的MarvinMinsky讓他的本科生GeraldJaySussman在暑期將相機連接到計算機上,讓計算機描述它所看到的事物?,F(xiàn)在我們覺得很簡單,但是在當時是不容易解決的。1.2機器視覺的發(fā)展20世紀70年代,人們對物體的三位建模進行了研究。Barrow、Tenenbaum與Marr提出了一種理解亮度和陰影變化的方法,并通過表面朝向和陰影等恢復三維結(jié)構(gòu)。同時出現(xiàn)了基于特征的立體視覺對應(stereocorrespondence)算法和基于亮度的光流(opticalflow)算法。在這個時期,DavidMarr介紹了視覺信息處理表達的三個層次。20世紀80年代:卡爾曼濾波及正則化時代20世紀80年代,計算機視覺獲得蓬勃發(fā)展,新概念、新方法和新理論不斷涌現(xiàn),如基于感知特征群的物體識別理論框架、主動識別理論框架、視覺集成理論框架等。圖像金字塔和尺度空間用于對應點搜索。三維視覺重建中出現(xiàn)“由X到形狀”的方法,包括由陰影到形狀、由光度立體視覺到形狀、由紋理到形狀及由聚焦到形狀。1.2機器視覺的發(fā)展20世紀90年代:圖像分割計算機視覺技術(shù)進入深入發(fā)展、廣泛應用時期。在這段時期,光流方法得到了不斷改進,產(chǎn)生了完整三維表面的多視圖立體視覺算法,同時跟蹤算法也得到了很多改進,包括使用“活動輪廓”方法的輪廓跟蹤(如蛇形、粒子濾波和水平集方法)和基于亮度的跟蹤方法。21世紀:計算攝像學與機器視覺中的深度學習計算機視覺與計算機圖形學之間的交叉越來越明顯,特別是在基于圖像的建模和繪制交叉領(lǐng)域。計算攝像學得到深入發(fā)展,其中光場獲取和繪制以及通過多曝光實現(xiàn)的高動態(tài)范圍成像得到了發(fā)展。1.3Marr視覺計算理論Marr視覺計算理論立足于計算機科學,系統(tǒng)地概括了心理生理學、神經(jīng)生理學等方面業(yè)已取得的所有重要成果,是視覺研究中迄今為止最為完善的視覺理論。Marr建立的視覺計算理論,使計算機視覺研究有了一個比較明確的體系,并大大推動了計算機視覺研究的發(fā)展。人們普遍認為,計算機視覺這門學科的形成與Marr的視覺理論有著密切的關(guān)系。事實上,盡管20世紀70年代初期就有人使用計算機視覺這個名詞,但正是Marr于70年代末建立的視覺理論促使計算機視覺這一名詞的流行。下面簡要地介紹Marr視覺理論的基本思想及其理論框架。1.3.1機器視覺的三個層次計算理論表示和算法硬件實現(xiàn)計算的目的是什么?為什么這一計算是合適的?執(zhí)行計算的策略是什么?如何實現(xiàn)這個理論計算?輸入、輸出的表示是什么?表示與表示之間的變換是什么?在物理上如何實現(xiàn)這些表示和算法?

Marr認為,視覺是一個信息處理系統(tǒng)。因此,系統(tǒng)研究分為三個層次:計算理論層次,表示(epresenain)與算法層次,硬件實現(xiàn)層次,如表1-1所示。:表1-1Marr視覺理論的三個層次1.3.1機器視覺的三個層次按照Marr的理論,計算視覺理論要回答視覺系統(tǒng)的計算目的和策略是什么,或視覺系統(tǒng)的輸入和輸出是什么,如何由系統(tǒng)的輸入求出系統(tǒng)的輸出:在這個層次上,信息系統(tǒng)的特征,是將一種信息(輸入)映射為另一種信息(輸出)。比如,系統(tǒng)輸入是二維灰度圖象,輸出則是三維物體的形狀、位置和姿態(tài),視覺系統(tǒng)的任務就是研究如何建立輸入輸出之間的關(guān)系和約束,如何由二維灰度圖象恢復物體的三維信息。表示與算法層次:進一步回答如何表示輸入和輸出信息,如何實現(xiàn)計算理論所對應的功能的算法,以及如何由一種表示變換成另一種表示,比如創(chuàng)建數(shù)據(jù)結(jié)構(gòu)和符號。一般來說,不同的輸入、輸出和計算理論對應不同的表示,而同一種輸入、輸出或計算理論可能對應若干種表示。1.3.1機器視覺的三個層次硬件實現(xiàn)層次:在解決了理論問題和表示問題后,最后一個層次是解決用硬件實現(xiàn)上述表示和算法的問題。比如計算機體系結(jié)構(gòu)及具體的計算裝置及其細節(jié)。從信息處理的觀點來看,至關(guān)重要的乃是最高層次,即計算理論層次。這是因為構(gòu)成知覺的計算本質(zhì),取決于解決計算問題本身。而不取決于用來解決計算問題的特殊硬件。換句話說,通過正確理解待解決問題的本質(zhì),將有助于理解并創(chuàng)造算法。如果考慮解決問題的機制和物理實現(xiàn),則對理解算法往往無濟于事。1.3.1機器視覺的三個層次上述三個層次之間存在著邏輯的因果關(guān)系,但它們之間的聯(lián)系不是十分緊密。因此,某些現(xiàn)象只能在其中一個或兩個層次上進行解釋。比如神經(jīng)解剖學原則上與第三層次(即物理實現(xiàn))聯(lián)系在一起。突觸機制、動作電位抑制性相互作用都在第三個層次上。心理物理學與第二層次(即表示與算法)有著更直接的聯(lián)系。更一般地說,不同的現(xiàn)象必須在不同的層次上進行解釋,這會有助于人們把握正確的研究方向。例如,人們常說,人腦完全不同于計算機,因為前者是并行加工的,后者是串行的。對于這個問題,應該這樣回答:并行加工和串行加工是在算法這個層次上的區(qū)別,而不是根本性的區(qū)別,因為任何一個并行的計算程序都可以寫成串行的程序。因此,這種并行與串行的區(qū)別并不支持這種觀點,即人腦的運行與計算機的運算是不同的,因而人腦所完成的任務是不可能通過編制程序用計算機來完成。1.3.1機器視覺的三個層次16計算視覺理論層次:回答視覺系統(tǒng)的計算目的和策略是什么,或視覺系統(tǒng)的輸入和輸出是什么,如何由系統(tǒng)的輸入求出系統(tǒng)的輸出表示與算法層次:進一步回答如何表示輸入和輸出信息,如何實現(xiàn)計算理論所對應的功能的算法,以及如何由一種表示變換成另一種表示硬件實現(xiàn)層次:在解決了理論問題和表示問題后,最后一個層次是解決用硬件實現(xiàn)上述表示和算法的問題三個層次之間存在著邏輯的因果關(guān)系,但它們之間的聯(lián)系不是十分緊密。因此,某些現(xiàn)象只能在其中一個或兩個層次上進行解釋1.3.2視覺表示框架視覺過程可劃分為三個階段,如表1-2所示。第一階段(也稱為早期階段)是將輸入的原始圖象進行處理,抽取圖象中諸如角點、邊緣、紋理、線條、邊界等基本特征。這些特征的集合稱為基元圖(primitivesketch);第二階段(中期階段)是指在以觀測者為中心的坐標系中,由輸入圖象和基元圖恢復場景可見部分的深度、法線方向、輪廓等,這些信息包含了深度信息,但不是真正的物體三維表示。因此,稱為二維半圖(2.5dimensionalsketch);在以物體為中心的坐標系中,由輸入圖象、基元圖、二維半圖來恢復、表示和識別三維物體的過程稱為視覺的第三階段(后期階段)。1.3.2視覺表示框架Marr理論是計算機視覺研究領(lǐng)域的劃時代成就,但該理論不是十分完善的,許多方面還有爭議。比如,該理論所建立的視覺處理框架基本上是自下而上,沒有反饋。還有,該理論沒有足夠地重視知識的應用。盡管如此,Marr理論給了我們研究計算機視覺許多珍貴的哲學思想和研究方法,同時也給計算機視覺研究領(lǐng)域創(chuàng)造了許多研究起點。1.3.2視覺表示框架視覺過程可分為三個階段表1-2由圖像恢復形狀信息的表示框架名

稱目的基元圖像亮度表示圖像中每一點的亮度值基元圖表示二維圖像的重要信息,主要是圖像中的亮度變化位置及其幾何分布和組織結(jié)構(gòu)零交叉、斑點,端點和不連接點,邊緣,有效線段,組合群,曲線組織,邊界2.5維圖在以觀測者為中心的坐標系中,表示可見表面的方向,深度值和不連續(xù)的輪廓局部表面朝上(“針”基元)離觀測者的距離深度上的不連續(xù)點表面朝上的不連續(xù)點3維模型表示在以物體為中心的坐標系中,用三維體積基元面積構(gòu)成的模塊化多層次表示,描述形狀及空間組織形式分層次組成若干三維模型,每個三維模型都是在幾個軸線空間的基礎(chǔ)上構(gòu)成的,所有體積基元或面積形狀基元都附著在軸線上1.4深度學習深度學習(Deeplearning)是機器學習的分支,它是使用包含復雜結(jié)構(gòu)或由多重非線性變換構(gòu)成的多個處理層對數(shù)據(jù)進行高層抽象的機器學習的算法。它和機器學習以及人工智能的關(guān)系如圖1-1所示,在最外面的一環(huán)是人工智能(ArtificialIntelligence,AI),使用計算推理,里面的一環(huán)是機器學習(Machinelearning),深度學習在最中心。1.4深度學習圖1-1深度學習在人工智能中的位置211.4深度學習在過去的若干年中,由于功能更強大和價格更便宜的計算的出現(xiàn),許多研究人員開始采用復雜(深層)神經(jīng)網(wǎng)絡的體系結(jié)構(gòu)來實現(xiàn)20年前難以想象的目標。自1957年Rosenblatt發(fā)明感知器后,人們對神經(jīng)網(wǎng)絡的興趣變得越來越大。然而,許多限制(擔心內(nèi)存和CPU速度)阻礙了此方面的研究,并且限制了算法的大量應用。在過去十年中,研究人員開始瞄準越來越大的模型,建立幾個不同層次的神經(jīng)網(wǎng)絡模型(這就是為什么這種方法被稱為深度學習),以解決新的具有挑戰(zhàn)性的問題。便宜和快速的計算機的可用性允許他們使用非常大的數(shù)據(jù)集(由圖像、文本和動畫組成的數(shù)據(jù))在可接受的時間范圍內(nèi)獲得結(jié)果。這一努力產(chǎn)生了令人印象深刻的成果,如基于圖片元素的分類和使用強化學習的實時智能交互。1.4深度學習這些技術(shù)背后的想法是創(chuàng)建像大腦一樣工作的算法,由于神經(jīng)科學和認知心理學的貢獻,這一領(lǐng)域已經(jīng)有了很多重要進展。特別是人們對于模式識別和聯(lián)想記憶的研究興趣越來越濃厚,采用了與人類大腦皮層相似的結(jié)構(gòu)和功能。神經(jīng)網(wǎng)絡還包括更簡單的稱為無模型(model-free)的算法,這些算法更多是基于通用學習技巧和重復經(jīng)驗,而不是基于特定問題的數(shù)學物理方法。當然,對不同的構(gòu)架和優(yōu)化算法的測試可以通過并行處理來進行,從而使得其比定義一個復雜的模型要簡單得多,并且復雜的模型也更難以適應不同的情況,此外,即使是沒有基于上下文的模型,深度學習也表現(xiàn)出比其他方法更好的性能。這表明在許多情況下,最好是用不確定性做出不太精確的決定,而不是由非常復雜的模型(通常不是很快)輸出確定的精確決策。對于動物來說,這種決策往往生死攸關(guān),如果決策成功,也是因為它隱含地放棄了一些精確性。1.4深度學習常見的深度學習應用包括:圖像分類、實時視覺跟蹤、自動駕駛、物流優(yōu)化、生物信息、語音識別。這些問題中,有許多也可以使用經(jīng)典方法來求解,但有時候要復雜很多,而深度學習的效果更好。此外,深度學習可以將其應用擴展到最初被認為非常復雜的情況下,例如自動駕駛汽車或?qū)崿F(xiàn)視覺對象識別。本書詳細介紹了一些經(jīng)典算法。然而,有許多介紹性和更高級的討論資源可供參考。GeogleDeepMind團隊已經(jīng)得到了許多有趣的結(jié)果,建議訪問他們的網(wǎng)站,了解他們的最新研究結(jié)果。1.4深度學習深度學習(Deeplearning)是機器學習的分支,它是使用包含復雜結(jié)構(gòu)或由多重非線性變換構(gòu)成的多個處理層對數(shù)據(jù)進行高層抽象的機器學習的算法。25常見的深度學習的應用圖像分類1.4深度學習26實時視覺跟蹤自動駕駛物流優(yōu)化、生物信息、語音識別……1.5.1機器視覺的研究內(nèi)容輸入設備輸入設備包括成像設備和數(shù)字化設備。成像設備是指通過光學攝像機或紅外、激光、超聲、X射線對周圍場景或物體進行探測成像,然后使用數(shù)字化設備得到關(guān)于場景或物體的二維或三維數(shù)字化圖像。獲取數(shù)字化圖像是機器視覺系統(tǒng)的最基本功能。目前用于研究視覺的大多數(shù)輸入設備是商業(yè)化產(chǎn)品,如CCD黑白或彩色攝像機、數(shù)字掃描儀、超聲成像探測儀、CT(計算機斷層掃描)成像設備等。但是這些商業(yè)化的輸入設備遠遠不能滿足實際的需要,因此研究人員正在研究各種性能先進的成像系統(tǒng),如紅外成像系統(tǒng)、激光成像系統(tǒng)、計算機成像系統(tǒng)、高分辨率智能成像顯微儀器(RUSH,每秒能夠拍到百億像素,是國際上首個能實現(xiàn)小鼠全腦皮層范圍神經(jīng)活動高分辨率成像的儀器。)1.5.1機器視覺的研究內(nèi)容圖像生成圖像生成主要研究相機內(nèi)參數(shù)和外參數(shù),使用線性或非線性對相機進行標定,光源類型及其產(chǎn)生的效果、光照及陰影,色彩匹配及線性顏色空間和非線性顏色空間,圖像顏色模型中的漫反射項及鏡面反射項受表面的顏色與光源的互反射的顏色影響。1.5.1機器視覺的研究內(nèi)容低層視覺低層視覺主要對輸入的原始圖像進行處理,主要包括圖像線性濾波或非線性濾波、圖像增強、邊緣檢測、圖像紋理檢測、圖像運動檢測,由紋理恢復形狀、圖像去噪等。中層視覺中層視覺的主要任務是恢復場景深度、表面法線方向、輪廓等有關(guān)場景的2.5維信息,實現(xiàn)途徑有立體視覺、測距成像、運動估計以及利用明暗特征、紋理特征等進行形狀恢復的方法。291.5.1機器視覺的研究內(nèi)容高層視覺高層視覺的主要任務是在以物體為中心的坐標系中,根據(jù)原始輸入圖像及基本特征,恢復物體的三維結(jié)構(gòu),并確定物體的位置和方向。另外,利用微分幾何知識,描述物體的平滑表面及輪廓,同時利用滑動窗口法進行的人臉檢測、行人檢測和邊界檢測,形變物體檢測等。301.5.2機器視覺研究面臨的問題目前所建立的各種機器視覺系統(tǒng)只適用于某種特定環(huán)境或應用場合,而要建立一個可以與人類視覺相比擬的通用視覺系統(tǒng)是非常困難的,機器視覺研究面臨的困難如下。信息損失在相機或者人眼圖像獲取過程中,會出現(xiàn)3D向2D轉(zhuǎn)換過程中信息損失。這是由針孔模型的近似或者透鏡成像模型決定的,在成像過程中丟失了深度等的信息,在投影變換過程中,會將點沿著射線做映射,但不保持角度和共線性。局部窗口和對全局視圖的需要一般來說,圖像分析與處理的是全局圖像的一部分像素,也就是說通過小孔來看圖像。因此通過局部(小孔)很難實現(xiàn)全局上下文的理解。20世紀80年代,1.5.2機器視覺研究面臨的問題McCarthy指出構(gòu)造上下文是解決推廣性問題的關(guān)鍵,而僅從局部來看或只有一些局部小孔可供觀察時,解釋一幅圖像一般時非常困難的。噪聲實際的視覺檢測都含有噪聲,需要使用相應的數(shù)學工具和方法對含有噪聲的視覺感知結(jié)果進行分析與處理,進而獲得復原真實視覺數(shù)據(jù)。亮度測量輻射率用圖像亮度近似表示。輻射率依賴于輻照度(輻照度與光源類型、強度和位置有關(guān))、觀察者位置、表面的局部幾何性質(zhì)。大數(shù)據(jù)灰度圖像、彩色圖像、深度圖像的信息量是巨大的,視頻數(shù)據(jù)會更大。巨大的數(shù)據(jù)量處理的相率仍然是一個重要的問題。1.6機器視覺的應用機器視覺在很多領(lǐng)域已經(jīng)得到了廣發(fā)應用,如工業(yè)自動化生產(chǎn)線、視覺導航、光學字符識別、人機交互、醫(yī)學成像及虛擬現(xiàn)實等。(1)工業(yè)自動化生產(chǎn)線機器視覺應用于工業(yè)自動化可以提高生產(chǎn)效率和產(chǎn)品質(zhì)量,同時還可以應用于產(chǎn)品檢測、質(zhì)量控制、工業(yè)探傷、自動焊接以及各種危險場合工作的機器人等。(2)視覺導航用于無人駕駛、移動機器人、巡航導彈制導及自動巡航裝備捕獲目標和確定距離。1.6機器視覺的應用(3)醫(yī)學成像廣泛應用于醫(yī)學診斷,成像方法包括傳統(tǒng)的X射線成像、計算機層析(computerdtomography,CT)成像、核磁共振成像(magneticresonanceimaging,MRI)、超聲成像等。機器視覺在醫(yī)學診斷方面由兩方面的應用,一個是對圖像進行增強、標記、染色等處理來幫助醫(yī)生診斷疾病,協(xié)助醫(yī)生對感興趣的區(qū)域進行定量測量和比較;二是利用專家知識系統(tǒng)對圖像進行自動分析和解釋,給出診斷結(jié)果。(4)人機交互讓計算機借助人的手勢、嘴唇動作、軀干運動、表情等了解人的要求而執(zhí)行指令,鑒別用戶身份,識別用戶的體勢及表情測定,既符合人類的交互習慣,也增強交互的方便性和臨場感。1.6機器視覺的應用(5)虛擬現(xiàn)實飛機駕駛員訓練、手術(shù)模擬、場景建模、戰(zhàn)場環(huán)境表示等,它可以幫助人們超越人的生理極限,“身臨其境”,提高工作效率。(6)其它總之,計算機視覺的應用是多方面的,它在制造業(yè)、電子、航天、遙感、印刷、固廢處理、冶煉、選礦、建材、紡織、包裝、醫(yī)療、制藥、食品、智能交通、金融、體育、考古、公共安全、各類球類運動分析、農(nóng)業(yè)、心理學、電視電影制作、美術(shù)模型、遠程教育、多媒體教學及科學研究等行業(yè)均有著廣泛應用。1.6機器視覺的應用工業(yè)自動化生產(chǎn)線36視覺導航醫(yī)學成像人機交互虛擬現(xiàn)實思考與練習1-1什么是機器視覺?1-2總結(jié)機器視覺的發(fā)展歷程。1-3機器視覺研究的主要內(nèi)容有哪些?1-4說明機器視覺應用的五個具體例子。1-5說明Marr視覺理論的主要內(nèi)容。37第2章機器視覺原理與應用數(shù)學基礎(chǔ)2.1線性空間2.2內(nèi)積空間 2.2.1內(nèi)積空間及其基本性質(zhì) 2.2.2度量矩陣2.3矩陣的因子分解2.3.1對角矩陣2.3.2單位矩陣2.3.3初等矩陣2.4稠密及其完備性2.5向量范數(shù)第2章機器視覺原理與應用數(shù)學基礎(chǔ)2.6矩陣范數(shù)2.7矩陣擾動分析2.8廣義逆矩陣2.8.1廣義逆矩陣的概念2.8.2廣義逆矩陣與線性方程組的極小最小二乘解2.1

線性空間數(shù)域如果復數(shù)的一個非空集合P含有非零的數(shù),且其中任意兩數(shù)的和、差、積、商(除數(shù)不為零)仍屬于該集合,則稱數(shù)集P為一個數(shù)域。如有理數(shù)域、實數(shù)域及復數(shù)域,其中有理數(shù)域是數(shù)域的一部分,每個數(shù)域都包含整數(shù)0和1。2.1

線性空間線性空間的定義定義2-1設V是一非空集合,P是一數(shù)域。如果:(1)在集合V上定義了一個二元運算(通常稱為加法),即V中任意元素x,y經(jīng)過這個運算后得到的結(jié)果,仍是集合V中一個唯一確定的元素,這元素稱為x與y的和,并記作x+y;(2)在數(shù)域P與集合V的元素之間還定義了一種運算,叫做數(shù)量乘法,即對于P中任一數(shù)與V中任一元素x,經(jīng)過這一運算后所得結(jié)果仍為V中一個唯一確定元素,稱為與x的數(shù)量乘積,記作x;(3)上述兩個運算滿足下列八條規(guī)則:①對任意

,

;②對任意

;③V中存在一個零元素,記作0,對任一

,都有

;2.1

線性空間④任一 ,都有

,使得

,元素y稱為x的負元素,記作–x;⑤對任一

,都有

;⑥對任何

,

;⑦對任何

,

,

;⑧對任何

,

;則集合V稱為數(shù)域P上的線性空間或向量空間,V中的元素常稱為向量。V中的零元素常稱為零向量.當P是實數(shù)域時,V叫實線性空間;當P是復數(shù)域時,V叫復線性空間;數(shù)域P上的線性空間有時簡稱為線性空間。422.1

線性空間43定義2-2

設V是數(shù)域P上的線性空間,W是V的一個非空子集,如果W對于V的加減法運算及數(shù)量乘法運算也構(gòu)成數(shù)域P上的線性空間,則W為V的一個線性子空間(簡稱子空間).如何判斷線性空間V的一個非空子集W是否構(gòu)成V的子空間?有如下定理:2.1

線性空間定理2-1設W是數(shù)域P上線性空間V的非空子集,則W是V的一個線性子空間當且僅當W對于V的兩種運算封閉,即(1)如果

,則

;(2)如果

,

,則 .定理2-2若W是有限維線性空間V的子空間,則W的一組基可擴充成V的一組基.由定理2.5.2可知,線性空間V的一組向量構(gòu)造V的子空間的方法如下所示。設,,……,是數(shù)域P上線性空間V的一組向量,這個向量組的所有線性組合組成的集合記為W,即

442.1

線性空間452.2.1內(nèi)積空間及其基本性質(zhì)我們首先在一般的線性空間中定義內(nèi)積運算,導出內(nèi)積空間的概念,然后引進長度、角度等度量概念。定義2-3 設V是數(shù)域P上的線性空間,V到P的一個代數(shù)運算記為。

如果

滿足下列條件:(1)

;(2)

;(3)

;(4)

,當且僅當

,其中k是數(shù)域P中的任意數(shù), 是V中的任意元素,則稱

為α與β的內(nèi)積。定義了內(nèi)積的線性空間V稱為內(nèi)積空間.特別地,稱實數(shù)域R上的內(nèi)積空間V為Euclid空間(簡稱為歐氏空間);稱復數(shù)域C上的內(nèi)積空間V為酉空間或復內(nèi)積空間。若內(nèi)積空間是完備的,稱為Hilbert空間(內(nèi)積空間+完備性)。462.2.1內(nèi)積空間及其基本性質(zhì)由定義2-3不難導出,在內(nèi)積空間中有(1)(2)(3)2.2.1內(nèi)積空間及其基本性質(zhì)2.2.1內(nèi)積空間及其基本性質(zhì)2.2.1內(nèi)積空間及其基本性質(zhì)定理2-3 設V是數(shù)域P上的內(nèi)積空間,則向量長度具有如下性質(zhì);

(1) 當且僅當

;

(2)對任意

,有

(3)對任意

,有

(4)對任意

,有

(5)對任意

,有

并且等號成立的充分必要條件是α,β線性相關(guān).502.2.1內(nèi)積空間及其基本性質(zhì)512.2.1內(nèi)積空間及其基本性質(zhì)522.2.1內(nèi)積空間及其基本性質(zhì)532.2.1內(nèi)積空間及其基本性質(zhì)定義2-5 設V是內(nèi)積空間,V中向量α與β之間的距離定義為

并稱

是由長度導出的距離.542.2.2度量矩陣定義2-6 設α,β是內(nèi)積空間中兩個向量,如果

,則稱α與β正交,記為

.552.2.2度量矩陣562.2.2度量矩陣定理2-4 設

是數(shù)域P上n維內(nèi)積空間V的一組基,則它的度量矩陣A非奇異.572.2.2度量矩陣定義2-7

,用表示以A的元素的共軛復數(shù)為元素組成的矩陣,

稱為A的共軛轉(zhuǎn)置矩陣。矩陣的共軛轉(zhuǎn)置運算具有下列性質(zhì):(1) ;(2) ;(3) ;(4) ;(5) ;(6)如果A可逆,則

。582.2.1內(nèi)積空間及其基本性質(zhì)定義2-8

,如果

,則稱A為Hermite矩陣;如果 ,則稱A為反Hermite矩陣。

實對稱矩陣是Hermite矩陣,有限維內(nèi)積空間的度量矩陣是Hermite矩陣定義2-9 如果n階實矩陣A滿足 ,則稱A為正交矩陣。

如果n階實矩陣A滿足 ,則稱A為酉矩陣。592.2.2度量矩陣602.2.1內(nèi)積空間及其基本性質(zhì)定義2-10

,且

,則稱A為正規(guī)矩陣。推論1 設A是n階正規(guī)矩陣,其特征值為

,則(1)A是厄米特(Hermite)矩陣的充要條件是:A的特征值全為實數(shù);(2)A是反厄米特矩陣的充要條件是:A的特征值為零或純虛數(shù);(3)A是酉矩陣的充要條件是:A的每個特征值的模。2.3.1對角矩陣方陣

的特點是:從左上角到右下角的直線(叫做對角線)以外的元素都是0,這種方陣稱為對角矩陣,簡稱對角陣。對角陣也記作:特別地當

時的線性變換叫做恒等變換,它對應的n階方陣

叫做n階單位矩陣62線性變換

對應n階方陣2.3.2單位矩陣形如

的矩陣特點為:對角線上的元素都是1,其他元素都是0即單位矩陣E的

元為:

。632.3.3初等矩陣1初等行變換

(1)對換兩行(對換i,j兩行,記作

);

(2)以數(shù)

乘某一行中的所有元素(第i行乘k,記作

)

(3)把某一行所有元的k倍加到另一行對應的元素上去(第j行的k倍加到第i行上,記作

).2初等列變換

把上面(1)(2)(3)的“行”換成“列”,得初等列變換。3初等變換

矩陣的初等行變換與初等列變換,統(tǒng)稱為初等變換。642.3.3初等矩陣4初等矩陣

定義2-11

,為一復數(shù),如下形式的矩陣

稱為初等矩陣。定理2-5 初等矩陣具有如下性質(zhì): (1)

; (2)如果

,則

可逆,并且其逆矩陣也是初等矩陣

其中

(3)對任意非零向量

,可適當選取和使得

652.3.3初等矩陣662.3.3初等矩陣672.3.3初等矩陣682.3.3初等矩陣692.4稠密及其完備性702.4稠密及其完備性712.4稠密及其完備性定義2-12(有界集)設

是非空數(shù)集。(1)如果存在

,使

,有

,則稱M為數(shù)集A的一個上界;(2)如果存在

,使,有,則稱m為數(shù)集A的一個下界;(3)如果數(shù)集A既有上界又有下界,則稱A為有界數(shù)集。注2-1數(shù)集有界的等價定義:如果存在

,使

,有

,則稱A為有界數(shù)集。722.4稠密及其完備性732.4稠密及其完備性742.4稠密及其完備性752.4稠密及其完備性762.4稠密及其完備性完備性在微積分中,數(shù)列

收斂

是基本列(或

列),它有六個相互等價的命題,這些命題反映了實數(shù)的完備性(連續(xù)性)?,F(xiàn)在將這一概念推廣到距離空間。定義2-14(基本列)設

是一距離空間,是X中的點列,如果, ,當

時,有

就稱為基本列(或

列).772.4稠密及其完備性定理2-7(基本列的性質(zhì))

中的基本列有如下的性質(zhì):(1)若點列收斂,則是基本列;(2)若點列是基本列,則有界;(3)若基本列含有收斂子列,則該基本列收斂,其極限為該子列的極限。782.4稠密及其完備性792.4稠密及其完備性802.5向量范數(shù)定義2-16(范數(shù)公理)

設V是數(shù)域P上的線性空間,是以V中的向量α

為自變量的非負實值函數(shù),如果它滿足以下三個條件:(1)非負性:當

時,

;當

時,

;(2)齊次性:對任意

,有

;(3)三角不等式:對任意

,有

。

則稱為向量α的范數(shù),并稱定義了范數(shù)的線性空間為賦范線性空間,稱

為賦范線性空間,簡記為V.如果V按照距離

是完備的,稱V為巴拿赫空間。812.5向量范數(shù)822.5向量范數(shù)832.5向量范數(shù)842.6矩陣范數(shù)定義2-17

設是以

中的矩陣A為自變量的非負實值函數(shù),如果它滿

足以下四個條件:(1)非負性:當

時,

;當時,

;(2)齊次性:對任意

,有

;(3)三角不等式:對任意

,有

;(4) ,則稱為矩陣A的范數(shù).852.6矩陣范數(shù)862.6矩陣范數(shù)定理2-8 設

,則有

(列模和最大者)

最大特征者)

(行模和最大者)通常將稱為A的列和范數(shù).稱為A的譜范數(shù),稱為A的行和范數(shù),稱為的Frobenius范數(shù)(范數(shù)).872.6矩陣范數(shù)882.6矩陣范數(shù)892.6矩陣范數(shù)902.6矩陣范數(shù)912.7矩陣擾動分析為了解決科學與工程實際中的實際問題,人們根據(jù)物理、力學等規(guī)律建立問題的數(shù)學模型,并根據(jù)數(shù)學模型提出求解數(shù)學問題的數(shù)值計算方法,然后進行程序設計,在計算機上計算出實際需要的結(jié)果。在數(shù)學問題的求解過程中,通常存在兩類誤差影響計算結(jié)果的精度,即數(shù)值計算方法引起的截斷誤差和計算環(huán)境引起的舍入誤差。為了分析這些誤差對數(shù)學問題解的影響,人們將其歸結(jié)為原始數(shù)據(jù)的擾動(或攝動)對解的影響。自然地,我們需要研究該擾動引起了問題解的多大變化,即問題解的穩(wěn)定性。922.7矩陣擾動分析932.7矩陣擾動分析942.7矩陣擾動分析952.7矩陣擾動分析962.7矩陣擾動分析972.7矩陣擾動分析982.7矩陣擾動分析992.7矩陣擾動分析1002.8廣義逆矩陣1012.8.1廣義逆矩陣的概念對

,Penrose以簡便實用的形式給出了矩陣A的廣義逆定義,并陳述了四個條件,稱為Penrose方程。(1) (2)(3) (4) 定義2-19對任意矩陣A,如果存在某個G矩陣,滿足Penrose方程的一部分或全部,則稱G為A的廣義逆矩陣。1022.8.1廣義逆矩陣的概念1032.8.2廣義逆矩陣與線性方程組的極小最小二乘解設A是的矩陣,其秩為

。關(guān)于矩陣A的Moore-Penrose廣義逆的存在性與唯一性,有如下結(jié)論:定理2-11設A是任意的

矩陣,存在并且唯一。定理2-12設A是

矩陣,其滿秩分解為其中B是矩陣,C是

矩陣,

,

則Moore-Penrose廣義逆的基本性質(zhì)可概述為如下定理。定理2-13設A是矩陣,則 (1)1042.8.2廣義逆矩陣與線性方程組的極小最小二乘解(2) (3) (4) (5) (6) (7) (8)若

,則(9)若

,則(10)若

分別為階正交矩陣,則(11)若

,其中R為r階非奇異矩陣,則1052.8.2廣義逆矩陣與線性方程組的極小最小二乘解定理2-14設

, ,則線性方程組

有解的充分必要條件是:

這時,

的通解是

其中

是任意的。定理2-15設

,,則不相容線性方程組

的最小二乘解的通

式為其中

是任意的。定理2-16設A是

矩陣,則G是Moore-Penrose廣義逆的充分必要條件為

是不相容線性方程組

的極小最小二乘解。106思考與練習2-1數(shù)域P上的線性空間的含義。2-2什么是張成的子空間?怎樣表示?2-3什么是內(nèi)積空間、歐氏空間及酉空間?各自具有哪些性質(zhì)?2-4試證明定理2-3中的(1)~(5)。2-5向量范數(shù)和矩陣范數(shù)各具有哪些性質(zhì)?2-6廣義逆矩陣具有哪些性質(zhì)?107第3章機器視覺編程基礎(chǔ)3.1Python安裝及環(huán)境搭建 3.1.1安裝Python 3.1.2安裝PyCharmCommunity 3.1.3PyCharm初始化

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

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

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)建一個新的工程在Interpreter目錄中選擇CondaEnvironment,在Interpreter右側(cè)目錄中選擇Python.exe,此文件Python.exe在已安裝好的Anaconda目錄下,點擊OK完成配置安裝OpenCV庫

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

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

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

Python中,如正負號運算符“+”和“-”接受一個操作數(shù)、可以將其稱為一元運算符。而接受兩個操作數(shù)的運算符可以稱為二元運算符,如“*”“/”等。如果在計算過程中包含多個運算符,其計算的順序需要根據(jù)運算符的結(jié)合順序和優(yōu)先級而定。優(yōu)先級高的先運算,同級的按照結(jié)合順序從左到右依次計算3.5.2運算符優(yōu)先級按優(yōu)先順序排列:運算符描述Or布爾“或”And布爾“與”Not布爾“非”in,notin成員測試is,isnot同一性測試<,<=,>,>=,!=,==比較|按位或^按位異或&按位與<<,>>移位+,-加法與減法*,/,%,//乘法,除法,取余,整數(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語句

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

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

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

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

qiepian:表示序列的名稱;

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

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

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

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

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

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

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

運行結(jié)果為:3.7.5修改append函數(shù)的作用是在列表末尾添加一個元素extend函數(shù)用于將一個列表添加到另一個列表的尾部由于元組的不可變性,我們不能改變元組的元素,但是可以將元組轉(zhuǎ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)運行結(jié)果為:3.7.5修改方法解釋說明s.append(x)把對象x追加到列表s的尾部s.clear()刪除所有元素s.copy()復制列表s.extend(t)把序列t附加到列表s的尾部s.insert(i,x)在下標i的位置插入對象xs.pop([i])返回并移除下標i位置的對象,省略i時為最后的對象s.remove(x)移除列表中第一個出現(xiàn)的xs.remove()列表反轉(zhuǎn)s.sort()列表排序,默認為升序列表對象的主要操作方法3.7.6刪除元素的刪除操作也只適用于列表,而不適用于元組,同樣,將元組轉(zhuǎn)換為列表就可以進行刪除操作。從列表中刪除元素很容易,可以使用del、clear、remove等操作del不僅可以刪除某個元素,還可以刪除對象clear會刪除列表中所有的元素remove(x)操作會將列表中出現(xiàn)的第一個x刪除3.8Numpy數(shù)組Numpy是Python編程語言的擴展,它增加了對大型多維數(shù)組和矩陣的支持,以及對這些數(shù)組進行操作的大型高級數(shù)學函數(shù)庫的支持。在Numpy中,數(shù)組的類型為ndarray(n維數(shù)組),所有元素必須具有相同的類型3.8.1Numpy.array在OpenCV中,很多PythonAPI是基于NumPy的,Numpy是Python的一種開源數(shù)值計算擴展,用來處理多維數(shù)組。例1:使用Numpy生成一個灰度圖像,其中的像素均為隨機數(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生成一個彩色圖像,其中的像素均為隨機數(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)建一個特定大小、全部填充為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這樣的表達式來選擇一系列元素,選擇的是以m開頭并以n-1結(jié)尾的元素(注意不包括第n個元素)。切片m:n也可以更明確地寫為m:n:1,其中數(shù)字1表示應該選擇m和n之間的每個元素。要從m和n之間每兩個元素選擇一個,請使用m:n:2,p個元素,則使用m:n:p一維數(shù)組(冒號:),通過冒號分隔切片參數(shù)start:stop:step來進行切片操作。一個參數(shù):a[i] 返回與該索引相對應的單個元素兩個參數(shù):b=a[i:j] 表示復制a[i]到a[j-1],以生成新的list對象三個參數(shù):b=a[i:j:s] 三個參數(shù)時,i、j、s為索引,通過冒號分隔切片參數(shù)start:stop:step來進行切片操作3.9.1字典的創(chuàng)建字典就是用大括號括起來的“關(guān)鍵字:值”對的集合體,每一個“關(guān)鍵字:值”對被稱為字典的一個元素。創(chuàng)建字典的一般格式為:字典名={[關(guān)鍵字1:值1[,關(guān)鍵字2:值2,……,關(guān)鍵字n:值n]]}其中,關(guān)鍵字與值之間用“:”分隔,元素與元素之間用逗號分隔。字典中關(guān)鍵字必須是唯一的,值可以不唯一。字典的元素是列表、元祖和字典另外,在Python中還有一種創(chuàng)建字典的方法,即dict函數(shù)法3.9.2字典的常規(guī)操作訪問在Python中可以通過關(guān)鍵字進行訪問,一般格式為:字典[關(guān)鍵字]例如:

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

dict_2={'name':'LiHua','score':95}dict_2['score']=80 運行結(jié)果為:print(dict_2)dict_2['agr']=19print(dict_2)3.9.2字典的常規(guī)操作刪除在Python中刪除字典有很多種方法,這里介紹del和clear方法。del方法的一般格式如下:del字典名[關(guān)鍵字] #刪除關(guān)鍵字對應的元素del字典真名 #刪除整個字典字典的刪除如下所示:dict_3={'name':'LiHua','score':95,'age':19}deldict_3['score']print(dict_3)dict_3.clear()print(dict_3)運行結(jié)果為:3.9.2字典的常規(guī)操作方法說明d.copy()字典復制,返回d的副本d.clear()字典刪除,清空字典d.pop(key)從字典d中刪除關(guān)鍵字key并返回刪除的值d.popitem()刪除字典的“關(guān)鍵字:值”對,并返回關(guān)鍵字和值構(gòu)成的元祖d.fromkeys()創(chuàng)建并返回一個新字典d.keys()返回一個包含字典所有關(guān)鍵字的列表d.values()返回一個包含字典所有值的列表d.items()返回一個包含字典所有“關(guān)鍵字:值”對的列表len()計算字典中所有“關(guān)鍵字:值”對的數(shù)目字典的其他操作方法3.9.3字典的遍歷對字典進行遍歷一般會使用for循環(huá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) 運行結(jié)果為:3.10.1函數(shù)的定義和調(diào)用函數(shù)是帶有名字的代碼塊,用于完成具體的任務在Python中,函數(shù)是一種運算或處理過程,即將一個程序段完成的運算或處理過程放在一個自定義函數(shù)中完成。這種操作首先要定義一個函數(shù),然后可以根據(jù)實際需要多次調(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ù),那么可以在調(diào)用函數(shù)時傳入實際參數(shù),當然,如果沒有,可以不傳,只保留一個空括號。但需要注意的是,無論有沒有參數(shù)的傳遞,函數(shù)名后的括號都不可以省略。3.10.1函數(shù)的定義和調(diào)用例:根據(jù)海倫公式計算三角形的面積。importmathdefangle_area(a,b,c):

溫馨提示

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

評論

0/150

提交評論