• 沒有找到結果。

以多核心圖形處理器加速影像處理之研究

N/A
N/A
Protected

Academic year: 2021

Share "以多核心圖形處理器加速影像處理之研究"

Copied!
62
0
0

加載中.... (立即查看全文)

全文

(1)國立臺灣師範大學電機工程學系. 碩士論文. 指導教授:林政宏博士 以多核心圖形處理器加速影像處理之研究 A Study on Acceleration of Image Processing Using Multicore Graphical Processing Units. 研究生:周文瑞撰. 中 華 民 國 一 ○ 五 年 六 月.

(2) 以 多 核 心 圖 形 處 理 器 加 速 影 像 處 理 之 研 究. 學生:周文瑞. 指導教授:林政宏 博士. 國立臺灣師範大學電機工程學系碩士班. 摘. 要. 本論文研究以多核心圖形處理器(Multicore Graphic Processing Units)加速影像 處理演算法,我們 以全向圖(omnidirectional pictures)轉換 成 全景圖(panoramic pictures)及車牌辨識(vehicle license plate recognition)系統為例,提出平行演算法並 以多核心圖形處理器進行相關演算法加速。 論文首先針對橢圓拋物曲面全向圖轉換成全景圖的演算法進行平行化研究, 本論文提出了一個階層式的平行架構包含資料平行(data parallelism)與任務平行 (task parallelism)兩個階層,其中資料平行階層是透過執行圖形處理器的大量執行 緒平行轉換每個像素從全向圖移轉至全景圖,而任務平行階層是透過圖形處理器 多串流技術(multiple stream),以管線化(pipelining)的方式平行執行多個影像的轉 換。任務平行可以藉由重疊影像處理器的核心運算與資料傳輸的執行時間來改善 整體的效能。實驗結果顯示相較於 CPU,透過圖形處理器,我們可以得到 6.33 倍 的改善。 論文第二部分,我們針對車牌辨識系統進行平行化研究,一個車牌辨識系統 主要包含車牌定位、車牌校正、文字切割與文字辨識等四大步驟。首先在車牌定 位部分,我們透過灰階轉換、直方圖等化、二值化、輪廓萃取與剛性物體偵測之 核心演算法取得車牌的位置,然後在車牌校正方面,我們使用仿射轉換中的單映. i.

(3) 性以校正歪斜的車牌。在文字分割方面,我們利用輪廓萃取及邊緣偵測將文字與 車牌面積進行計算,並將車牌中的文字分割取出。最後在文字辨識部份,我們利 用樣板比對法(template matching)作為文字辨識的方法,為了縮短辨識系統計算的 時間,我們透過圖形處理器加速車牌文字辨識的計算速度相較於 CPU,我們可以 得到 100 倍的改善。 關鍵字:多核心圖形處理器、影像處理、全景圖轉換、車牌定位、車牌辨識. ii.

(4) A Study on the Acceleration of Image Processing Using Multicore Graphical Processing Units student:Wen-Jui Chou. Advisors:Dr. Chen-Hung Lin. Department of Electrical Engineering National Taiwan Normal University. ABSTRACT This thesis proposes to accelerate image processing algorithms using multicore Graphic Processing Units (GPUs). Taking the transformation of omnidirectional pictures to panoramic pictures and vehicle license plate recognition system as cases, we propose parallel approaches to accelerate relative image processing algorithms using GPUs. First, we study to parallelize the transformation of elliptical omnidirectional pictures to panoramic pictures. We propose a hierarchical parallelism architecture which includes data parallelism and task parallelism. The data parallelism issues large amount of threads to simultaneously map each pixel of an elliptical omnidirectional pictures to the corresponding position in a panoramic pictures. On the other hand, the task parallelism adopts multiple stream technique to pipeline the transformation of multiple images. The task parallelism improves the overall throughput by overlapping the latency of kernel computation and data transmission time. Experimental results demonstrate that the proposed algorithm achieves 6.33 times of performance improvement as compared to CPU counterpart. Furthermore, we study on the parallelization of vehicle license plate recognition system. A vehicle license plate recognition system composes of four stages including plate localization, plate calibration, text segmentation, and text recognition. First, in the step of plate localization, we obtain the position of a plate via the steps of gray transformation, histogram equalization, image binarization, contour extraction, and rigid iii.

(5) object detection. Then, in the step of plate calibration, we adopt single affine transformation to calibrate skew license plates. Furthermore, in the step of text segmentation, we segment texts by extracting the edges and contours of texts and compare their area with that of a license plate. Finally, we perform text recognition using template matching algorithm. In order to reduce the elapsed time of text recognition, we propose to accelerate template matching algorithm using GPUs, compared to the CPU, we can get 100 times improvement.. Keywords: multicore graphic processing units, image processing, panoramic pictures transformation, vehicle license plate localization, vehicle license plate recognition. iv.

(6) 誌. 謝. 感謝林政宏教授的教導與指導,讓我在人生最煎熬的時刻有一個安定學習的 力量,也讓我在碩士班的日子裡,學習到最重要的專業知識,謹將本篇論文,獻 給我最愛的父母,家人,及關心我的所有朋友,最後希望在求學時期的研究在畢 業之後能對社會有貢獻。. 文瑞 謹誌. v.

(7) 目. 錄. 中 文 摘 要 ............................................................................................................. i 英 文 摘 要 .............................................................................................................iii 致 謝 .......................................................................................................................... v 目 錄 ......................................................................................................................... vi 圖 目 錄 .................................................................................................................viii 表 目 錄 .................................................................................................................... x 符號說明 ................................................................................................................... xi 第一章. 緒論 ........................................................................................................ 1. 1.1. 研究背景與目的 .................................................................................... 1. 1.2. 研究動機 ................................................................................................ 1. 1.3. 論文架構 ................................................................................................ 2. 第二章. 文獻探討 ................................................................................................. 3. 2.1. 影像處理加速技術 ................................................................................ 3. 2.1.1. FPGA 加速技術 ............................................................................. 3. 2.1.2. 異質硬體加速方法 ......................................................................... 3. 2.1.3. CUDA 加速技術 ............................................................................ 4. 2.2. 欲解決效能瓶頸之目標演算法 ............................................................ 4. 2.2.1. 全向圖轉全景圖 ............................................................................. 5. 2.2.2. 車牌辨識系統 ................................................................................. 5. 2.3. 車牌辨識系統所需演算法 .................................................................... 6. 2.3.1. 灰階轉換 ......................................................................................... 6. 2.3.2. 直方圖等化 ..................................................................................... 7. 2.3.3. 二值化 ........................................................................................... 10. 2.3.4. 去雜訊膨脹侵蝕 ........................................................................... 13. 2.3.5. 輪廓找尋法 ................................................................................... 15. 2.3.6. 單應性(homography) .............................................................. 15. vi.

(8) 2.3.7. 機器學習演算法 ........................................................................... 15. 2.3.8. 字元辨識 ....................................................................................... 16. 第三章. 影像處理演算法系統架構 ................................................................... 18. 3.1. 全向圖轉全景圖之核心演算法 .......................................................... 18. 3.2. 車牌辨識系統 ...................................................................................... 20. 3.2.1. 車牌辨識的方法與流程 ............................................................... 20. 3.2.2. 取輪廓 ........................................................................................... 21. 3.2.3. 挑選符合條件的輪廓 ................................................................... 22. 3.3. 車牌校正 .............................................................................................. 23. 3.4. SVM 分類器 ........................................................................................ 25. 3.4.1 3.5. 訓練流程與測試流程 ................................................................... 28. 文字切割 .............................................................................................. 28. 3.5.1. 方法流程 ....................................................................................... 28. 3.5.2. 樣板匹配 ....................................................................................... 29. 第四章. 圖形處理器用於加速影像處理演算法之系統架構 .......................... 32. 4.1. 管線化 (Pipeline) 處理 ...................................................................... 32. 4.2. CUDA 與全景影像轉換..................................................................... 33. 4.3. CUDA 與車牌樣板比對..................................................................... 37. 第五章. 模擬分析與實驗 .................................................................................. 39. 5.1. 實驗環境 .............................................................................................. 39. 5.2. 平行化以全向圖轉全景圖之結果 ...................................................... 39. 5.3. 平行化做樣板匹配之結果 .................................................................. 41. 5.4. 歪斜車牌轉正執行結果 ...................................................................... 42. 5.5. 行化的車牌偵測與字元辨識系統實行結果 ...................................... 42. 第六章. 結論與未來展望 .................................................................................. 45. 參考文獻 .................................................................................................................. 46 自. 傳 .................................................................................................................. 49. vii.

(9) 圖 目 錄 圖 2-1. 灰階轉換的三個方法 (A) 原圖; (B) 平均法; (C) LIGHTNESS 法; (D)LUMINOSITY 法。 .......................................................................................6. 圖 2-2. 直方圖等化 (A) 原圖; (B) 直方圖等化結果 .............................................7. 圖 2-3. 以門檻值減少影像色彩數之方法 ................................................................10. 圖 2-4. 對於同一影像設不同門檻值二值化的結果:(A)原圖;(B)使用不同 門值檻二值化的結果。 ................................................................................11. 圖 2-5. 影像經過大津演算法二值化之結果 (A) 原圖與二值化結果(B)二值化 時使用的影像直方圖與找出的門檻值。 ....................................................11. 圖 2-6. 以 OTSU 法進行影像二值化:(A) 原圖;(B)經二值化的結果;(C) 依 照直方圖分析得到紅色門檻值。 ................................................................11. 圖 2-7. 影像前景分割 (A) 欲分割的兩張影像前景原圖;(B)分割後的影像前 景遮罩。 ........................................................................................................13. 圖 2-8. 使用方形結構元素對物體作膨脹之示意圖。 ............................................14. 圖 2-9. 使用方形結構元素對物體作侵蝕之示意圖。 ............................................14. 圖 2-10 影像輪廓找尋 (A) 二值化的原圖; (B) 以不同顏色框選出不同輪廓 之結果。 ........................................................................................................15 圖 3-1. 全向圖轉全景圖之概念 ................................................................................18. 圖 3-2. 橢圓面轉為矩形面的概念,橢圓的座標為(X,Y),經演算法轉換成 長方形的座標(R,  ) .....................................................................................19. 圖 3-3. 車牌定位與辨識流程圖 ................................................................................20. 圖 3-4. 影像輪廓抓取:(A) 經過二值化的影像;(B) 抓取輪廓後的影像, 不同顏色的區域代表不同輪廓。 ................................................................22. 圖 3-5. 選取符合條件的車牌影像輪廓:(A)由程式找到的車牌影像輪廓;(B) 經由篩選機制後剩下符合車牌樣貌的影像輪廓。....................................23. 圖 3-6. 歪斜梯形車牌拉正之示意圖,首先計算出歪斜車牌與正車牌的線性 關係,取得一矩陣 H。接著將歪斜車牌的點乘上 H 矩陣,取得正 viii.

