計算機基礎項目實戰9_第1頁
計算機基礎項目實戰9_第2頁
計算機基礎項目實戰9_第3頁
計算機基礎項目實戰9_第4頁
計算機基礎項目實戰9_第5頁
已閱讀5頁,還剩54頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

計算機視覺項目開發實戰

(微課版)項目六交通標志識別—圖像分割與模板匹配思維導圖學習目標概覽能夠基于像素閾值分割法、分水嶺算法實現圖像分割知識目標學習目標素養目標技能目標培養嚴謹工程態度培養社會責任感培養技術報國情懷能夠利用圖像金字塔進行多尺度目標檢測能夠使用模板匹配方法實現目標匹配理解像素閾值分割法、分水嶺算法的原理及其應用場景理解圖像金字塔的構建過程及其在多尺度目標檢測中的作用理解目標匹配的相似度度量方法及其適用場景目錄項目導入知識準備項目拓展項目實施項目鞏固6.1圖像分割6.2模板匹配PART01項目導入項目導入交通標志作為道路交通規則的視覺化載體,承載著引導駕駛行為、規范交通秩序、預防交通事故的作用。智能交通標志識別技術將“科技向善”理念轉化為守護生命的實際屏障。智慧交通從“感知”到“認知”。人民出行的“安全守則”、社會運行的“交通脈搏”PART02知識準備知識準備—圖像分割如何從復雜的道路場景中精確分離出交通標志區域,并在不同尺度下實現穩定可靠的識別,是智能交通系統面臨的關鍵問題。圖像分割技術為此提供了多種有效的解決方案。像素閾值分割法通過設定灰度閾值實現前景與背景的快速分離。分水嶺算法則通過模擬地形淹沒過程實現圖像區域的精確劃分,能夠有效處理交通標志與復雜背景的邊界定位問題。配合圖像金字塔構建的多尺度分析空間,這些方法能夠為不同距離、角度和光照條件下的交通標志檢測提供全面的技術支持,為構建可靠的交通標志識別系統打下堅實的基礎。知識準備—圖像分割圖像分割是計算機視覺的重要研究方向,其核心目標是將數字圖像分割為具有特定語義特征的子區域。根據技術原理的不同,圖像分割方法可分為基于閾值、基于區域和基于邊緣等類型。基于閾值的方法:通過設定灰度或顏色閾值實現快速分割。基于區域的方法:利用像素間的相似性進行區域劃分。基于邊緣的方法:則通過檢測圖像不連續性來定位邊界。閾值法計算簡單但易受光照影響,區域法能產生連續區域但對初始條件敏感,邊緣法定位精確但抗噪聲能力較弱。知識準備—圖像分割當I(x,y)≥T時,像素屬于目標類;當I(x,y)<T時,像素屬于背景類。6.1.1像素閾值分割法像素閾值分割是圖像分割中較為簡單和基礎的方法,其核心思想是通過設定一個灰度閾值,將圖像像素劃分為不同類別。該方法假設目標對象與背景在灰度值上存在差異,通過選取合適的閾值實現圖像的二值化或區域劃分。設源圖像為I(x,y),通過設定閾值T,將圖像分為兩個區域:像素閾值分割法對噪聲較為敏感,在光照不均或目標對象與背景灰度重疊時分割效果較差。單一的全局閾值在處理復雜場景時往往難以取得理想效果。

