【圖像識別】基於模板匹配實現手寫數字識別matlab源碼含GUI

2022-01-31 天天Matlab

收錄於話題 #圖像處理matlab源碼 411個

基於幾何特徵的模板匹配通過計算模板圖像與目標圖像特徵信息,來判斷目標圖像中是否有與模板圖像相近或相同的圖像。
模板匹配的大致流程:
首先,需要製作一個模板,並以模板圖像以一定角度旋轉,製作0°–360°各個方向的模板。模板圖像 T 從目標圖像的原點處開始每次移動一個像素,直到匹配分數達到要求找到目標物體。

基於邊緣模板的創建:

我們首先從模板圖像的邊緣創建一個數據集或模板模型,該數據集或模板模型將用於目標圖像中去搜索與模板圖像相近或相同的圖像。邊緣檢測的方法與canny邊緣檢測的方法類似。

1利用sobel算子尋找圖像的梯度和方向

Sobel算子卷積因子如圖所示

sobel算子在橫向和縱向兩個方向可以與圖像作平面卷積。對於模板圖像某點(x,y)可以得出兩個方向的梯度向量Gx,Gy;

我們計算該像素點幅值梯度:

計算梯度方向:

2非最大值抑制原理提取邊緣信息

sobel算子檢測出來的邊緣太粗了,我們需要抑制那些梯度不夠大的像素點,只保留最大的梯度,從而達到瘦邊的目的。這些梯度不夠大的像素點很可能是某一條邊緣的過渡點。按照高數的極大值的定義,即對點(x0,y0)的某個鄰域內所有(x,y)都有f(x,y)≤(f(x0,y0),則稱f在(x0,y0)具有一個極大值,極大值為f(x0,y0)。簡單方案是判斷一個像素點的8鄰域與中心像素誰更大,但這很容易篩選出噪聲,因此我們需要用梯度和梯度方向來輔助確定。
如下圖所示,中心像素C的梯度方向是藍色直線dTmp1,dTmp2是梯度直線上與鄰域交點的值,那麼只需比較中心點C與dTmp1和dTmp2的大小即可。由於這兩個點的像素不知道,假設像素變化是連續的,就可以用g1、g2和g3、g4進行線性插值估計。設g1的幅值M(g1),g2的幅值M(g2),則M(dtmp1)=w*M(g2)+(1-w)*M(g1) ,其w=distance(dtmp1,g2)/distance(g1,g2) 。也就是利用g1和g2到dTmp1的距離作為權重,來估計dTmp1的值。經過非最大值抑制可以濾除大部分非邊緣點。

3用雙閾值算法檢測和連接邊緣

經過非極大值抑制之後的邊緣點中,梯度值超過T1的稱為強邊緣,梯度值小於T1大於T2的稱為弱邊緣,梯度小於T2的不是邊緣。可以肯定的是,強邊緣必然是邊緣點,因此必須將T1設置的足夠高,以要求像素點的梯度值足夠大(變化足夠劇烈),而弱邊緣可能是邊緣,也可能是噪聲,如何判斷呢?當弱邊緣的周圍8鄰域有強邊緣點存在時,就將該弱邊緣點變成強邊緣點,以此來實現對強邊緣的補充。

由此我們找到了模板圖像邊緣點的梯度信息Gx,Gy,θ,和位置信息(x,y)在與原圖像匹配之前我們的模板數據集用如下方法表示:
其中pi為相對於模板重心的相對坐標。pi=(Xi,Yi)T,i=1,2,3,4…n構成,對應於每個點有一個梯度方向向量di=(ti,ui)T

模板匹配:1計算被搜索圖像

計算被搜索圖像(目標圖像)邊緣點梯度信息,邊緣點梯度信息與位置信息的計算同模板製作的過程。

2金字塔下採樣

金字塔下採樣後,需得到多級金字塔圖像的邊緣點梯度信息,邊緣點梯度信息與位置信息的計算同模板製作的過程。其中金字塔用來對算法進行加速。

3匹配過程:

先在頂層金字塔進行快速搜索匹配得到一個匹配位置,然後在下一層金字塔進行匹配時候就能在該區域的ROI內進行搜索,以此類推,直到最底層。通過金字塔可以大大加快匹配速度。
搜索目標圖像之前,我們設被搜索圖像(目標圖像)點集(xi,yi)T, i=1,2,3,4…n,對應的每個點的方向向量為e(x,y)=(vx,y,wx,y)T
由圖像金字塔算法得到被搜索圖像底層的ROI區域後,模板圖像以重心點為原點在ROI區域進行遍歷搜索。
搜索過程按如下公式進行:

(上式di』相當於上文提到的di=模板的方向向量,pi』相當於上文提到的pi』=模板的邊緣點)
計算的是模板與子圖像對應邊緣點的梯度向量點積平均值。當一對對應邊緣點梯度方向相同是,點積取得最大值,梯度方向正交時,點積為零,梯度方向相反時,點積取得負的最大值。計算得到的相似度量值不方便用於判斷子圖像是否為符合要求的結果,即很難確定一個閾值來篩選所需要的結果。因而對上式進行歸一化處理:

(上式di』相當於上文提到的di=模板的方向向量,pi』相當於上文提到的pi』=模板的邊緣點)
上式描述的是,轉換後的模板與被搜索圖像點(x, y)處子圖像所有對應點的方向向量點積和的歸一化。由於對方向向量進行了歸一化處理,相似度量對任意光照變化具有不變性,不管是模板、還是搜索圖像中有噪聲,由於噪聲導致的方向向量是隨機的,平均起來對以上求和公式沒有貢獻值,因而具有很好的抗幹擾性。上式的取值範圍為[−1, 1],返回值為1時,表示模板和搜索子圖像與完全匹配。

 

 

相關焦點

  • 【圖像識別】基於模板匹配算法實現車輛出入庫計時matlab系統
    matlab源碼 371個
  • 模板識別:使用OpenCV實現基於特徵的圖像對齊
    我們將使用的技術通常被稱為「基於特徵圖像對齊」,因為在該技術中,在一個圖像中檢測稀疏的特徵集並且在另一圖像中進行特徵匹配。然後基於這些匹配特徵將原圖像映射到另一個圖像,實現圖像對齊。例如,為了實現面部識別系統,我們首先需要一個面部檢測器,其輸出面部所在矩形的坐標。檢測器不知道或不關心該人是誰。唯一的工作就是找到一張臉。系統的第二部分是識別算法。原始圖像被裁剪為檢測到的面部矩形,並且該裁剪的圖像反饋送到最終識別該人的面部識別算法。特徵檢測器的定位器就像面部檢測器。描述子類似識別器。只有當我們知道兩個圖像中的對應特徵時,才能計算出與兩個圖像相關的單應性。
  • 【圖像識別】基於顏色直方圖實現危險品識別matlab代碼
    matlab源碼 342個
  • 【圖像識別】基於PCA+SVM 表情識別評分系統matlab代碼
    收錄於話題 #圖像處理matlab源碼 347個
  • 【圖像識別】基於HSV和RGB模型水果分類matlab源碼含 GUI
    matlab源碼 354個
  • 【圖像去霧】直方圖均衡化+Retinex理論圖像去霧含GUI matlab源碼
    該方法的基本思想是把原始圖像的灰度統計直方圖變換為均勻分布的形式,這樣就增加了像素灰度值的動態範圍,從而達到增強圖像整體對比度的效果。數字圖像是離散化的數值矩陣,其直方圖可以被視為一個離散函數,它表示數字圖像中每一灰度級與其出現概率間的統計關係。
  • 基於FPGA圖像的鏡像
    鏡像可以用前向映射實現,同時由於輸出坐標必然落在原先的圖像區域內,所以不用進行區域判斷,屬於比較簡單的幾何變換。圖1 美國懷俄明大提頓國家公園(水面鏡像)1 原理鏡像有兩種模式—水平鏡像和垂直鏡像,它的原理如式1所示,Q為輸出,I為輸入,x和y為輸入像素坐標,xt和yt為輸出像素坐標,width和height為圖像寬度和高度。
  • Python基礎之圖像識別
    識別圖像首先,我們需要先獲得一個屏幕快照,例如我們想要點讚,我們就先把大拇指的圖片保存下來;然後使用函數:locateOnScreen(『zan.png』) ,如果可以找到圖片,則返回圖片的位置,如:Box(left=25, top=703, width=22, height=22);如果找不到圖片,則返回None;如果,屏幕上有多處圖片可以匹配,則需要使用
  • AI圖像識別技術的原理解析
    主要是根據一些醫學研究人員的實踐,結合電腦程式,對相關內容進行模擬和實現。這項技術的計算機實現基本上類似於人類圖像識別的基本原理,但計算機不會受到人類感知和視覺中任何因素的影響。人類不僅要將存儲在大腦中的圖像記憶結合起來進行識別,還要利用圖像特徵對圖像進行分類,然後利用分類特徵對圖像進行識別。
  • PyTorch手寫數字識別(MNIST)
    MNIST數據集是機器學習領域中非常經典的一個數據集,由60000個訓練樣本和10000個測試樣本組成,每個樣本都是一張28 * 28像素的灰度手寫數字圖片
  • OpenCV+TensorFlow圖片手寫數字識別(附源碼)
    初次接觸TensorFlow,而手寫數字訓練識別是其最基本的入門教程,網上關於訓練的教程很多,但是模型的測試大多都是官方提供的一些素材,能不能自己隨便寫一串數字讓機器識別出來呢
  • OpenCV常用圖像拼接方法(二) :基於模板匹配拼接
    OpenCV常用圖像拼接方法將分為四部分與大家分享,這裡是第二種方法,歡迎關注後續,本文源碼與素材連結位於文章末尾
  • 豬臉識別(附數據集)
    《美團機器學習實踐》_美團算法團隊.pdf《深度學習入門:基於Python的理論與實現》高清中文PDF+源碼python就業班學習視頻,從入門到實戰項目2019最新《PyTorch自然語言處理》英、中文版PDF+源碼
  • 基於yolo5工地安全帽和禁入危險區域識別系統,附數據集
    《美團機器學習實踐》_美團算法團隊.pdf《深度學習入門:基於Python的理論與實現》高清中文PDF+源碼特徵提取與圖像處理(第二版).pdf《神經網絡與深度學習》最新2018版中英PDF+源碼將機器學習模型部署為REST APIFashionAI服裝屬性標籤圖像識別Top1-5方案分享重要開源!
  • 深度學習之手寫數字識別項目(Sequential方法&Class方法進階版)
    此項目使用LeNet模型針對手寫數字進行分類。項目中我們分別採用了順序式API和子類方法兩種方式構建了LeNet模型訓練mnist數據集,並編寫了給圖識物應用程式用於手寫數字識別。一、LeNet模型LeNet由Yan LeCun於20世紀90年代提出,主要用於手寫字符的識別與分類。
  • 使用Python訓練SVM模型識別手寫體數字
    Python對SVM模型進行訓練並對手寫數字進行識別的過程。準備工作手寫數字識別的原理是將數字的圖片分割為8X8的灰度值矩陣,將這64個灰度值作為每個數字的訓練集對模型進行訓練。手寫數字所對應的真實數字作為分類結果。
  • 實踐 使用Python訓練SVM模型識別手寫體數字
    Python對SVM模型進行訓練並對手寫數字進行識別的過程。準備工作手寫數字識別的原理是將數字的圖片分割為8X8的灰度值矩陣,將這64個灰度值作為每個數字的訓練集對模型進行訓練。以灰度值的方式輸出手寫數字9的圖像,可以看出個大概輪廓。這就是經過切割並以灰度保存的手寫數字9。它所對應的64個灰度值就是模型的訓練集,而真實的數字9是目標分類。
  • 【圖像隱藏】基於LSB算法實現數字水印嵌入提取matlab代碼
    1 簡介根據LSB算法簡單易實現的特點,結合在圖像置亂技術中很好特性的Arnold變換。
  • C# 圖像模板匹配並標註
    模板匹配 :功能:  (1)在一張大圖像中,選取一小塊區域作為模板  (2)可在大圖像中匹配到模板圖像和位置。模板匹配是圖像處理中最基本、最常用的匹配方法。目前我司用hacon去做的,還進行了二次封裝,可以設置圖片的旋轉角度等信息,這個設計公司機密,這裡我就用opencv(NET封裝版叫emgucv)去實現這個功能。
  • PyTorch深度學習框架入門——使用PyTorch實現手寫數字識別
    下面我們通過使用PyTorch實現一個手寫數字識別的模型來簡單的入門一下PyTorch。torchvisionfrom torch.autograd import Variablefrom torchvision import transforms,datasetsimport numpy as npimport matplotlib.pyplot as plt%matplotlib inline手寫數字的數據集我們可以使用