(10) 的矩型車牌。 ................................................................................................24 圖 3-7. SVM 的簡要圖示及作用,其中黑色和白色的點分屬不同類別的資料 點。 ................................................................................................................26. 圖 3-8. 車牌文字辨識流程圖 ....................................................................................29. 圖 3-9. 用於數字辨識時,匹配用的字母樣板 ........................................................31. 圖 3-10 一個車牌辨識的結果,車牌辨識系統能夠將車牌上的文字擷取成有意 義的文字。 ....................................................................................................31 圖 4-1. 管線化之概念 ................................................................................................33. 圖 4-2. 全向圖轉全景圖於 CUDA 的 KERNEL FUNCTION 虛擬碼 .......................35. 圖 4-3. 樣板匹配於 CUDA 的 KERNEL FUNCTION 虛擬碼 ...................................36. 圖 4-4. CUDA 的管線化執行結果。橫軸為時間,縱軸為 STREAM。左方第 個棕色方塊為「由主記憶體寫入 GPU 記憶體」,中間藍色方塊 KERNEL 執行,右方棕色方塊為「由 GPU 記憶體寫回主記憶體」。 ........................................................................................................................37. 圖 4-5. 欲匹配之樣板總圖 ........................................................................................37. 圖 4-6. GPU 階層圖 ..................................................................................................38. 圖 4-7. REDUCTION SUM 運作示意圖 .......................................................................38. 圖 5-1. 使用平行處理機制,將全向圖轉全景圖之結果:(A)原全向圖; (B)經轉換為全景圖之影像。 .......................................................................40. 圖 5-2 車牌轉正結果:(A) 原圖;(B) 轉正後影像。 ............................................42 圖 5-3 車牌偵測與字元辨識結果:(A) (B)全部辨識成功;(C)因為邊界超出 切割區域的外圍而部分未受到辨識;(D)因為樣板匹配問題而部分辨識 錯誤…………………………………………………………………………43. ix.

(11) 表 目 錄. 表 5-1 使用 CPU 與使用 CUDA 處理 FULL HD 全向圖影像的所需時間比 較……………………………………………………………………………40 表 5-2. 使用 CPU 與使用 CUDA 處理樣板匹配的所需時間比較 (a)將每個 文字匹配影像逐次傳輸給 GPU 匹配;(b)將每個文字匹配影像合成 一個檔案傳輸給 GPU 匹配……………………………………………....41. x.

(12) 符號說明 r. :待增強車牌影像的灰階值. L. :車牌圖像中可能的灰階值總數. 𝑃𝑟 (𝑟) :代表隨機變數 r 的機率密度函數 𝑃𝑠 (𝑠) n. :代表隨機變數 s 的機率密度函數 :是車牌影像中像素值的總和. h(i). :灰階值 i 的機率. 𝑇∗. :設定之門檻值. 𝑢. :像素平均值. 𝜎. :標準差. 𝜇. :平均值. a. :為橢圓長軸長度. b. :為橢圓短軸長度. x0. :橢圓原點 x 座標. y0. :橢圓原點 y 座標. F. :車牌影像. {fij }. :車牌影像中於 (i,j) 的像素點. NBD. :新發現邊界的連續數字. LNBD :在搜尋的過程中最接近邊緣的連續數字 H. :單應性矩陣. 𝑤𝑖. :(for homograpy) 為特徵權重倍數. b. :(for svm) 超平面向量的截距. . :support vector 的 margin 的上下界. D. :separating hyperplane 與兩個 support hyperplane 的距 離. 𝛼𝑖. :拉格朗治乘數. xi.

(13) 𝑝u. :標準字元模板中第 p 張模板的第 u 筆資料. 𝑞𝑢. :受測的字元第 q 張模板的第 u 筆資料. p(𝑝, 𝑞) :為受測的字元與標準字元模板之相似程度 𝑁. :直方圖總數. 𝐷𝐵2 (𝑃, 𝑄) :為兩個 Beta 分佈之間的平方 Bhattacharyya 距離. xii.

(14) 第一章. 緒論. 1.1 研究背景與目的 隨著時代進步愈來愈快,影像處理之技術應該是最普及也是最廣為大眾接受 的科技技術之一,各種影像處理的技術和結合各種不同的判斷條件在過去幾年已 經有很多研究論文,在本章中我們將說明本論文的研究背景與動機、系統架構及 論文架構,以下分別以全向圖轉換成全景圖系統以及車牌辨識為例進行研究。. 1.2 研究動機 At&t 公司於 1996 年推出全球第一支反射式 360 度全景攝影機後,1997 年, Columbia University 的 Nayar 首次使用單一視點單一攝影鏡頭進行影像拍攝,為了 更能夠觀賞 360 度環景影像。全向圖擷取技術對於監控系統而言是一個非常實用 的項目,因為其具有一般攝影機數倍寬廣的視野,能夠取代多台攝影機,減少監 控的死角。然而全向圖畫面對人類而言,較難判讀,因此通常要轉為全景圖,才 較有實用性。然而此種轉換過去仰賴 CPU 進行,而 CPU 往往一次只能處理一 個像素,家用電腦即使多執行緒,一次也僅能處理十個像素以內,因此此種轉換 非常耗時,無法達成即時處理 (Real-time) 的使用者需求。 又由於目前監控系統中,車牌部分是政府單位最常使用的項目之一,而每天 用路的車流量高達數百萬計,如何以快速準確的方式辨識出行走於道路上的車輛, 是一個需要解決的問題。車牌辨識系統可以分為幾個獨立的項目,分別為車牌的 偵測、車牌的歪斜拉正,車牌的字元定位,以及車牌的文字辨識。如果能夠運用 平行處理的技術,加速車牌辨識的速度,對於政府機關的車輛監理設施可提升字 元辨識的效率。. 1.

(15) 1.3 論文架構 本論文之架構如下:第一章說明有關本論文之創作動機,以及國內外之研究 發展;第二章介紹有關目前現有的全向圖轉換成全景圖的方法以及車牌辨識系統 相關研究;第三章介紹各種核心演算法,其中包括全向圖轉換成全景圖之核心演 算法、影像前景分割演算法、影像輪廓抓取之核心演算法、剛性物體偵測之核心 演算法、字元辨識核心演算法;第四章介紹所提出圖行處理器用於加速影像處理 演算法之系統架構;第五章提出模擬分析與實驗;第六章為本論文的結論,以及 未來展望。. 2.

(16) 第二章. 文獻探討. 本章節以探討影像處理與平行處理加速技術兩方面的相關文獻,首先探討影 像處理加速技術,然後介紹影像處理相關演算法,並分析其優缺點。. 2.1 影像處理加速技術 在過去發表的影像處理加速技術中,本章節主要介紹兩種異質運算技術,其 一為 FPGA,第二為圖形處理器。. 2.1.1 FPGA 加速技術 關 於 影 像 處 理 加 速 技 術 , 過 去 Steffen. [1] 等 人 提 出 使 用 FPGA (Field. Programmable Gate Array) 來加速對影像作降噪(denoising)、復原(restoration)、分 割(segmentation)、形態學處理(morphological shape recovery),以及比對(matching) 等操作。使用 FPGA 具有可程式化、縮短開發時程、低功耗、低成本等優點。透 過設計平行演算法的電路並實現於 FPGA 可以快速驗證平行演算法的效率與正確 性。. 2.1.2 異質硬體加速方法 相較於 FPGA 為了做影像加速,將所有影像資料全部放在 FPGA 系統之中 處理, Cuong 等人[2] 提出異質硬體加速方法。在此種架構中,分為 Host 和 Device。Host 為主控整體程式流程的機器,而 Device 僅負責做影像處理。Host 的硬體架構和 Device 不同,其切成多個相等的小型處理單元,其各個運算能力 不高,但成本低,且能以平行化、管線化 (pipeline) 的方式運行。在其所設計的 硬體之實驗結果中,針對 Canny 邊緣偵測部分,單就影像處理單元縮短了 2.1 倍 的處理時間,而整體程式速度提升 2.4 倍。且所需耗費能源節省 55 倍。此方法乃 3.

(17) 提出異質硬體配合的加速架構,但其所提出的 Device 尚未一般化,未如 CUDA 架構明確以有既定架構的 GPU 進行平行化處理。. 2.1.3 CUDA 加速技術 圖形處理器[3]的英文全名為 Graphic Processing Unit,縮寫為 GPU,是 NVIDIA 在 1999 年提出概念並開發出來的產品,GPU 是專門處理圖形而製造出的晶片具 有大規模平行化處理並且支援 pipeline 和多核心處理的特色。. NVIDIA 在 2006 年推出了 CUDA(Compute Unified Device Architecture,統 一計算設備架構)程式模型,為一種支援圖形處理器的通用平行計算架構,包含 了 CUDA 指令集架構以及 GPU 内部的平行計算引擎,支援 C/C++程式語言,可 以將複雜的科學與工程計算從傳統的 CPU 移植到 GPU 執行,由於 GPU 具有數 以百計到千計的核心數目,可以實現高度平行化的架構,發表至今已經成功用在 天文物理、流體力學、基因科學、醫學影像等等領域,性能提升從數十倍至數百 倍。CUDA 可以支援資料平行(data parallelism)與工作平行運算(task parallelism)。 CUDA 與其他平行處理系統相較,其優勢在於能夠直接以高階語言直接編寫 程式,並且直接編譯於個人電腦或伺服器中運行,幾乎支援所有 NVIDIA GPU, 普遍存在於家用電腦中,不須為了實行演算法特別購置特殊規格硬體。因此本論 文我們選擇以 CUDA 來進行平行處理的實現與研究。. 2.2 欲解決效能瓶頸之目標演算法 目前市面上有許多常見的影像處理演算法,其中幾種演算法存在著效能瓶頸 問題,需要使用平行處理等方法才能解決,以下我們介紹存在效能瓶頸的影像 處理演算法,並分析其平行化的可行性。. 4.