知識準備—圖像分割SVM中常用的核函數主要有以下幾種類型。src:輸入圖像,必須是單通道灰度圖像。thresh:設定的閾值,取值范圍通常為0~255。maxval:像素值超過(或低于)閾值時賦予的新值。type:閾值化類型,決定了如何處理像素值與閾值的關系。retval,dst=cv2.threshold(src,thresh,maxval,type[,dst])6.1.1像素閾值分割法OpenCV提供了cv2.threshold()函數用于實現圖像分割,該函數能夠根據設定的閾值將灰度圖像轉換為二值圖像,實現前景與背景的分離。其語法格式如下:知識準備—圖像分割【例6-1】使用像素閾值分割法分割交通標志。6.1.1像素閾值分割法—案例知識準備—圖像分割運行本例代碼,將輸出圖6-1所示的結果。圖6-1使用像素閾值分割法分割交通標志代碼運行結果6.1.1像素閾值分割法—案例【例6-1】使用像素閾值分割法分割交通標志。知識準備—圖像分割①將源圖像轉換為灰度圖像。②通過形態學變換中的開運算和膨脹操作去除圖像噪聲;提取圖像的邊緣信息和背景區域。③對圖像進行距離轉換,計算前景像素到最近背景邊界的距離,再通過閾值處理獲得確定的前景區域。④將背景區域與前景區域相減,得到無法確定歸屬的未知區域。⑤為確定的前景區域賦予不同的標簽,對背景區域和未知區域做特殊標記。⑥基于標記結果執行分水嶺算法,完成最終分割。6.1.2分水嶺算法分水嶺算法是一種基于數學形態學的經典圖像分割算法,其思想來自地理學中的分水嶺概念。該算法將灰度圖像視為地形表面,其中每個像素的亮度值對應海拔高度:較亮的區域代表山峰,較暗的區域代表谷地。使用分水嶺算法執行圖像分割操作時通常包含下列步驟。

知識準備—圖像分割6.1.2分水嶺算法在OpenCV中,實現分水嶺算法涉及以下函數的協同工作。cv2.morphologyEx():執行形態學開運算,用于去除細小噪聲。cv2.dilate():執行形態學膨脹操作,用于確定背景區域。cv2.distanceTransform():計算二值圖像中每個前景像素到最近背景邊界的歐氏距離,輸出結果為浮點型圖像,其中每個像素值都表示該像素位置到最近背景邊界的距離。cv2.connectedComponents():對二值圖像進行連通區域分析,為每個獨立區域分配唯一標記。該函數的返回值包括標記數量和對應的標記矩陣,其中背景標記為0。cv2.watershed():分水嶺算法核心函數,用于執行標記控制的分水嶺變換,輸入參數為彩色源圖像和標記矩陣,輸出為分割結果矩陣。在輸出矩陣中,不同區域被賦予不同的正整數標記,而區域之間的邊界像素則被標記為-1。知識準備—圖像分割【例6-2】使用分水嶺算法分割交通標志。6.1.2分水嶺算法—案例步驟1:導入使用的庫,讀取圖像并進行預處理知識準備—圖像分割【例6-2】使用分水嶺算法分割交通標志。6.1.2分水嶺算法—案例步驟2:通過形態學操作,獲取確定的前景區域和背景區域知識準備—圖像分割【例6-2】使用分水嶺算法分割交通標志。6.1.2分水嶺算法—案例步驟3:標記前景區域與未知區域知識準備—圖像分割【例6-2】使用分水嶺算法分割交通標志。6.1.2分水嶺算法—案例步驟4:可視化知識準備—圖像分割運行本例完整代碼,將顯示圖6-2所示的結果。圖6-2分水嶺算法的過程與結果圖像6.1.2分水嶺算法—案例【例6-2】使用分水嶺算法分割交通標志。知識準備—模板匹配在成功分割出圖像中的前景目標后,還需要進一步識別和理解這些目標,從而實現對特定目標的識別或對整體場景的理解。模板匹配是一種經典的圖像識別方法,它為目標識別與場景理解提供了直觀且有效的技術方案。模板匹配的核心思想:通過在待檢測圖像中滑動窗口,尋找與預先準備好的模板圖像最為相似的區域。算法會將模板圖像與源圖像的每個可能位置進行相似度計算,通過特定的數學度量方法評估二者的匹配程度,最終在響應圖中找到最佳匹配位置。知識準備—模板匹配①準備待檢測的源圖像和作為參考的模板圖像,二者應具有相同的色彩空間和數據類型。②通過特定的相似度度量方法,在源圖像中逐像素滑動窗口,計算模板圖像與源圖像每個對應區域的匹配響應值,形成二維響應矩陣。③在生成的響應矩陣中尋找具有最高相似度的位置,據此在源圖像中標注出目標區域。6.2.1單目標匹配單目標匹配是模板匹配中最基礎且應用最廣泛的形式之一,其核心目標是在源圖像中尋找與給定模板圖像最為相似的唯一區域。該方法適用于待檢測圖像中只存在一個目標,或只需要找出最顯著目標的場景。單目標匹配在實現過程中主要包含3個核心步驟。

