c_learn_2
1176
2022-05-30
智能科學與技術(shù)叢書
計算機視覺算法:基于OpenCV的計算機應用開發(fā)
Hands-On Algorithms for Computer Vision
[伊朗] 阿明·艾哈邁迪·塔茲赫孔迪
(Amin Ahmadi Tazehkandi) 著
陳靖 楊欣 譯
譯? 者? 序
Hands-On Algorithms for Computer Vision
美國東部時間2012年6月25日,當《紐約時報》作家Jim Wilson寫下《How Many Computers to Identify a Cat? 16,000》這篇報道時,應該只有很少人能預料到:這個現(xiàn)象及其背后的技術(shù),將如此迅速而深刻地為一個時代的變革拉開序幕。當時的我,在準備赴美讀博時也并未把機器學習作為可能的研究方向。兩年后,博士肄業(yè)加入谷歌的我發(fā)現(xiàn),無論愿意與否,計算機專業(yè)的熱點已轉(zhuǎn)到了人工智能和機器學習(尤其是深度學習),想要將自己置身于這浪潮之外會越來越難:不管是什么方向的技術(shù)峰會、專業(yè)論壇,人工智能和機器學習都是人們關(guān)心的方向,也是嘉賓和講師必然會涉及的話題。
在機器學習的諸多領(lǐng)域中,計算機視覺是目前發(fā)展最成熟的方向之一,也是許多人接觸機器學習算法的起點。深度學習之所以火起來,不正是始于吳恩達博士在谷歌大腦用深度學習算法讓機器學會識別貓嗎(在薛定諤的貓之后,貓又一次為科學發(fā)展做出了貢獻)?同樣,讓機器更聰明地看與聽,仍將是未來幾年人工智能的主要課題之一。而隨著國家AI+戰(zhàn)略的推進,未來不只是計算機軟硬件以及互聯(lián)網(wǎng)行業(yè)的從業(yè)者會站在這波浪潮之巔,過去相對傳統(tǒng)的行業(yè)也將被卷入其中。以在線教育為例:作業(yè)幫、一起作業(yè)網(wǎng)等能夠拍照搜題;叮咚課堂、aiKID和葡萄英語能夠進行簡單的語音識別,用AI老師的方式跟孩子互動;而在51Talk,我們用人臉識別、表情識別來進行課堂質(zhì)量監(jiān)督并根據(jù)孩子的表現(xiàn)調(diào)整教學內(nèi)容。在線教育只是冰山一角,在當下已經(jīng)有成百上千的應用場景正在被AI深度影響甚至顛覆。
與其他計算機領(lǐng)域一樣,理解計算機視覺算法需要堅實的數(shù)學基礎(chǔ)。此外,讀者最好還具備圖像處理、信號與系統(tǒng)、計算機圖形學等學科的背景及開發(fā)經(jīng)驗。開發(fā)者還要掌握各種基礎(chǔ)算法和數(shù)據(jù)結(jié)構(gòu),以應對各種開發(fā)需求。當然,在移動設(shè)備成為主要個人計算平臺的今天,針對不同硬件條件下圖像和視頻的采集、編解碼、傳輸,以及不同處理器和片上系統(tǒng)(System on Chip,SoC)的優(yōu)化與測試更是算法落地必不可少的技能。沒有足夠的理論知識和工程經(jīng)驗的初學者面對如此浩瀚繁多且異常艱深的內(nèi)容將無從下手。
然而,本書和許多計算機視覺書籍的最大區(qū)別就在于隱藏了很多復雜的細節(jié),繞開了相關(guān)算法的數(shù)學證明和實現(xiàn),利用計算機視覺領(lǐng)域大名鼎鼎的OpenCV(Open Source Computer Vision library),讓讀者自己動手,實現(xiàn)一個個具體且實用的例子。這樣的好處顯而易見,讀者在完成這些實例后能熟悉計算機視覺算法開發(fā)的整體流程,逐步樹立自信。相關(guān)算法的細節(jié)可以通過研究OpenCV源代碼,結(jié)合閱讀相關(guān)書籍、論文來逐步補充學習。在譯者看來,這是掌握一門技術(shù)的最佳路徑。
本書特別適合計算機背景的學生和開發(fā)者學習閱讀。全書在簡單介紹了計算機視覺的基本概念和OpenCV的使用方法后,按照計算機視覺項目開發(fā)的難易程度,從基礎(chǔ)的圖像和視頻的讀寫操作,到簡單的圖像矩陣運算,再到基礎(chǔ)的圖像處理、視頻分析,最后到對象檢測與機器學習分類算法,抽絲剝繭層層遞進。本書還配備了完整的示例代碼,有助于讀者自主學習并驗證各種算法的效果。同時,得益于OpenCV提供的工具、函數(shù)和類,這些示例代碼都很輕量,非常易于理解。推薦讀者在閱讀本書時參考OpenCV的官方文檔和其他圖像處理、機器學習算法類的書籍,這樣將會事半功倍。
譯者在本書的翻譯過程中,得到了北京大生在線科技有限公司(51Talk)的同事和華章公司編輯的大力協(xié)助,在此由衷感謝。
譯者
前 言
Hands-On Algorithms for Computer Vision
我們正生活在一個激動人心的時代。每天你都能發(fā)現(xiàn)全新的軟件或電子設(shè)備,它們?yōu)槟阃瓿商囟üぷ鳌⑻峁蕵贰⒙?lián)系親朋好友、以圖片或視頻的形式記錄你的生活等。不管是你口袋里巴掌大的智能手機、手腕上小巧的智能手表,還是你聯(lián)網(wǎng)的智能汽車,大部分軟件和設(shè)備的出現(xiàn)都歸功于處理器技術(shù)的巨***展。更便宜、更快速的處理器能運行優(yōu)秀的軟件庫和軟件框架,使得一些過去被認為只能由人類感知器官(例如眼睛和耳朵)來完成的任務,可以通過數(shù)學算法和計算機技術(shù)高效地實現(xiàn)。
計算機視覺是計算機科學的一個分支領(lǐng)域,近年來,隨著硬件和軟件技術(shù)的發(fā)展,這個領(lǐng)域有了革命性的進步。反過來,計算機視覺也同樣深刻地影響了硬件和軟件的發(fā)展。如今,從數(shù)碼相機拍照這樣簡單的任務到理解自動駕駛汽車的環(huán)境從而躲避車禍這樣復雜的任務,計算機視覺被應用到各個方面。它可以在視頻錄像中把人臉換成兔子,也可以在顯微鏡影像中檢測癌變細胞和組織從而挽救人的生命。說到計算機視覺應用的可能性,可以說是沒有限制,尤其考慮到軟件庫和軟件框架的巨大進步,公司和開發(fā)者可以把他們無窮無盡的想法變成現(xiàn)實。
在過去的幾年里,OpenCV(全稱是Open Source Computer Vision library,開源計算機視覺庫)已經(jīng)發(fā)展為一套完整的計算機視覺開發(fā)工具。它涵蓋了幾乎所有你能想到的解決計算機視覺問題所需的功能:從最基本的圖像操作,如縮放和濾鏡,到可用于快速準確地檢測物體的機器學習算法訓練模型。它也提供了開發(fā)計算機視覺應用需要的幾乎所有模塊,并支持一些最流行的編程語言,如C++和Python。你甚至能找到.NET框架的接口。OpenCV能在所有主流操作系統(tǒng)上運行,包括移動系統(tǒng)和桌面平臺。
本書的目標是用實際的例子和項目教會讀者如何使用OpenCV 來進行計算機視覺應用的開發(fā)。本書每一章都會講解一些對應主題的計算機視覺算法,按照章節(jié)順序,讀者能學到大量可實際應用到項目中的計算機視覺算法。雖然本書大部分算法都是獨立的,但強烈推薦讀者從頭開始閱讀,并嘗試按章節(jié)順序建立計算機視覺知識體系。請讀者親手實踐書中的每個例子,這些例子都很有趣,能讓讀者在實踐過程中樹立自信。
本書是數(shù)月辛勤工作的成果,而且如果沒有 Tiksha Sarang 耐心而出色的編輯、Adhithya Haridas精準深刻的技術(shù)評審和批注以及 Sandeep Mishra 提供的這次難得的出版機會,本書是不可能完成的。感謝技術(shù)評審 Zhuo Qingliang 先生的大力幫助和其他所有協(xié)助我完成并出版這本書的 Packt 出版社的員工以及計算機視覺開源社區(qū)的成員。
本書的目標讀者
任何有扎實 C++ 編程語言基礎(chǔ)和第三方軟件庫使用經(jīng)驗的開發(fā)人員都能輕松閱讀本書和上手書中的例子。另外,熟悉 Python 編程語言的開發(fā)者也能使用本書學習使用OpenCV 軟件庫,但需要自己把 C++ 的例子轉(zhuǎn)為 Python,因為本書中出現(xiàn)的算法主要是 C++ 版的。
本書內(nèi)容
第1章介紹計算機視覺科學的基礎(chǔ)—它是什么,它用在哪,圖像的定義和基本屬性,例如像素、深度和通道等。該章比較短,是針對機器視覺領(lǐng)域的入門讀者進行介紹的章節(jié)。
第2章通過概述OpenCV 開發(fā)最重要的組成模塊來介紹OpenCV 軟件庫及其核心部件。讀者也能了解如何獲取和使用 OpenCV。該章會簡略介紹用 CMake 創(chuàng)建 OpenCV 工程,讓讀者學會 Mat 類及其變體、圖像視頻的讀寫操作,以及獲取攝像頭輸入(包括其他類型的輸入方式)。
第3章涵蓋了用于創(chuàng)建和修改矩陣的基礎(chǔ)算法。讀者將學習如何進行矩陣運算,比如向量乘積、標量乘積和矩陣求逆。除了求均值、求和和傅里葉變換這些數(shù)學運算,這一章將引入很多基于矩陣元素的運算。
第4章盡可能多地覆蓋了本書涉及的各類圖像處理算法。讀者將學習如何在圖像中繪制圖形和文字,還將學習如何繪制直線、箭頭、矩形等。該章還將展示各種廣泛應用的圖像濾鏡操作算法,例如圖像的平滑、膨脹、腐蝕和形態(tài)操作。學完該章,讀者將熟悉功能強大的重映射算法和計算機視覺領(lǐng)域使用的各種色彩映射表。
第5章引入直方圖的概念并介紹單通道和多通道圖像計算直方圖的方法。讀者將學習灰度和彩***像的直方圖數(shù)據(jù)可視化,或者說,由像素的色調(diào)值來計算直方圖。讀者還將學習反向投影這種直方圖的逆運算。直方圖的比較和均衡也是該章的主題。
第6章解釋了如何處理視頻,尤其是實時目標檢測和追蹤,這些操作運用了一些流行的計算機視覺追蹤算法。在簡略介紹了視頻處理的基礎(chǔ)知識之后,讀者將結(jié)合實例學習目標追蹤應用場景下的均值偏移(Mean Shift)、CAM偏移(CAM Shift)算法及卡爾曼濾波(Kalman filtering)。學完該章,讀者將掌握背景和前景提取算法及其在實踐中的使用方法。
第7章首先是目標檢測的簡介,接著引入各類用于形狀分析的算法。該章涵蓋的主題還包括關(guān)鍵點檢測、描述符提取和描述符匹配,它們被用于基于特征(而不是基于簡單的色調(diào)或亮度值)的目標檢測中。
第8章涵蓋了OpenCV 里的機器學習(ML)、深度神經(jīng)網(wǎng)絡(luò)(DNN)模塊和一些重要的算法、類和函數(shù)。從SVM算法開始,讀者將學習如何用多種類似的訓練流程來訓練模型,然后用模型來對輸入進行分類。讀者將學習如何用HOG描述符和SVM對圖像分類。該章也涵蓋了OpenCV中構(gòu)建人工神經(jīng)網(wǎng)絡(luò)的方法,并介紹了級聯(lián)分類。8.5節(jié)將教授讀者如何使用第三方軟件庫生成的模型(例如TensorFlow 模型)來實時檢測多個物體。
如何從書中獲益更多
盡管所有章節(jié)里需要的工具和軟件在每章的開頭都有描述, 作為一個簡單快速的參考,這里列表如下:
一臺普通計算機,要求安裝了較新版本的 Windows、macOS 或 Linux (比如 Ubuntu) 操作系統(tǒng)
Microsoft Visual Studio (Windows 系統(tǒng))
Xcode (macOS 系統(tǒng))
CMake
OpenCV
首先,讀者可以通過網(wǎng)上搜索或是詢問當?shù)氐挠嬎銠C商店來了解目前主流計算機的配置,不過讀者手頭用的機器一般足夠?qū)W習使用了。
另外,使用哪種集成開發(fā)環(huán)境(IDE)或是編譯系統(tǒng)(在本例中為CMake)與書中提供的例子關(guān)系不大。例如,只要熟悉 OpenCV 軟件庫在其中的設(shè)置方法,讀者完全可以使用任何代碼編輯器或編譯系統(tǒng)來學習書中的例子。
下載示例代碼及彩***像
本書的示例代碼及所有截圖和樣圖,可以從http://www.packtpub.com通過個人賬號下載,也可以訪問華章圖書官網(wǎng)http://www.hzbook.com,通過注冊并登錄個人賬號下載。
本書的代碼包在https://github.com/PacktPublishing/Hands-On-Algorithms-for-Computer-Vision也能找到。這個GitHub倉庫里的代碼會保持更新。
約定
警告或要點使用這樣的圖標。
提示和技巧使用這樣的圖標。
Hands-On Algorithms for Computer Vision
阿明·艾哈邁迪·塔茲赫孔迪(Amin Ahmadi Tazehkandi)是一位伊朗作家、軟件開發(fā)人員和計算機視覺專家。他在伊朗完成了計算機軟件工程學習,并為世界各地的眾多軟件和工業(yè)公司工作。
我要感謝我的妻子Senem,她是我的激情、愛和力量的象征。 我還要感謝我的家人,他們是一群由一位發(fā)明家父親和慈愛的母親所生的杰出工程師,感謝他們無條件的愛和支持。
關(guān)于審稿人
Hands-On Algorithms for Computer Vision
Zhuo Qingliang(KDr2 online)目前在金融科技創(chuàng)業(yè)公司 paodingai 工作,該公司致力于通過使用人工智能技術(shù)改善金融業(yè)。 他在Linux、C、C ++、Java、Python和Perl開發(fā)方面擁有超過10年的經(jīng)驗。 他對編程、咨詢工作感興趣并為開源社區(qū)提供幫助 。
他擁有一個個人網(wǎng)站KDr2,在那里你可以找到更多關(guān)于他的信息。
目 錄
Hands-On Algorithms for Computer Vision
譯者序
前言
關(guān)于審稿人
第1章 計算機視覺概述? 1
1.1 技術(shù)要求? 1
1.2 理解計算機視覺? 1
1.3 理解計算機圖像? 3
1.3.1 色彩空間? 5
1.3.2 輸入、處理和輸出? 7
1.4 計算機視覺框架和軟件庫? 8
1.5 總結(jié)? 9
1.6 習題? 9
第2章 OpenCV入門? 11
2.1 技術(shù)要求? 12
2.2 OpenCV介紹? 12
2.3 OpenCV的下載、編譯和安裝? 14
2.4 在C++或Python項目中使用OpenCV? 17
2.5 理解Mat類? 19
2.5.1 創(chuàng)建一個Mat對象? 20
2.5.2 刪除一個Mat對象? 23
2.5.3 訪問像素? 24
2.6 圖像讀寫? 27
2.7 視頻文件讀寫? 29
2.7.1 使用攝像頭? 31
2.7.2 使用RTSP和網(wǎng)絡(luò)流媒體? 32
2.8 Mat類家族? 32
2.9 總結(jié)? 32
2.10 習題? 33
2.11 補充閱讀? 33
第3章 數(shù)組和矩陣操作? 34
3.1 技術(shù)要求? 34
3.2 Mat類中的操作? 35
3.2.1 克隆矩陣? 35
3.2.2 計算叉積? 35
3.2.3 提取對角線? 36
3.2.4 計算點積? 36
3.2.5 學習單位矩陣? 37
3.2.6 矩陣求逆? 37
3.2.7 元素級矩陣乘法? 37
3.2.8 全一和全零矩陣? 37
3.2.9 矩陣轉(zhuǎn)置? 38
3.2.10 重塑Mat對象? 39
3.3 元素級矩陣操作? 39
3.3.1 基本操作? 39
3.3.2 按位邏輯操作? 43
3.3.3 比較操作? 47
3.3.4 數(shù)學操作? 48
3.4 矩陣和數(shù)組級操作? 49
3.4.1 為外推法生成邊界? 50
3.4.2 翻轉(zhuǎn)(鏡像)和旋轉(zhuǎn)圖像? 51
3.4.3 使用圖像通道? 52
3.4.4 數(shù)學函數(shù)? 54
3.4.5 搜索和定位功能? 58
3.5 總結(jié)? 60
3.6 習題? 61
第4章 繪圖、濾鏡和變換? 62
4.1 技術(shù)要求? 62
4.2 在圖像上繪圖? 63
4.2.1 在圖像上打印文字? 63
4.2.2 在圖像上繪制形狀? 66
4.3 圖像濾鏡? 72
4.3.1 模糊/平滑濾鏡? 72
4.3.2 形態(tài)濾鏡? 76
4.3.3 基于導數(shù)的濾鏡? 79
4.3.4 任意濾鏡? 80
4.4 圖像變換? 81
4.4.1 閾值算法? 81
4.4.2 色彩空間和類型轉(zhuǎn)換? 83
4.5 幾何變換? 84
4.6 使用色彩表? 86
4.7 總結(jié)? 88
4.8 習題? 88
第5章 反向投影和直方圖? 89
5.1 技術(shù)要求? 89
5.2 理解直方圖? 90
5.3 直方圖反向投影? 95
5.4 直方圖比較? 103
5.5 直方圖均衡? 105
5.6 總結(jié)? 106
5.7 習題? 107
5.8 補充閱讀? 107
第6章 視頻分析——運動檢測和
追蹤? 108
6.1 技術(shù)要求? 108
6.2 視頻處理? 109
6.3 理解均值偏移算法? 112
6.4 使用連續(xù)自適應均值偏移算法? 119
6.5 使用卡爾曼濾波器進行運動追蹤和降噪? 122
6.6 如何提取背景和前景? 129
6.7 總結(jié)? 132
6.8 習題? 132
第7章 對象檢測——特征和描述符? 133
7.1 技術(shù)要求? 133
7.2 用于對象檢測的模板匹配? 134
7.3 檢測角點和邊緣? 137
7.3.1 學習Harris角點檢測算法? 137
7.3.2 邊緣檢測算法? 143
7.4 輪廓計算和分析? 147
7.5 特征檢測、描述和匹配? 152
7.6 總結(jié)? 158
7.7 習題? 158
第8章 機器學習與計算機視覺? 160
8.1 技術(shù)要求? 160
8.2 支持向量機? 161
8.3 用人工神經(jīng)網(wǎng)絡(luò)訓練模型? 169
8.4 級聯(lián)分類算法? 171
8.4.1 使用級聯(lián)分類器進行對象檢測? 171
8.4.2 訓練級聯(lián)分類器? 174
8.5 使用深度學習模型? 180
8.6 總結(jié)? 184
8.7 習題? 184
習題答案? 185
機器視覺 OpenCV 計算
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。