(18) 2.2.1 全向圖轉全景圖 Omni-directional camera[4]為一個 360 度的攝影機,其利用一個 image sensor 及一組鏡頭便可拍攝到全景,可免除傳統相機拍攝環場影像需要環繞畫面一圈拍 攝後拼接的困擾。1996 年 AT&T Bell Laboratories 的 Nalwa [5]設計出四個攝影鏡 頭之全景攝影系統,藉由四個攝影鏡頭所拍攝之影像,將影像進行拼接處理,形 成環場全景影像。1997 年 Columbia University 的 Nayar[6]首次使用單一視點單一 攝影鏡頭[7]進行影像拍攝,相較於 Nalwa[4]的設計, Nayar[5]運用拋物面進行反射, 將影像投影至一個 image sensor 上,又因為一次能夠拍攝 360 度的照片,因此也可 替代 PTZ(Pan-tilt zoom)相機 [8] 的工作。2014 年 Ho 等人 [9] 設計出橢圓拋物 曲面,並提出將全向圖轉換成全景圖的演算法,因為橢圓的面積會比圓形還要大, 所以橢圓拋物面的設計優於傳統的拋物面鏡,並且將垂直視角提高、解析度提高、 image sensor 利用度提高,Yagi[10]等人設計出腸內攝影系統 ,Huang [11] 等人 將全景攝影系統應用於玩具,軍事系統,Mariottini [12]等人研發出全景攝影開發 平台應用於反射鏡片的製作。 CPU 和 GPU 的不同點在於,CPU 為一般功能的運算,可以應付各種運算 需求,但執行緒較少,因此針對重複性的轉換,仍只能一個一個去完成。相反地, GPU 雖不能如 CPU 進行一般功能的運算,但其由多個相同的運算單位所組成, 所以對於重複且獨立的工作,可以一次由上百個執行緒同時進行,所以理論上能 夠對此類運算提升運算效能,所以本論文提出針對橢圓拋物曲的全向圖影像進行 平行計算加速。. 2.2.2 車牌辨識系統 車牌辨識系統的設計流程,首先要先將影像作前處理,篩選出要辨識的車牌 區域。前處理的過程,包含灰階轉換、直方圖等化、二值化等等,目的除了抓取 出車牌的輪廓之外,並且能夠增強影像,增加抓取車牌的正確率。影像處理並抓 取車牌之後,再針對各個車牌作影像處理,抓取輪廓,找到車牌上的各個文字,. 5.

(19) 再利用機器學習或樣板匹配之結果,辨識出車牌上的各個文字,如此即為一個完 整的車牌辨識系統,本論文建置整套車牌辨識系統,並探討車牌辨識系統中各個 演算法平行化的可行性,提出針對字元辨識系統進行平行計算加速。. 2.3 車牌辨識系統所需演算法 2.3.1 灰階轉換 為了要讓輸入影像能夠做形態學處理,必須先做二值化。做二值化之前,必 須先將輸入的彩色影像作灰階轉換,將影像轉換為灰階影像。灰階影像的轉換法, 目前較為著名的有三種方法 [13] ,分別為平均法、Lightness 法,以及 Luminosity 法。三種方法的轉換結果如圖 2-1 所示。. (a). (b). (c). (d). 圖 2-1 灰階轉換的三個方法 (a) 原圖; (b) 平均法; (c) Lightness 法; (d) Luminosity 法。[14]. 在平均法中,其假設三個原色的重要程度皆為相同,作法較為簡單,僅是將 單一像素的 R (紅色)、G (綠色)、B (藍色) 三個頻道的值取平均,即取得該像素 的灰階值;在 Lightness 法中,則是將單一像素的三個頻道中,數值最大者,加 上數值最小者,兩者取平均;在 Luminosity 法中,其認為人眼對三原色的敏感程 度不同,因此三原色轉灰階時使用的權重並不相同,此方法給予紅色的權重為 21%,綠色的權重為 72%,藍色的權重為 7%,而單一像素的三原色乘上各自的 權重,即為該像素的灰階值。此三種方法各有長處及缺點,而為了接近人眼判讀 照片的情況,通常我們會選取. Luminosity 法來做車牌辨識系統中影像灰階的轉. 換。 6.

(20) 2.3.2 直方圖等化 直方圖等化 [15] 為車牌辨識中常用的一個前處理方法,目的在於提升影像 之對比度。尤其車牌影像中,車牌為白色底的區域,如果某些車牌因為光照因素, 導致車牌底色並非完全白色,如此用直方圖等化能夠使其車牌區域更明顯,並且 讓影像更為清晰,容易辨識。圖 2-2 為一個影像直方圖等化後的應用結果。從結 果中我們可以發現,經過直方圖等化的影像,其原本屬於暗部的部分變得較為清 晰,因此能夠允許系統判讀原本因為照明因素而較為不清晰的影像區域。. (a). (b). 圖 2-2 直方圖等化 [16] (a) 原圖; (b) 直方圖等化結果. 如果我們將車牌影像中每個像素的灰階值當作是一個隨機變數,則直方圖就 可以視為一個離散的機率密度函數 (probability density function),使用直方圖統 計法的優點是,直方圖統計可以讓我們了解整張車牌影像的飽和度 (saturation level) 以及對比度 (contrast level),當光線過低時,其飽和度低,從灰階直方圖 可以看出其波峰 (peak) 群會集中落在較低的灰階區域,所謂好的影像品質其定 義會隨著應用的方向不同而有所差異,這邊我們定義所謂好的影像品質就是車 牌影像中每個像素的灰階值平均分布在 0 至 255 的範圍內,故我們會使用直 方圖等化 (histogram equalization) 進行車牌影像的灰階值分布校正。直方圖等化 的具體作法為計算每個灰階值其像素個數出現的機率,將每個灰階值出現的機 率累加乘上 255 後,平均分布在 0 至 255 的灰階範圍內,如此便能在波峰密 集的地方散開,在波谷稀疏的地方能夠聚集,也就能夠使用分布圖中的值將更多 資訊呈現,期望能夠把較不明顯的局部詳細資料突顯出其特性。而在累加平均的 7.

(21) 過程中,車牌影像中的每一個像素點的灰階順序依舊不變,亦即某灰階像素的數 目不會改變,因此經過直方圖等化後,更能強化整張影像的對比度。之所以要把 影像對比度強化目的是為了提高車牌與車身的對比。 首先考慮連續函數並且讓變數 r 代表為待增強車牌影像的灰階值,假設 r 被 歸化到區間[0, 1],且𝑟 = 0表示黑色及𝑟 = 1表示白色。然後再考慮一個離散公式 並允許灰階值在區間[0, L-1]內,L 為圖像中可能的灰階值總數。對於連續函 數而言,假設其變換函數為 𝑠 = 𝑇 (𝑟 ), 0 ≤ 𝑟 ≤ 1. (2-1). 在車牌原始影像中,對於每一個像素值 r 產生的一個灰階值 𝑠 。其中,變 換函數要滿足以下條件: (1)𝑇(𝑟) 在區間 0 ≤ 𝑟 ≤ 1 中是唯一值且具有單調遞增的特性。這是為 了保證其反函數的存在,並且輸出圖像從黑到白順序增加; (2)當0 ≤ 𝑟 ≤ 1時, 0 ≤ 𝑇(𝑟) ≤ 1。這確保輸出灰階值與輸入有同樣的範 圍。公式 (2-1) 的反函數表示為: 𝑟 = 𝑇 −1 (𝑠), 0 ≤ 𝑠 ≤ 1. (2-2). 一幅車牌影像的灰階值可被視為區間 [0,1] 的隨機變數。隨機變數的一個最 重要的基本描述是其機率密度函數。令 𝑃𝑟 (𝑟) 和 𝑃𝑠 (𝑠) 分別代表隨機變數 r 和 𝑠 的機率密度函數。此處帶有下標的 𝑃𝑟 (𝑟) 和 𝑃𝑠 (𝑠) 用於表示不同的函數。由 基本機率理論得到一個基本結果:如果 𝑃𝑟 (𝑟) 和 𝑇(𝑟) 已知,且 𝑇 −1 (𝑠) 滿足條 件(1),那麼變換變數 𝑠 的機率密度函數 𝑃𝑠 (𝑠) 可由以下公式得到: 𝑃𝑠 (𝑠) = 𝑃𝑟 (𝑟) |. 𝑑𝑟 | 𝑑𝑠. (2-3). 因此,變換變數s的機率密度函數由輸入圖像的灰階值機率密度函數和所選 擇的變換函數所決定。 在影像處理中一個尤為重要的變換函數: 𝑟. 𝑠 = T(r) = ∫ 𝑃𝑟 (𝑤)𝑑𝑤. (2-4). 0. 該被積函數其值為正,並且函數積分是一個函數曲線下的面積,其內含為隨 8.

(22) 機變數 𝑟 的累積分佈函數,所以它遵守該變換函數是單調遞增的條件,因此滿 足條件(1)。同樣地,區間 [0,1] 也滿足條件(2)。其積分過程如下: r  ds dT (r ) d      Pr ( w)dw  Pr (r ) dr dr dr  0 . 用這個結果代替. 𝑑𝑟 𝑑𝑠. (2-5). ,代入(2-3),取機率為正,得到:. Ps ( s )  Pr (r ). dr 1  Pr (r )  1, 0  s  1 ds Pr (r ). (2-6). 因為𝑃𝑠 (𝑠)是機率密度函數,在這裡可以得出區間 [0,1] 以外的值為0,可見 (26) 中給出的 𝑃𝑠 (𝑠) 形式為均勻機率密度函數。換句話說,(2-6) 給出的變換函數 會得到一個隨機變數,其特徵為一個均勻機率密度函數,與 𝑃𝑟 (𝑟) 的函數形式是 𝑟. 無關的。總述以上,可以看出 𝑠 = 𝑇(𝑟) = ∫0 𝑃𝑟 (𝑤)𝑑𝑤 是一個直方圖等化的基本 原理,該等式右邊的意義就是隨機變數 r 的累積分佈函數。這樣的變換是為了求 輸入圖像灰階值 r 的累積分佈函數。 下面開始討論離散函數。對於離散值,處理的是函數機率的和,而不是機率 密度函數的積分。一幅圖像中灰階值 𝑟𝑘 出現的機率近似為: 𝑝𝑘 (𝑟𝑘 ) =. 𝑛𝑘 𝑛. , k=0,1,…,L-1. (2-7). 其中,n 是車牌影像中像素值的總和, 𝑛𝑘 是灰階值為 𝑟𝑘 的像素點個數, L 為圖像中可能的灰階值總數。(2-6)中變換函數的離散形式為: k. k. nj. j 0. j 0. n. s k  T (rk )   p r (r j )  . k  0,1,....L  1. (2-8). 因此,已處理的車牌影像(即輸出影像)由通過式(2-8),將輸入車牌影像中灰階 值為 𝑟𝑘 的各像素映射到輸出車牌影像中的灰階值為 𝑠𝑘 ,由此可看出對應像素 值得到與連續形式不同,一般不能證明離散變換產生均勻機率密度函數的離散值 (為均勻直方圖)。但透過 (2-8) 可以很容易地看出關於輸入車牌影像直方圖的應 用。至此,便給出了整個的證明過程。 以下列出直方圖等化的一般實現過程: 統計原始輸入的車牌影像各灰階值的像素數目𝑛𝑖 ,𝑖 = 0,1, … , 𝐿 − 1,其中 L 9.