知識準備—模板匹配其中部分參數含義如下。image:輸入圖像,數據類型必須是8位或32位浮點型。templ:模板圖像,尺寸不能大于源圖像且與源圖像具有相同的數據類型。method:匹配方法,指定相似度度量準則,常用選項包括cv2.TM_SQDIFF(平方差匹配法)、cv2.TM_SQDIFF_NORMED(歸一化平方差匹配法)、cv2.TM_CCOEFF(相關系數匹配法)、cv2.TM_CCOEFF_NORMED(歸一化相關系數匹配法)等。result=cv2.matchTemplate(image,templ,method[,result[,mask]])單目標匹配的局限性主要體現為對目標的尺度變化和旋轉變換較為敏感。當模板圖像與源圖像中的目標的尺寸或方向不一致時,匹配精度會顯著下降。OpenCV提供了cv2.matchTemplate()函數用于實現模板匹配的核心計算過程。其語法格式如下:6.2.1單目標匹配知識準備—模板匹配min_val,max_val,min_loc,max_loc=cv2.minMaxLoc(src[,mask])在匹配完成后,可以通過cv2.minMaxLoc()函數快速定位響應矩陣中的極值位置及其數值,進而確定模板圖像在源圖像中的精確坐標。cv2.minMaxLoc()函數的語法格式如下:6.2.1單目標匹配其中,src為輸入矩陣,通常為matchTemplate()函數的輸出結果。在該函數的返回值中,min_val為矩陣中的最小值,max_val為矩陣中的最大值,min_loc為最小值的位置坐標,max_loc為最大值的位置坐標。知識準備—模板匹配【例6-3】使用單目標匹配檢測圖像中的交通標志。6.2.1單目標匹配—案例步驟1:導入程序所需的庫,讀取源圖像與模板圖像并將其轉換為灰度圖像知識準備—模板匹配6.2.1單目標匹配—案例步驟2:使用cv2.matchTemplate()函數執行模板匹配【例6-3】使用單目標匹配檢測圖像中的交通標志。知識準備—模板匹配6.2.1單目標匹配—案例步驟3:使用cv2.rectangle()函數在源圖像上標記匹配結果并可視化【例6-3】使用單目標匹配檢測圖像中的交通標志。知識準備—模板匹配運行本例的完整代碼,將獲得圖6-3所示的結果。圖6-3使用單目標匹配檢測圖像中的交通標志代碼運行結果6.2.1單目標匹配—案例【例6-3】使用單目標匹配檢測圖像中的交通標志。知識準備—模板匹配①通過cv2.matchTemplate()函數計算全圖的匹配響應矩陣。②設定合理的相似度閾值,篩選所有超過閾值的候選位置。③應用非極大值抑制技術消除重疊的檢測框,確保每個獨立目標僅對應一個檢測結果。6.2.2多目標匹配在實際應用場景中,往往需要在同一圖像中定位多個相同或相似的目標,這正是多目標匹配要解決的核心問題。與單目標匹配僅尋找最佳匹配位置不同,多目標匹配需要提取所有超過預設相似度閾值的匹配區域,實現多目標的檢測與定位。多目標匹配的技術路線延續了單目標匹配的基本原理,但在結果處理環節存在顯著差異。其核心步驟如下。知識準備—模板匹配其中部分參數含義如下。rectList:輸入的矩形列表,每個矩形表示為[x,y,width,height]或[x1,y1,x2,y2]格式。groupThreshold:分組閾值,表示至少需要有多少個重疊矩形才能形成一個組。當取值為1時,表示單個矩形也可構成一個組。eps:相對距離參數,控制矩形合并的嚴格程度。值越小表示合并條件越嚴格,通常取值范圍為0.1~0.5。rectangles,weights=cv2.groupRectangles(rectList,groupThreshold[,eps])OpenCV提供的cv2.groupRectangles()函數實現了基于非極大值抑制的矩形(即檢測框)分組與合并。其語法格式如下:6.2.2多目標匹配知識準備—模板匹配cv2.groupRectangles()函數基于聚類原理對重疊或鄰近的矩形進行分組合并,輸出合并后的矩形列表及對應的權重值。在多目標匹配應用中,該函數能夠有效消除因滑動窗口在相鄰位置產生的重復檢測框,確保每個目標僅對應一個最優的檢測結果,從而提升檢測的準確性。6.2.2多目標匹配需要注意的是,多目標匹配的效果直接受到閾值選擇的影響:閾值過高可能導致漏檢,閾值過低則可能誤檢。在實際應用中,需要根據具體場景和模板特性進行閾值調優,以在召回率與準確率之間達到最佳平衡。知識準備—模板匹配【例6-4】使用多目標匹配檢測圖像中的交通標志。6.2.2多目標匹配—案例步驟1:導入使用的庫,讀取源圖像與模板圖像并將其轉換為灰度圖像知識準備—模板匹配步驟2:執行模板匹配6.2.2多目標匹配—案例【例6-4】使用多目標匹配檢測圖像中的交通標志。知識準備—模板匹配步驟3:應用非極大值抑制技術消除重疊檢測框6.2.2多目標匹配—案例【例6-4】使用多目標匹配檢測圖像中的交通標志。知識準備—模板匹配步驟4:可視化6.2.2多目標匹配—案例【例6-4】使用多目標匹配檢測圖像中的交通標志。知識準備—模板匹配運行本例完整代碼,將獲得圖6-4所示的結果。圖6-4使用多目標匹配檢測圖像中的交通標志代碼運行結果【例6-4】使用多目標匹配檢測圖像中的交通標志。6.2.2多目標匹配—案例知識準備—模板匹配6.2.3圖像金字塔圖像金字塔的核心思想是通過對源圖像進行逐層降采樣,生成一系列分辨率逐漸降低的圖像集合。金字塔的底層是源圖像(高分辨率圖像),隨著層級上升,圖像尺寸不斷減小,形成圖6-5所示的類似金字塔的結構。這種多尺度表示使得模板匹配能夠在不同尺度空間中進行,從而實現對不同大小目標的檢測。圖6-5圖像金字塔知識準備—模板匹配6.2.3圖像金字塔OpenCV提供了構建圖像金字塔的相關函數,其中常用的是cv2.pyrDown()和cv2.pyrUp()函數。cv2.pyrDown()函數用于實現圖像的高斯金字塔下采樣,將圖像尺寸減半并應用高斯平滑;cv2.pyrUp()函數則用于圖像的上采樣,將圖像尺寸擴大一倍并插值填充。配合使用這兩個函數,可以構建完整的圖像金字塔結構。在多尺度模板匹配中,通常采用高斯金字塔結構。匹配過程從金字塔頂層(最小尺度)開始,逐層向下搜索,每一層使用前一層的匹配結果作為初始位置,逐步細化定位精度。這種分層搜索策略不僅提高了匹配效率,還能有效應對目標的尺度變化。知識準備—模板匹配根據題目要求,編寫代碼如下:6.2.3圖像金字塔—案例【例6-5】構建圖像金字塔。知識準備—模板匹配運行本例代碼,將顯示圖像金字塔的各層,如圖6-6所示。圖6-6使用多目標匹配檢測圖像中的交通標志代碼運行結果6.2.3圖像金字塔—案例【例6-5】構建圖像金字塔。PART03項目實施項目實施項目任務從道路圖像中自動檢測和識別交通標志。任務實現本項目將使用圖像分割與模板匹配技術實現交通標志的自動檢測與識別。整個過程包括圖像預處理與增強、交通標志區域分割、模板匹配識別、多尺度檢測與結果展示等環節。在項目中,將針對每個步驟編寫獨立的函數,包括圖像加載與預處理、創建交通標志的顏色掩模、基于分水嶺算法的圖像分割、創建圖像金字塔、基于金字塔的多尺度模板匹配、可視化結果等函數。在主程序中,將按工作過程依次調用這些功能函數,形成完整的交通標志檢測與識別流程。項目實施步驟1:圖像的加載與預處理定義load_and_preprocess_image()函數,用于實現從指定路徑讀取圖像文件、將圖像縮放到指定尺寸,并對圖像進行色彩空間轉換、直方圖均衡和中值濾波等多種預處理操作。具體代碼如下:項目實施步驟2:創建交通標志的顏色掩模定義create_color_mask()函數,用于實現在HSV色彩空間中創建交通標志的顏色掩模,初步定位潛在的交通標志區域,方便后續針對紅色和藍色交通標志進行檢測,為接下來的分水嶺分割提供輸入。具體代碼如下:項目實施步驟3:使用分水嶺算法分割圖像定義watershed_segmentation()函數,使用分水嶺算法對圖像進行分割,實現從粗略的顏色區域到精確的個體標志區域的轉換,為接下來的模板匹配提供準確的候選區域,從而提升交通標志檢測的準確性和效率。具體代碼如下:項目實施步驟4:模板匹配定義template_matching()函數。在該函數中,如果圖像經分水嶺分割后的候選區域(ROI)比模板圖像小,則調整模板的大小。然后執行模板匹配,如果匹配度足夠高,則返回匹配位置。具體代碼如下:項目實施步驟5:加載匹配模板圖像定義load_templates()函數,讀取指定目錄下作為匹配模板的所有圖像。具體代碼如下:項目實施步驟6:多尺度目標匹配與識別定義detect_traffic_signs()函數,使用兩重循環結構,首先遍歷用分水嶺算法獲得的各個候選區域,然后再遍歷各個模板圖像,執行多尺度的目標匹配,記錄檢測到的結果。在執行兩重循環時,如果在某一候選區域中發現更優的匹配結果,則更新前次的紀錄。在該函數的后處理階段,還將對候選框的交疊度進行判斷:如交疊度低,且當前檢測置信度高,則替換;若交疊度高,則選擇置信度更高者。該函數是交通標志識別中最為核心的部件,關鍵代碼如下:項目實施步驟6:多尺度目標匹配與識別項目實施步驟6:多尺度目標匹配與識別除上述核心函數外,定義show_preprocessing_results()、show_segmentation_results()、show_detection_results()、print_detection_results()等函數分別用于對預處理階段、圖像分割階段、交通標志檢測階段的結果進行可視化,以及輸出詳細的檢測結果信息。此處省略這些函數的代碼,請參考附書源碼。

源代碼地址文件

Traffic_Sign_Recognition.py見教材配套代碼,路徑如下:src/proj06/project/Traffic_Sign_Recognition.py項目實施圖6-7交通標志識別中的圖像預處理結果運行本項目的完整代碼,將會在給定的交通場景圖像中,對指定的交通標志進行檢測與識別,首先會展示圖6-7所示的圖像預處理結果。項目實施圖6-8分水嶺算法分割結果與最終交通標志檢測結果關閉圖像預處理結果展示窗口后,將會進一步展示圖6-8所示的分水嶺算法分割結果與最終交通標志檢測結果,并在控制臺中輸出如下信息:PART04項目拓展項目拓展基于深度學習的交通標志識別以CNN為代表的深度學習方法在交通標志識別中取得了突破性進展。與主要依賴于手工設計特征與模板匹配的傳統方法相比,CNN能夠從海量數據中自動學習具有高度判別性的層次化特征表示,從而在端到端的訓練中同時優化特征提取和分類任務。對于需要同時完成定位與識別的任務,目標檢測框架成為主流。F

溫馨提示

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

最新文檔

評論

0/150

提交評論