(23) 為灰階值總和,計算原始車牌影像的直方圖,即各灰階值的機率密度,𝑃𝑖 (𝑟𝑖 ) = 𝑛𝑖 𝑛. ,n為原始圖像的總像素數目。計算累積分佈函數: 𝑘. 𝑠𝑘 (𝑟𝑘 ) ≈ ∑ 𝑃𝑖 (𝑟𝑖 ), 𝑘 − 0,1, … , 𝐿 − 1. (2-9). 𝑖=0. 計算最後的輸出灰階值,. g k  INT g max  g min s k (rk )  g min  0.5/( L  1) k  0,1,....L  1. (2-10). 其中,INT[]是取整數算符。令g 𝑚𝑖𝑛 = 0,g 𝑚𝑎𝑥 = 𝐿 − 1,則計算式簡化為. g k  INT L  1s k (rk )  0.5/( L  1). (2-11). 獲得輸出車牌影像,與其直方圖為近似均勻分佈。. 2.3.3 二值化 為了做影像形狀的形態學 (Morphological) 處理,影像必須先轉成非黑即白 的二值化影像 (Binary image)。二值化方法有許多種,一種為影像量化法 (Image quantization) ,即用更少的亮度階層去表示原本的影像,亦即將能夠表現的色彩 數減少。通常此種方法是設定門檻值,設在一定門檻值之內的亮度,為特定的亮 度,如圖 2-3 所示。. 圖 2-3 以門檻值減少影像色彩數之方法. 對二值化影像而言,我們只要針對原影像設定單一門檻值即可,超過該門檻 值的為白色,小於該門檻值的為黑色。然而不同影像,所適合的門檻值不同。 對於同一影像選取不同門檻值的二值化結果如圖 2-4 所示。. 10.

(24) (a). (b). 圖 2-4 對於同一影像設不同門檻值二值化的結果[17]:(a) 原圖; (b) 使用不同門檻值二 值化的結果。. 正因為不同的影像,二值化適合的門檻值不同,通常會分析輸入影像的特性, 使用自動門檻值挑選的方式,找出不同的影像其適合的門檻值。找門檻值的方法, 較為有名的是大津演算法 [18] (Otsu’s method) ,其假設任一自然影像 (Natural image) 中,影像直方圖有兩個波峰 (Peak) ,其中一個波峰為影像背景,另一波 峰為影像前景,因此,若能找出直方圖最接近波谷的值,並以其為門檻值,便能 將影像轉換成二值影像。圖 2-5 為影像經過大津演算法二值化之結果。. (a). (b). 圖 2-5 影像經過大津演算法二值化之結果 (a) 原圖與二值化結果; (b) 二值化時 使用的影像直方圖與找出的門檻值。. Otsu 法是一種自動門檻值的選擇方法,該自動門檻值目的是要分割車牌像素 的前景與背景,灰度超過門檻值的為前景,反之為背景,其圖例如 2-6。. (a). (b). (c). 圖 2-6 以 Otsu 法進行影像二值化:(a) 原圖; (b) 經二值化的結果; (c) 依照直 方圖分析得到紅色門檻值。 11.

(25) 我們在使用 Otsu 之前必須先取得門檻值分割的狀態空間分布也就是像素的 直方圖,Otsu 的篩選門檻值是依循群內最小變異,群間最大變異來進行篩選也就 是不同類之間具有最大變異量,同類之間具有最小變異量,h(i)為各灰階值的機率。 ∗. 𝑢1 (𝑇 ∗ ) =. ∑𝑇 𝑖=0 ℎ(𝑖)∗𝑖 ∗. ∑𝑇 𝑖=0 ℎ(𝑖). (2-12). 以 𝑇 ∗ 為門檻值,此式在計算第一類的平均值 𝑢2 ( 𝑇 ∗ ) =. ∑𝑁 𝑖=𝑇 ∗ +1 ℎ(𝑖 ) ∗ 𝑖 ∑𝑁 𝑖=𝑇 ∗ +1 ℎ(𝑖). (2-13). 以𝑇 ∗ 為門檻值,此式在計算第二類的平均值 𝑇∗. 𝜎1 (𝑇 ∗ ) = ∑(𝑢1 − 𝑖)2 ∗ ℎ(𝑖). (2-14). 𝑖=0. 以𝑇 ∗ 為門檻值此式在計算第一類的變異量 𝑁. 𝜎1 (𝑇 ∗ ) = ∑ (𝑢2 − 𝑖)2 ∗ ℎ(𝑖). (2-15). 𝑖=𝑇 ∗ +1. 以𝑇 ∗ 為門檻值此式在計算第二類的變異量 𝜎(𝑇 ∗ ) = 𝜎1 (𝑇 ∗ ) + 𝜎2 (𝑇 ∗ ). (2-16). 以𝑇 ∗ 為門檻值此計算群內變異的總和 𝑇=𝑎𝑟𝑔𝑒𝑇∗𝑚𝑖𝑛 (𝜎(𝑇 ∗ )). (2-17). 此式找到一個以𝑇 ∗ 群內變異最小的門檻值,最後我們將𝑇 ∗ 視為門檻值𝑇 在大津的方法中主要為執行二值化,該門檻值以上的強度被認為是前景,否 則為背景的門檻值。大津的主要實現是詳盡搜索最小化定義為兩類方差加權和的 門檻值: 得到 T 後,上述顯著值的像素被認為是前景,否則為背景。以下為使用 Otsu. 12.

(26) 法後,製造出前景背景遮罩的範例。. (a). (b) 圖 2-7 影像前景分割 [19] (a) 欲分割的兩張影像前景原圖; (b) 分割後的影像前景遮罩。. 2.3.4 去雜訊膨脹侵蝕 我們利用形態學的原理來凸顯影像的特徵形狀,邊界以及相連的區域,本章 節利用形態學最基本的侵蝕與膨脹來將車牌與文字分離,使用形態學處理影像, 其輸入的是具有車牌的影像,而輸出是將車牌影像擷取其特徵與屬性,在形態學 的計算過程中,我們通常會設定一個結構元素,而結構元素通常是一個影像的小 集合,大小 3*3,5*5,7*7 個像素,且原點在整個結構元素的中心點。. 膨脹為擴大物體的邊界,而擴大的寬度是由結構元素大小決定的,如果物體間 有小於結構元素的細小間隙,膨脹能讓原本分開的物體連接起來,對於集合 I 和 H,假設使用 H 對 I 進行膨脹,記作:I⨁H,操作上我們把 H 當作結構元素,H 在整個影像平面上移動,當 H 的原點平移到物體上某位置時我們紀錄當下 H 包 含的所有像素點的座標,所有的像素點座標的集合即為膨脹後的物體,H 的原點. 13.

(27) 座標是使用者自行設計,通常都在結構元素 H 的中央。假設 H 長、寬皆為 d,對 物體(I)進行膨脹,膨脹後物體(I)四周皆擴大 d/2 的寬度。. 圖 2-8. 使用方形結構元素對物體作膨脹之示意圖。. 侵蝕為消融物體的邊界,如果物體大於結構元素,侵蝕的結果是讓物體瘦一 圈,而這一圈的寬度是由結構元素大小決定的,如果物體小於結構元素,則侵蝕 後物體會消失,如果物體之間有小於結構元素的細小連通,侵蝕後會分裂成兩個 物體,假設對於集合 I 和 H,假設使用 H 對 I 進行侵蝕,記作:I ⊖ H。操作上我 們把 H 當作結構元素,H 在整個影像平面上移動,當 H 的原點平移到物體上某 位置時,如果此時 H 能完全包覆於物體 I 中,就紀錄物體此點的座標,所有這樣 的像素的座標集合即為侵蝕後的物體,H 的原點位置是使用者自行設計,其原點 位置通常都在結構元素的中央。假設 H 長、寬皆為 d,對物體(I)進行侵蝕,侵蝕 後物體(I)四周皆縮水 d/2 的寬度。. 圖 2-9 使用方形結構元素對物體作侵蝕之示意圖。 14.

(28) 2.3.5 輪廓找尋法 影像輪廓找尋法 [20] 主要是針對二值化後的影像,以形態學的方法膨脹與 侵蝕,找出各個封閉區間的影像輪廓。通常此類方法會先找尋影像邊緣,接著追 蹤其影像邊緣直到找到封閉區間為止。輪廓找尋的範例如圖 2-10 所示。. (a) 圖 2-10 果。. (b). 影像輪廓找尋 [21] (a) 二值化的原圖; (b) 以不同顏色框選出不同輪廓之結. 找到的影像輪廓會以鏈碼 (Chain-code) 表示,鏈碼為多個向量組成,而其形 成一個輪廓的封閉區間。使用這些鏈碼可以分析一個輪廓的面積、形狀,以及近 似成矩形時的長寬等等,這些資訊用來做輪廓的篩選,判斷是否為某個物體。. 2.3.6 單應性(homography) 單應性是幾何學的一個概念,表示任意兩個幾何圖像的可逆變換,單應性具 有許多實際應用,例如影像校正,或兩張旋轉影像與平移之間的計算。本文利用 單應性的仿射變換,校正歪斜的車牌。. 2.3.7 機器學習演算法 字元識別方法上,其中一個較為著名的方法為機器學習演算法。機器學習演 算法中,包含監督式學習與非監督式學習演算法。其中,監督式學習,乃是將複 15.

(29) 數張照片擷取其特徵輸入給機器學習模型,並將每一筆輸入的影像標記對應的標 籤。例如一張字母 A 的影像,先擷取其特徵,再輸入給機器學習演算法,接著在 輸出端給予標籤 A。機器學習演算法會調整其模型,使的未來輸入字母 A 的影像 時,未來會給出標籤 A。常見的監督式機器學習演算法包含 SVM、AdaBoost、類 神經網路等等。例如 Viola 等人提出以 AdaBoost 為基礎的人臉偵測方法,能夠 在任意影像中框選出人臉區域 [22];Gao 與 Yang 等人提出在自然場景中找出 文字區域的方法 [23];Shapiro 等人則提出了車牌偵測方法 [24]。 使用機器學習演算法的好處在於其偵測能力具有彈性,系統針對未見過的類 似影像,能夠正確的辨別其類別。然而其缺點在於各種類別的影像均需要花時間 蒐集樣本訓練,針對固定樣式的待辨識物體而言,例如車牌文字等等,則因為車 牌文字的樣式是固定的,使用機器學習方式的成本顯然過高。此外,若臨時增加 類別,則需要額外再訓練系統,否則系統會將未見過的類別視為過去訓練過的其 他類別。. 2.3.8 字元辨識 OCR 是光學文字辨識,是從英文 Optical Character Recognition 翻譯而來, 而 OCR 分別取自這三個英文字的第一個英文字母,OCR 的主要目的是將圖像中 的文字轉化成電腦能夠識別的電子訊號。因此,文字辨識軟體,意即 OCR 軟體, 能夠區分圖像中的文字,並且加以辨識後產出可以編輯文字檔格式的應用軟體。 常見的商用 OCR 辨識軟體,需要使用的條件頗為嚴苛,例如需要白底黑字、 字體需端正、以印刷品文字辨識為主,格式結構需一致而不太跳脫,因此使用上 有限制,因此雖然能夠辨識文字,但需要滿足一定條件才能完美運行。 樣板比對法乃利用字體樣本與待測物進行比對,若交互關聯程度分數較高者, 則代表此樣板的文字為正確字元。Hegt 等人 [25] 結合樣版比對法與 Hotelling 轉換 [26],提出一套車牌字元辨識法。由於一開始無從得知需匹配樣板位於影 像中的何處,該作者使用 Hotelling 轉換的機制將字元特徵突顯出來,首先算出 16.

(30) 待測字元樣本上圖像內各個黑點空間分佈的共變異矩陣,接著計算該矩陣的特 徵值與相對應之特徵向量,觀察待測樣本與標準樣本間的差異,差異越小表示兩 者越相像。 樣板比對法適用於辨識單獨字體,字體沒有傾斜和固定大小的字體等條件, 此種方法在二值化的圖片以及灰階照片均有不錯的結果。Comelli 等人 [27] 利 用計算車牌上每個字元與樣板間作常規相關係數的計算, Huang 等人 [28] 則 提出利用兩者間的錯誤平均方根作為判斷依據。. 17.

(31) 第三章. 影像處理演算法系統架構. 本章節分別探討全向圖轉全景圖之核心演算法,與車牌辨識系統,包含全向 圖轉全景圖之核心演算法、車牌定位、灰階轉換、直方圖等化、二值化、車牌校 正等等之必要系統與架構演算法元件,本章節將敘述各該算法以及繪製執行結果。. 3.1 全向圖轉全景圖之核心演算法. 圖 3-1 全向圖轉全景圖之概念. 本小節我們針對全向圖的數學模型建模,全向圖的方程式如下: z. x2 y2  a 2 b2. (3-1). 方程式(3-1)為全向圖的方程式是一個橢圓影像,其中 a 為橢圓影像之長軸, b 為橢圓影像之短軸,z 為三圍坐標系中高度變化量,x 為三維迪卡爾坐標系中水 平變化量,y 為三維變化量中縱向變化量,接著我們將利用(3-1)推導並解出此方 程式的參數解,利用參數解定義出座標後,我們才能夠將全向圖上的座標對應到 全景圖。參數解如下: x  au cost. (3-2). y  bu sin t. (3-3). z  u2. (3-4). 其中,常數 a 為全向圖的長軸,常數 b 為全向圖的短軸,u 為隨機常數。為 了猜測在三維空間中形成全向圖的橢圓拋物曲面厚度 z,所以必須先進行高度的 猜想,此高度的猜想起初是因為考量 x y z 三變量都是點座標且必為常數,所以先 行定義高度 z,再決定 x 和 y,我們以此當作全向圖的數學模型進行系統建構。 18.

(32) 接著我們將全向圖的影像經過一個數學轉換式的轉換轉成矩形的全景圖影像, 以下的轉換式利用畢達哥拉斯定理以及將橢圓旋轉收斂成半徑之概念,將橢圓沿 著線段 r 如同扇子般的收斂:. r  ( x  x0 ) 2  ( y  y 0 ) 2 tan  .   tan 1. y  y0 x  x0 y  y0 x  x0. (3-5) (3-6) (3-7). 公式(3-5)利用畢氏定理計算全向圖影像的邊界與全向圖的中心點距離,r 為 全向圖上一點相對於全向圖中心的距離變化量,x 為全向圖的橫向變化量,y 為 全向圖的縱向變化量,x0 為全向圖的中心點以及橫向變化量初始點, y0 為全向圖 的中心點以及縱向變化量初始點, 是全向圖影像如扇子般收斂之旋轉角度,為 了要求得旋轉角度我們利用公式(3-6)求取 tan  之反函數得到公式(3-7),藉由三式 我們就可以將一個全向圖的影像轉換形成兩個變量 r 與  之矩形全景影像,全向 圖轉為矩形全景圖的概念如圖 3-2 所示。. 圖 3-2 橢圓面轉為矩形面的概念,橢圓的座標為(x,y),經演算法轉換成長方形的座標 (r,  ). 19.

(33) 3.2 車牌辨識系統 我們針對車牌辨識系統進行平行化研究,一個車牌辨識系統主要包含車牌定 位、車牌校正、文字切割與文字辨識等四大步驟。首先在車牌定位部分,我們透 過灰階轉換、直方圖等化、二值化、輪廓萃取與剛性物體偵測之核心演算法取得 車牌的位置,然後在車牌校正方面,我們使用仿射轉換中的單映性用以校正歪斜 的車牌。在文字分割方面,我們利用輪廓萃取及邊緣偵測將文字與車牌面積進行 計算,並將車牌中的文字分割取出。最後在文字辨識部份,我們利用樣板比對法 (template matching)作為文字辨識的方法,以下為車牌辨識系統的流程圖。. 圖 3-3 車牌定位與辨識流程圖. 3.2.1 車牌辨識的方法與流程 我們的車牌辨識方法與流程主要可以分為多個段落,分別是前處理取得二值 化影像,再藉由二值化影像取得影像之輪廓。取得影像輪廓後,利用篩選機制選 出符合車牌之條件者。為了排除符合輪廓特性但實際上非車牌的區域,我們使用. 20.

(34) SVM 分類器將不屬於車牌的影像排除。又影像中的車牌經常有歪斜的狀況發生, 因此需再藉由轉正的機制將車牌拉正,以利後續車牌文字辨識。接著再針對拉正 的車牌,再取得一次影像輪廓,亦針對不同的輪廓篩選一次符合文字的區域,再 將各個擷取到的文字影像,交由樣板匹配,去識別屬於何種文字。. 3.2.2 取輪廓 為了尋找車牌的輪廓邊緣,首先要尋找車牌影像的鄰居,車牌影像的鄰居可 以是 4 鄰接或者 8 鄰接。令輸入一個車牌影像為 𝐹 = {𝑓𝑖𝑗 },一開始將 NBD 設為 1。NBD 代表新發現邊界的連續數字。逐行掃描此張影像,並且對每一個 𝑓𝑖𝑗 ≠ 0 的像素做掃描。每次我們掃描新的一行時,將 LNBD 重設為 1,LNBD 表示在搜 尋的過程中最接近邊緣的連續數字。 (1). 接著依照情況選擇以下一種方式進行. (a) 如果 𝑓𝑖𝑗 = 1 且 𝑓𝑖,𝑗−1 = 0,則認為該點為外邊界的起點,將 NBD 增加,並設定(𝑖2 , 𝑗2 ) = (𝑖, 𝑗 − 1) (b) 如果 𝑓𝑖𝑗 ≥ 1 而且𝑓𝑖,𝑗+1 = 0,則認為該點為內邊界的起點,將 NBD 增加,並設定(𝑖2 , 𝑗2 ) = (𝑖, 𝑗 + 1),而且𝑓𝑖𝑗 > 1 時,LNBD = 𝑓𝑖𝑗 (c) 以上皆非時,進入(4) (2). 依據新找到的輪廓的類別,決定該點的樹節點。. (3). 從(1) 找到的起點中,開始描繪輪廓邊緣。 (3.1) 從 (𝑖2 , 𝑗2 ),尋找順時針的像素(𝑖, 𝑗),並且找到一個非零像 素。令(𝑖1 , 𝑗1 )成為第一個找到的非零像素,如果都沒有找到非零 像素,將 NBD 設為 𝑓𝑖𝑗 並且執行 (4) (3.2) 設定(𝑖2 , 𝑗2 ) = (𝑖1 , 𝑗1 ) 設定 (𝑖3 , 𝑗3 ) = (𝑖, 𝑗) (3.3) 從下一個(𝑖2 , 𝑗2 ) 元素開始逆時針尋找一個像素 (𝑖3 , 𝑗3 ),並 從鄰居開始逆時針尋找一個非零元素(𝑖4 , 𝑗4 ) (3.4) 使用以下方法改變(𝑖3 , 𝑗3 ) 的值𝑓𝑖3,𝑗3 21.

(35) (a) 如果 (𝑖3 , 𝑗3 + 1)是一個在 3.3 找到值為零的像素,則 𝑓𝑖3,𝑗3 = 𝑁𝐵𝐷 (b) 如果 (𝑖3 , 𝑗3 + 1)不是在 3.3 找到值為零的像素,而且 𝑓𝑖3,𝑗3 = 1,則𝑓𝑖3,𝑗3 = 𝑁𝐵𝐷。 (3.5) 如果 (𝑖4 , 𝑗4 ) = (𝑖, 𝑗)且(𝑖3 , 𝑗3 ) = (𝑖1 , 𝑗1 ),那麼進入步驟 4, 否則設定(𝑖2 , 𝑗2 ) = (𝑖3 , 𝑗3 ), (𝑖3 , 𝑗3 ) = (𝑖4 , 𝑗4 ),並且回到 (3.3). (4). 如果 𝑓𝑖𝑗 ≠ 1,那麼LNBD=|𝑓𝑖𝑗 |,並且繼續逐行掃描(𝑖, 𝑗 + 1)像素。 本演算法於掃描到右下角最後一個像素時結束。. 經過本算法,基於二值化輸入影像的所有輪廓,便能被截取出來,並且不同 的輪廓會被標記上不同的編號,能正確識別出兩兩不相連的輪廓。其結果如圖 3-4 所示,不同的輪廓由不同的顏色標記。. (a). (b). 圖 3-4 影像輪廓抓取:(a) 經過二值化的影像;(b) 抓取輪廓後的影像,不同顏色的區域 代表不同輪廓。. 3.2.3 挑選符合條件的輪廓 經由 3.2.2 的方法,我們能針對一張經過二值化的影像,變成一連串的輪廓 鏈碼 (Chain-code) 。由於這些輪廓都由鏈碼組成,而我們可以由這些鏈碼換算. 22.

(36) 出輪廓之區域、輪廓之形狀、輪廓之角點數。而車牌之輪廓,通常占畫面上一 定之面積,以及一定的輪廓角點點數,因此,我們可以藉由這些線索,去篩選 出特定符合車牌條件的輪廓。一個篩選機制的實例如圖 3-5 ,我們篩選出角點 數為 4 ,並且面積介於總畫面面積 10% ~ 15% 的輪廓。. (a). (b). 圖 3-5 選取符合條件的車牌影像輪廓:(a) 由程式找到的車牌影像輪廓; (b) 經由篩 選機制後剩下符合車牌樣貌的影像輪廓。. 3.3 車牌校正 車牌轉正我們主要使用 Homography Linear Transformation 的方法,將畫面上 歪斜的車牌 (通常在照片上為梯形) ,拉正成為長方形的車牌。主要是將歪斜車 牌的梯形四個角點,對應到目標正長方形的四個角點,並算出一個 H 矩陣,來 表示兩者之間的線性關係。該矩陣的用法如下: 𝐱 ′ = 𝐇𝐱. (3-8). 假設我們影像中的的點均為 2-D,則對應關係如下: ℎ11 ℎ12 ℎ13 𝑥 𝑥′ 𝑤 [𝑦′ ] = [ℎ21 ℎ22 ℎ23 ] [𝑦] ℎ31 ℎ32 ℎ33 1 1. (3-9). 其中 𝑥 ′ , 𝑦 ′ 為對應到正長方形的點,𝑤為倍數,𝑥, 𝑦 為梯形影像上的點。為了 要求得完整的 H 矩陣,除了 h33 固定是 1 以外,一共有 8 個未知數要解。為. 23.

(37) 了要解該 8 個未知數,則需要至少 4 個點來解該線性方程式,而每個點分別有 兩個變數 x 和 y 。. 若我們能將歪斜車牌的梯形內所有像素,分別乘上該 H 矩陣,則能將歪斜車 牌的每一個像素,重新對應到正長方形車牌的每個像素,藉以達到車牌拉正的效 果。其概念圖如圖 3-6。. 圖 3-6 歪斜梯形車牌拉正之示意圖,首先計算出歪斜車牌與正車牌的線性關係,取得一 矩陣 H。接著將歪斜車牌的點乘上 H 矩陣,取得正的矩型車牌。. 首先令 h33 = 1,我們使用四個點 (原梯形) 對四個點(正長方形) 來解出 h, 使用高斯消去法便能得出前述得到的 h11 , h12 , ... , h32,亦即將所需的 h 矩陣求 出。為了要解出 h 矩陣,我們將歪斜梯形的四個點 (𝑥i , 𝑦𝑖 ) 對上正長方形的四個 點(𝑥i ′, 𝑦𝑖 ′),如下式所示:. [. 0 𝑥𝑖 𝑤𝑖 ′. 0 𝑦𝑖 𝑤𝑖 ′. 0 𝑤𝑖 𝑤𝑖 ′. −𝑥𝑖 𝑤𝑖 ′ 0. −𝑦𝑖 𝑤𝑖 ′ 0. −𝑤𝑖 𝑤𝑖 0. 因為我們有四個點,可以擴展為. 24. 𝑥𝑖 𝑦𝑖 ′ 𝑥𝑖 𝑥𝑖 ′. −𝑤 𝑦 ′ 𝑦𝑖 𝑦𝑖 ′ ]ℎ = [ 𝑖 𝑖] 𝑦𝑖 𝑥𝑖 ′ 𝑤𝑖 𝑥𝑖 ′. (3-10).

(38) 0 0 0 −𝑥1 𝑤1 ′ −𝑦1 𝑤1 ′ −𝑤1 𝑤1 𝑥1 𝑤1 ′ 𝑦1 𝑤1 ′ 𝑤1 𝑤1 ′ 0 0 0 0 0 0 −𝑥2 𝑤2 ′ −𝑦2 𝑤2 ′ −𝑤2 𝑤2 𝑥2 𝑤2 ′ 𝑦2 𝑤2 ′ 𝑤2 𝑤2 ′ 0 0 0 0 0 0 −𝑥3 𝑤3 ′ −𝑦3 𝑤3 ′ −𝑤3 𝑤3 𝑥3 𝑤3 ′ 𝑦3 𝑤3 ′ 𝑤3 𝑤3 ′ 0 0 0 0 0 0 −𝑥4 𝑤4 ′ −𝑦4 𝑤4 ′ −𝑤4 𝑤4 0 0 0 [𝑥4 𝑤4 ′ 𝑦4 𝑤4 ′ 𝑤4 𝑤4 ′. 𝑥1 𝑦1 ′ 𝑥1 𝑥1 ′ 𝑥2 𝑦2 ′ 𝑥2 𝑥2 ′ 𝑥3 𝑦3 ′ 𝑥3 𝑥3 ′ 𝑥4 𝑦4 ′ 𝑥4 𝑥4 ′. −𝑤1 𝑦1′ 𝑦1 𝑦1 ′ 𝑤1 𝑥1′ 𝑦1 𝑥1 ′ −𝑤2 𝑦2′ 𝑦2 𝑦2 ′ 𝑤2 𝑥2′ 𝑦2 𝑥2 ′ ℎ= −𝑤3 𝑦3′ 𝑦3 𝑦3 ′ 𝑦3 𝑥3 ′ 𝑤3 𝑥3′ 𝑦4 𝑦4 ′ −𝑤4 𝑦4′ 𝑦4 𝑥4 ′] [ 𝑤4 𝑥4′ ]. (3-11). 由此利用高斯消去法解開線性方程式,可以得到 (3-11) 中的 H 矩陣。未來將任一 (x,y) 座標乘上該 H 矩陣,即可得到其在所對應影 像中的相對位置。. 3.4 SVM 分類器 Support Vector Machines(SVM)是一種分類 (Classification)演算法,SVM 在解 決樣本分類、非線性及多維度識別問題有許多的優勢,SVM 應用於文字識別、三 維目標偵測與辨識、人臉偵測與辨識、圖像分類、車牌辨識分類等實際問題中, SVM 性能優於現有的學習方法,能夠將有限訓練樣本得到的決策規則,對獨立的 測試集能夠得到較小的誤差。 SVM 主要解決之問題為:找出一個超平面(hyperplane),將兩個不同的集合 分開。 我們舉一個二維的圖像來說明,在圖片中我們希望能找出一個邊界將不同集合 的黑點和白點分開,而且我們希望我們所找到的這個邊界能夠使兩個集合之距離越 遠越好,距離越遠我們才能夠明確的分辨黑點或白點所屬的區域,否則容易產生誤 差。一個藉由 SVM 找出分割兩種類別的邊界結果如下圖所示:. 25.

(39) 圖 3-7 SVM 的簡要圖示及作用,其中黑色和白色的點分屬不同類別的資料點。[29]. 接下來我們用數學的方式來說明 SVM 我們希望能從這些點找到一個線將黑白兩點分開於不同區域。 假設我們有很多點形成一個集合. {𝑥𝑖 , 𝑦𝑖 }, i = 1,..., n , 𝑥𝑖 ∈ R , 𝑦𝑖 ∈ { +1,. -1}我們就可以根據 y 的正負號來分類黑點與白點的集合,下列直線方程式 f (x) = wTx - b 能使 y = -1 的點所以落在 f (x) < 0 的區域,且讓𝑦𝑖 = +1 的點 落在 f (x) > 0 的另一區域,我們把這樣的超平面稱為 separating hyperplane,而兩 邊距離最遠的邊界就稱為 optimal separating hyperplane (OSH) 。 為了要找出 optimal separating hyperplane 我們必須找出 support hyperplane 之間最遠的距離,而將兩個 support hyperplane 相加除以二就是 optimal separating hyperplane 我們將超平面寫成如下的式子:. wT x  b  . (3-12). wT x  b  . (3-13). 這是一個有無限多組參數解的方程式為了簡化與去除不確定的參數我們在等 式兩邊乘上一個常數 =1 使得未知參數得以簡化。 我們定義 separating hyperplane 與兩個 support hyperplane 的距離為 d: 26.

(40) d= (‖𝑏 + 1| − |𝑏‖)/‖𝑤 ‖ = 1/‖𝑤 ‖. if b ∉ (−1,0). d= (‖𝑏 + 1| − |𝑏‖)/‖𝑤 ‖ = 1/‖𝑤 ‖ if b ∈ (−1,0) 所以兩個 separating hyperplane 之間的距離為 2d,依據上式 2d = 2/||w||所以 ||w|| 越小則 d 越大 我們知道 support hyperplane 與 optimal separating hyperplane 的距離在 ±1 以內所以我們可以將上式改成 wT𝑥𝑖  b  1. 𝑦𝑖  1. (3-14). 𝑤 𝑇 𝑥𝑖 − 𝑏  1. 𝑦𝑖  . (3-15). 我們可以將以上兩式合併 𝑦𝑖 𝑤 𝑇 𝑥𝑖 − 𝑏1  0 (3-16) 接下來我們可以利用拉格朗治 (Lagrange) 乘數法將上式轉成一個二次方程 式,找出可以使 d 為最小值的 w,b,𝛼𝑖 。(𝛼𝑖 就是拉格朗治乘數) 1. 𝑇 𝐿(𝑤, 𝑏, 𝛼)=2 ‖𝑤‖2-∑N i=1 𝛼𝑖 [𝑦𝑖 (𝑤 𝑥𝑖 − 𝑏) − 1]. (3-17). 格朗治乘數方法的目的主要是把限制條件變成函數一部分 所以支撐向量的點出現的位置必須符合以下兩式 𝑦𝑖 (𝑤 𝑇 𝑥𝑖 − 𝑏) − 1 = 0 時 𝛼𝑖 ≥ 0. (3-18). 𝑦𝑖 (𝑤 𝑡 − 𝑏)-1 > 0 時 𝛼𝑖 必為 0. (3-19). 接下來我們要求解 L 的最小值,所以分別對 𝑤 偏微得到 𝑤 − ∑𝑛𝑖=1 𝛼𝑖 𝑦𝑖 𝑥𝑖 = 0. ->. 𝑤 ∗ = ∑𝑛𝑖=1 𝛼𝑖 𝑦𝑖 𝑥𝑖. (3-20). 以及對及對 b 偏微得到 𝑛. ∑ 𝛼𝑖 𝑦𝑖 = 0. (3-21). 𝑖=1. 分別將對 w 以及 b 邊為所得的結果上回去上面的 Lagrange 函式得到 𝑛. 1 𝐿𝐷 = ∑ 𝛼𝑖 − ∑ 𝛼𝑖 𝛼𝑗 𝑦𝑖 𝑦𝑗 𝑥𝑖𝑇 𝑥𝑗 2 𝑖=1. 𝑖𝑗. 27. (3-22).

(41) 以上我們稱為 KKT 條件,當我們把影像特徵輸入時,有些影像滿足 KKT 條 件,我們就能判斷該影像是否屬於車牌。. 3.4.1 訓練流程與測試流程 SVM 是一種機器學習演算法,機器學習通常分為兩個階段,分別為「學習期」 與「回憶期」。主要分述如下: 1. 學習期:在學習期期間,SVM 主要的工作,是利用訓練資料 (training data) 來決定哪些資料為 Support vector。 2. 回憶期:又稱測試期,也就是正式使用 SVM 時。將一筆資料送入訓練完 畢的 SVM 模型,接著 SVM 便會輸出該筆資料屬於何種類別。 對於 SVM 的訓練,我們將一筆資料分為多個屬性表示,亦即一筆資料有多個 輸入值。而一筆資料會對應到一個其所屬的類別。例如我們將車牌切為 5x5 個區 塊,每個區塊共 3 個頻道,並取其平均,由此一個車牌共有 25 個輸入值。將一 筆車牌資料輸入時,同時告知其所屬之類別,在此我們的類別共有兩類,分別為 「是」與「不是」車牌。由此,送入多筆訓練資料並給予其相對應類別後,SVM 模型便被訓練完成,未來輸入一筆未知的車牌並轉換為 5x5x3 個輸入時,SVM 便會輸出其類別為「是」或「不是」,藉以判斷其是否為車牌影像。. 3.5 文字切割 3.5.1 方法流程 在車牌辨識系統中字元的切割是字元辨識的一個關鍵技術,無論車牌歪斜角 度的大小,在經過校正後的車牌文字存在著一個固定常數,而這個常數就是在車 牌中每一個文字間的距離都是一樣的,根據此常數特性,我們依照車牌中的寬高 比條件來判斷車牌中每一個字母所佔的區域,並且利用形態學的膨脹與侵蝕將車 牌中的每一個文字分離。. 28.

(42) 將影像轉為灰階影像 並二值化. 針對二值化影像找尋 影像輪廓. 將挑選出來的字母影 像區域,對字母庫做 樣板比對. 與相似程度最接近的 字母即推測為其所代 表的文字. 挑選出長寬近似於字 母的影像區域. 圖 3-8 車牌文字辨識流程圖. 我們的文字辨識方法與流程主要可以分為多個段落,首先取得車牌影像,再 由前處理取得二值化影像。接著,藉由二值化影像取得影像之輪廓。取得影像輪 廓後,利用篩選機制選出符合車牌之條件者,針對不同的輪廓,篩選一次符合文 字的區域。篩選文字的方法,由於車牌文字的特性為長型,因此主要判斷一個區 塊的長寬比,以及其占據整張車牌的面積。篩選完可能的文字區域後,再交由樣 板匹配,去識別屬於何種文字。. 3.5.2 樣板匹配 我們使用巴氏距離判斷車牌字元圖像之間直方圖的相似性,巴氏係數所代表 的是一種相似度,假如要分類的兩個種類相似度不高,意味著易於區別這兩個類 別,因此在分類之後,p(𝑝, 𝑞)則亦較低,相對的,欲分類之兩種類別,其相似度 較高時,p(𝑝, 𝑞)則亦較高,下式為巴氏係數的定義 𝑚. p(𝑝, 𝑞) = ∑ √𝑝𝑢 ∗ 𝑞𝑢. (3-23). 𝑢=1. 其中 𝑝u 為標準字元模板中第 p 張模板的第 u 筆資料,𝑞𝑢 為受測的字元第 q 張 模板的第 u 筆資料,p(𝑝, 𝑞)為受測的字元與標準字元模板之相似程度,越大代表 越相似。. 29.

(43) 在正態分布下 Bhattacharyya 距離的公式可表示為: 2. 1 1 𝜎𝑃2 𝜎𝑄2 1 (𝜇𝑃 − 𝜇𝑄 ) )) 𝐷𝐵 (𝑃, 𝑄) = 𝑙𝑛 ( ( 2 + 2 + 2) + ( 2 4 4 𝜎𝑄 𝜎𝑃 4 𝜎𝑃 + 𝜎𝑄2. (3-24). 其中,P ,Q 是兩個不同的分佈,𝜎𝑃 為 P 的均值,並且𝜇𝑃 是分佈 P 的方差, 𝜎𝑞 為 Q 的均值𝜇𝑞 為 Q 的方差,兩個正態分佈之間的平方和 Bhattacharyya 距離 𝑃~𝑁(𝜇1 , 𝜎12 )𝑄~𝑁(𝜇2 , 𝜎22 )的公式為:. 2. 𝐷𝐵2 (𝑃, 𝑄). 2) 2𝜎1 𝜎2 −14(𝜇𝜎12−𝜇 2 +𝜎 1 2 =1−√ 2 2𝑒 𝜎1 + 𝜎2. (3-25). 兩 個 Beta 分 佈 之 間 的 平 方 Bhattacharyya 距 離 𝑃~𝐵𝑒𝑡𝑎(𝑎1 , 𝑏1 ) 和 𝑄~𝐵𝑒𝑡𝑎(𝑎2 , 𝑏2 )是 𝑎1 + 𝑎2 𝑏1 + 𝑏2 , ) 2 2 𝐷𝐵2 (𝑃, 𝑄) = 1 − √𝐵(𝑎1 , 𝑎2 )𝐵(𝑏1 , 𝑏2 ) 𝐵(. (3-26). 其中 B 是 β 函數。 分佈 P 和 Q 可以使用兩個直方圖𝐻1 和𝐻2 分別被表示,將上式改寫為: 𝐷𝐵 (𝐻1 , 𝐻2 ) =. √. 1−. 1. ∑ √𝐻1 (𝐼)𝐻2 (𝐼). √𝐻1 𝐻2 𝑁 2. 𝐼. (3-27). 其中 N 是直方圖的總數。. 於車牌文字辨識時,我們需要準備樣板,來對待測文字做識別,以樣板匹配 (template matching) 而言,若一待測文字與某樣版文字最相似,則判斷該待測文 字為其樣板文字所代表之文字。車牌的樣板文字如圖 3-9 所示。. 30.

(44) 圖 3-9 用於數字辨識時,匹配用的字母樣板. 在車牌文字辨識系統中,首先先利用前述形態學所提及的方法,將所有可能 是文字的區域提取出來。接著,將各該待測文字區塊提取出來,與各個樣板文字 做匹配,最匹配者即為該文字。利用樣板匹配達成的正確車牌辨識結果,如圖 310 所示。. 圖 3-10 一個車牌辨識的結果,車牌辨識系統能夠將車牌上的文字擷取成有意義的文字。. 31.

(45) 第四章. 圖形處理器用於加速影像處理演算法之系統架構. CUDA 是一種由 NVIDIA 推出的平行化計算架構,也是一個指令對應多執行 緒的架構,使得 GPU 能夠解決複雜的計算問題,其包含了 CUDA 指令集架構 (ISA)以及 GPU 內部的平行計算引擎。並且讓開發人員使用 C 語言來為 CUDA 架構編寫程式,CUDA 的程式可分為 Host 以及 Device 兩個部分,工程師必須先 在 Device 對 kernel 函式進行程式碼撰寫,然後再使用 Host 驅動 kernel 的多個執 行緒,其中 kernel 程式所處理的單元可分為網格(grid)、區塊(block)以及執行緒 (thread),網格是整個 kernel 的核心,其中每個網格可分為很多區塊,在 kernel 程 式執行前必須要宣告兩項網格資訊分別為 dimGrid 與 dimblock,從 dimGird 可以 知道網格是由多少個區塊所組成的,kernel 會分配一個 blockID 給區塊,透過 ID 我們就可以指定特定的區塊執行特定的工作,而藉由宣告 dimblock 可以知道區塊 內有多少執行緒,將 dimGrid 與 dimblock 相乘變能知道總共有多少執行緒在執 行。在一個區塊中最多可以宣告三個維度的執行緒,而執行緒是 GPU 最小的處 理單元,透過給定執行緒 ID,可在多個區塊中的執行緒同步執行運算。. 4.1 管線化 (Pipeline) 處理 GPU 的實現包括三個動作,第一個動作是從主機傳送橢圓全向圖給 GPU 的 Global Memory。第二個動作是在 GPU 上使用 kernel function 做轉換,第三個動 作是將轉換完的全景圖從 GPU 傳回到 CPU。在 CUDA 中,此三個一連串動作我 們稱之為一個 Stream。為了有效提升效能,由於此三個動作互為獨立事件,因此 得使用管線化(Pipeline)的概念來將不同的 Stream 做平行處理。一個管線化的概念 如圖 4-1。由於在傳統電腦中,IF (Instruction Fetch,從記憶體取得指令)、ID (Instruction Decode,將取得到的指令解碼)、EX (Execution,執行指令)、MEM (Memory,讀取記憶體)、WB (Write Back,將處理完畢的內容寫入回記憶體),這 五個動作為獨立事件,亦即以上任兩個事件同時進行,對於執行的結果並沒有影 32.

(46) 響,所以我們可以令其中任兩個事件平行處理,充分利用,縮短總體需要執行的 時間。. 圖 4-1 管線化之概念 [30]. 而在 CUDA 之中,有三個獨立事件分別為「由主記憶體寫入 GPU 記憶體」 、 「執行」、「由 GPU 記憶體寫回主記憶體」三個項目,三者互相不影響,因此 可利用管線化的概念提升效能。. 4.2 CUDA 與全景影像轉換 一個程式若要能夠被平行處理,則每一個處理單位的處理方式必須相同,例 如每一個像素都是經由相同的轉換公式能夠得到結果,僅有輸入的座標不同而已。. 以全向攝影機 (Omnidirectional Camera) 轉為全景畫面 (Panoramic Image) 而言,我們所設計的轉換公式,能讓每一個座標的轉換公式均為相同,因此,滿 足能被平行處理的條件。. 將每一個像素作為一個單位,每一個 Kernel Function 處裡一個單位像素轉換。 33.

(47) 由於每一個像素的轉換方法都使用同一個公式,因此可以順利達成平行化之工作, 亦即,多個像素可以同一個時間被同時處理,而不像過去一次只能處裡一個像素。 如此可以大幅提升運算效能。該平行處理裝置由多個 Grid 組成,而每一個 Grid 又包含了數個 Thread ,由於每一個 Thread. 是平行化作處裡,因此於輸出圖形. 時,可 能會 有資料 不同步 的問 題,造 成輸出 像素 間相互 碰撞, 因此 同 步 化 (Synchronization) 的處理也相當重要。欲做到同步化,就要做到系統資源的使用 時間正確分配。欲正確分配使用時間,則要先確認其它會占用到相同像素的時機, 若有一像素正在占用某個系統資源,則其它欲使用該資源的執行緒,需等待其完 成工作並釋放系統資源,才能使用該資源。雖然同步會造成系統執行稍微緩慢, 但能避免輸出資料的錯誤。. 於進行平行運算時,需將把欲處裡的影像資料,傳送給平行處理裝置,置於 該平行裝置的記憶體中,才不需經過系統的其它匯流排。有鑑於此,於平行處裡 裝置中,設有一個與 CPU、主記憶體共用的共享記憶體區塊,而平行處裡裝置的 執行緒直接存取該共享記憶體。而同屬同一個 Block 的 Thread 有一個次要共享 記憶體 (Shared Memory),但各 Thread 間有自己的暫存器 (Registers)。當每一個 執行緒完成其工作後,則將該結果存放於 Global Memory ,接著, CPU 和主記 憶體再從平行處裡裝置中,將 Global Memory 的資料取回,執行應用,由此,完 成整體平行處理機制的流程。 為了驗證我們的平行處理系統,對於橢圓全向圖轉全景圖的轉換,其效能是 否確實優於傳統算法,我們設計一些實驗來做驗證。在一個 CUDA 程式中,平 行處理程式主要撰寫於 Kernel Function 中,圖 4-2 為我們轉換程式的 Kernel Function 之虛擬碼 (Pseudo code)。 以下虛擬碼中,第 7 行與第 8 行計算全向圖影像從二維影像轉換成一維影 像,第 10 行是利用畢氏定理將 pixel 與 pixel 之間的距離算出。第 11 行是利用 tan 的反函數求出角度  。最後從第 15 行到第 18 行是將全向圖中的 pixel 移動到我們 所宣告的矩形全景影像中。我們在全景圖中所得到的 r 與  經過轉換後對應到全 34.

(48) 向圖的 x, y。GPU 是以一維影像方式輸出。值得注意的是,我們設定轉換後全景 影像的寬為 360 並在第 17 行輸出。. 1__global__ void kernel(int* s, int* t, int w, int mx, int my, int in, int out){ 2 int i = threadIdx.x + blockIdx.x * blockDim.x; 3 int curr_x, curr_y, target_x, target_y; 4 double r, theta; 5 6 if(i < image_size){ 7 curr_x = ((i % w) - mx) / 1.185 + mx; 8 curr_y = i / w; 9 10 r = sqrtf ( powf(curr_x - mx, 2 ) + powf(curr_y - my, 2 ) ); 11 theta = atan2f(curr_y - my, curr_x - mx) * 180.0 / CV_PI; 12 target_x = theta; 13 target_y = r; 14 15 for(int p = 0; p < 4; p++){ 16 if(r >= in && r <= out) 17 t [target_x* w /360 + p +(target_y-32) * w] = s [i]; 18 } 19 } 圖 4-2 全向圖轉全景圖於 CUDA 的 Kernel Function 虛擬碼. 關於樣板匹配平行化處理的核心算法如圖 4-3 所示。其中 (s_x, s_y) 代表原 圖座標,而 (p_x, p_y) 代表要被匹配 pattern 的座標。blockId 代表 GPU 中的第 幾個 block ,而每個 block 裡面含有複數個 thread,threadId 即用來區別不同的 thread。 因為在 GPU 中運算,須將二維影像拉成一維陣列來處理,因此第 11 行, y*width+x 乃是將二維影像拉成一維影像。而第 10 行到第 20 行是將各點中欲 匹配影像以及其匹配的 pattern 的每個像素點相減,取得其差值,每執行完一個 點便依據 blockId 以及 threadId 去計算下一個要計算的點。每算完一個像素點, 便會依據情況將 y 值累加。計算直到 y 值超過影像的高,便結束計算。其中第 21 行到第 31 行是屬於快取 (cache) 技巧,運用動態記憶體的概念,加速程式的 35.

(49) 運行。. 1. int s_x = blockIdx.x + threadIdx.x;. 2 3 4 5 6 7 8 9. int s_y = blockIdx.y + threadIdx.y; int p_x = threadIdx.x; int p_y = threadIdx.y; int cacheIndex = p_y * blockDim.x + p_x; int r_height = s_height-p_height+1; int r_width = s_width-p_width+1; __shared__ int imgDIFF [threadsPerBlock]; int diff = 0;. 10 while(p_y < p_height){ 11 diff += iABS(sourcePtr[s_y*s_width + s_x]-patternPtr[p_y*p_width + p_x]); 12 s_x += blockDim.x; 13 p_x += blockDim.x; 14 if(p_x >= p_width){ 15 s_x = blockIdx.x + threadIdx.x; 16 p_x = threadIdx.x; 17 s_y += blockDim.y; 18 p_y += blockDim.y; 19 } 20 21 22 23 24 25 26 27 28 29. } imgDIFF[cacheIndex]=diff; __syncthreads(); int i = threadsPerBlock/2; while (i != 0) { if (cacheIndex < i) imgDIFF[cacheIndex] += imgDIFF[cacheIndex + i]; __syncthreads(); i /= 2; }. 30 if (cacheIndex == 0) 31 resultPtr[blockIdx.y*r_width+blockIdx.x] = imgDIFF[0]; 圖 4-3 樣板匹配於 CUDA 的 Kernel Function 虛擬碼. 36.

(50) 圖 4-4 CUDA 的管線化執行結果。橫軸為時間,縱軸為 Stream。左方第一個棕色 方塊為「由主記憶體寫入 GPU 記憶體」,中間藍色方塊為 Kernel 執行,右方棕 色方塊為「由 GPU 記憶體寫回主記憶體」。. 4.3 CUDA 與車牌樣板比對 圖 4-5 是所有要匹配的字元影像,我們將其合成為一張圖,一次傳送給 GPU 做平行化的匹配運算。於匹配時,對每一列與每一行,每次 shift 一個 pixel,尋找 欲匹配字元影像相似度最高者。匹配時,同樣地,傳送輸入字元影像與樣本文字 影像至 GPU。由於 GPU 可以產生數以千計的 thread 同時計算輸入字元影像與對 應樣本文字的距離,因此可以有效加速匹配。匹配完後,再將結果回傳給 CPU , 由 CPU 讀取最接近者的樣板位置,決定匹配結果屬於何種字元。. 圖 4-5 欲匹配之樣板總圖 一個 GPU 代表一個 Grid,內含許多個 Blocks ,而每一個 Blocks 裡面有 許多個 ThreadID。在每一個 Block 中,一個 Block 負責一個 Pixel 的起點位 置,該起始位置負責記錄該 block 的匹配結果。. 37.

(51) Grid. Blocks. ThreadID. 圖 4-6 GPU 階層圖. 一個 Grid 內有許多的. Block,而在我們提出的樣板平行匹配法,有兩個部. 分:第一部分,是 block 中個別 thread 對應平行計算個別 pixel 的差值;第二部 分是再透過 reduction sum 來加速計算誤差值的總和,再將所有的誤差值送回 CPU。 誤差值越小,代表物件越匹配越相近。. 圖 4-7 Reduction Sum 運作示意圖. 38.

參考文獻

相關文件

“Some ‘pictures’ are not really pictures, but rather are windows to Plato’s heaven.”,見 Philosophy of Mathematics — An Introduction to the World of Proofs and

 Promote project learning, mathematical modeling, and problem-based learning to strengthen the ability to integrate and apply knowledge and skills, and make. calculated

B3-4 DEEP LEARNING MODEL COMPRESSION BY NETWORK SLIMMING Ching-Hao Wang (王敬豪), Shih-Che Chien (簡士哲), Feng-Chia Chang (張峰嘉), and Wen-Huang Cheng (鄭文皇). B3-5

In this paper, we extend this class of merit functions to the second-order cone complementarity problem (SOCCP) and show analogous properties as in NCP and SDCP cases.. In addition,

This kind of algorithm has also been a powerful tool for solving many other optimization problems, including symmetric cone complementarity problems [15, 16, 20–22], symmetric

Text messaging (SMS) allows users to send and receive short text messages on a phone or other mobile device or computer Picture messaging allows users to send pictures and

In this thesis, we propose a novel image-based facial expression recognition method called “expression transition” to identify six kinds of facial expressions (anger, fear,

To cope with these problems, we propose and develop a ubiquitous virtual tutoring assistant system which incorporates a supplement-material base as well as a solution extraction