最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

畢業(yè)設(shè)計(jì) 機(jī)器視覺(jué)二維碼識(shí)別檢測(cè)系統(tǒng)

2023-03-29 09:54 作者:丹成學(xué)長(zhǎng)  | 我要投稿

0 簡(jiǎn)介

今天學(xué)長(zhǎng)向大家介紹一個(gè)機(jī)器視覺(jué)的畢設(shè)項(xiàng)目,二維碼 / 條形碼檢測(cè)與識(shí)別

基于機(jī)器學(xué)習(xí)的二維碼識(shí)別檢測(cè) - opencv 二維碼 識(shí)別檢測(cè) 機(jī)器視覺(jué)

畢設(shè)幫助,選題指導(dǎo),技術(shù)解答,歡迎打擾,見(jiàn)B站個(gè)人主頁(yè)

https://space.bilibili.com/33886978


1 二維碼檢測(cè)

物體檢測(cè)就是對(duì)數(shù)字圖像中一類特定的物體的位置進(jìn)行自動(dòng)檢測(cè)?;镜臋z測(cè)框架有兩種:

一種是以滑動(dòng)窗口為單位對(duì)圖像進(jìn)行掃描,對(duì)掃描所得的每個(gè)子圖像提取特征,并用學(xué)習(xí)到的分類器來(lái)分類該特征并且判斷該子圖像是否為所檢測(cè)的特定物體。對(duì)象檢測(cè)的一個(gè)問(wèn)題是,對(duì)象在圖片中的位置和尺度是未知的。算法被要求能夠檢測(cè)各種不同位置、不同大小的對(duì)象,這樣的特性被稱為位置無(wú)關(guān)性和尺度無(wú)關(guān)性。為了達(dá)到這樣的特性,常見(jiàn)的方法是使用多尺度框架,即:通過(guò)縮放原始圖像,產(chǎn)生一組大小不同的圖像序列,然后在序列的每幅圖像中都使用固定尺寸 W×H 的滑動(dòng)窗口,檢測(cè)算法將判斷每次滑動(dòng)窗口所截取的圖像子窗口是否存在目標(biāo)對(duì)象。滑動(dòng)窗口解決了位置無(wú)關(guān)性;而圖像序列中存在至少一幅圖像,其包含的目標(biāo)對(duì)象的尺度符合滑動(dòng)窗口的尺度,這樣一個(gè)圖像金字塔序列解決了尺度無(wú)關(guān)性。

另一種則是在整幅圖像上首先提取興趣點(diǎn),然后僅對(duì)提取出來(lái)的興趣點(diǎn)分類。

因此學(xué)長(zhǎng)把物體檢測(cè)方法分為基于滑動(dòng)窗口的物體檢測(cè)和基于興趣點(diǎn)的物體檢測(cè)兩類。

無(wú)論是哪種做法,整個(gè)過(guò)程都可以分為特征提取和特征分類這兩個(gè)主要階段。也就是說(shuō),物體檢測(cè)的主要問(wèn)題是使用什么樣的特征和使用什么樣的分類器。

物體檢測(cè)的難點(diǎn)在于如何用有限的訓(xùn)練集來(lái)學(xué)習(xí)到魯棒的、可以適用到各種情況下的分類器。這里所說(shuō)的各種情況包括有:圖像中物體的大小不同;光照條件的差異所引起的圖像明暗的不同;物體在圖像中可能存在的旋轉(zhuǎn)和透視情況;同類物體間自身存在的差異。

這里學(xué)長(zhǎng)以定位二維碼 / 條形碼為例,簡(jiǎn)述基于機(jī)器學(xué)習(xí)實(shí)現(xiàn)物體檢測(cè)的大致算法流程。

2 算法實(shí)現(xiàn)流程

算法流程圖如下圖所示:

在這里插入圖片描述

我們先把輸入圖像分成 25×25 的圖像子塊。把圖像子塊作為特征提取和特征分類這兩個(gè)模塊的基本處理對(duì)象,即對(duì)圖像子塊進(jìn)行紋理特征提取,特征分類時(shí)判定當(dāng)前處理的圖像子塊是否屬于二維條形碼的一部分

在這里插入圖片描述

在特征提取模塊中,我們使用紋理特征提取算法從原始輸入圖像中提取出多分辨率直方圖特征、局部二值模式特征和邊緣方向直方圖特征,這三種紋理特征的表達(dá)形式均為一維數(shù)組。我們將這 3 個(gè)數(shù)組連接為 1 個(gè)一維數(shù)組,作為后續(xù)分類模塊的輸入。

在特征分類時(shí),我們希望保留所有屬于二維條形碼的圖像子塊,同時(shí)去除所有屬于背景的圖像子塊。在該模塊中,我們使用了自適應(yīng) Spatialboost 算法。

下圖為經(jīng)過(guò)這步處理后的理想輸出結(jié)果,圖中被標(biāo)記的小方塊表示他們屬于二維條形碼的一部分。

在這里插入圖片描述

3 特征提取

圖像的紋理特征可以描述物體特有的屬性,用以區(qū)別其他物體。紋理特征總體可分為空域和頻域兩大類。在本文算法中,我們采用的紋理特征均屬于空域的紋理特征,也是局部特征,它們分別是多分辨率直方圖特征、局部二值模式特征和邊緣方向直方圖特征。

多分辨率直方圖特征具備旋轉(zhuǎn)無(wú)關(guān)的特點(diǎn)。這種紋理特征保留了灰度直方圖特征計(jì)算簡(jiǎn)單和保存方便的特點(diǎn)。同時(shí)它又可以描述紋理的局部信息,彌補(bǔ)了傳統(tǒng)的灰度直方圖特征的缺點(diǎn)。

局部二值模式特征是一種計(jì)算復(fù)雜度較低的局部特征,它具有明暗無(wú)關(guān)和旋轉(zhuǎn)無(wú)關(guān)的特點(diǎn)。 邊緣方向直方圖特征與全局的光照變化是無(wú)關(guān)的,它可以提取出二維條形碼紋理的幾何特點(diǎn)。

4 特征分類

學(xué)長(zhǎng)開(kāi)發(fā)的算法所使用的分類器為自適應(yīng) Spatialboost 算法,這是對(duì) Spatialboost 算法的一個(gè)改進(jìn)。使用這個(gè)分類器是由二維條形碼的特點(diǎn)以及我們算法框架的特點(diǎn)所決定的。由于我們把原始輸入圖像分為若干大小固定的圖像子塊,屬于二維條形碼的圖像子塊在空間上有很強(qiáng)的關(guān)聯(lián)性,或者說(shuō)這些屬于二維條形碼的圖像子塊都是緊密相鄰的。同時(shí)由于圖像子塊的尺寸不大,它所包含的信息量相對(duì)較少,有的時(shí)候就很難把屬于二維條形碼的圖像子塊和屬于背景的圖像子塊區(qū)分開(kāi)(它們?cè)谔卣骺臻g上可能重疊)。如果我們可以利用子塊在空間上的聯(lián)系,把空間信息加入到分類器中,將有利于提高分類器的準(zhǔn)確率。

適應(yīng) Spatialboost 算法可以同時(shí)利用紋理特征以及子塊在空間上的聯(lián)系,在訓(xùn)練過(guò)程中,將紋理特征和空間信息自適應(yīng)的結(jié)合起來(lái)訓(xùn)練分類器。這樣,當(dāng)前處理的子塊的分類結(jié)果不僅依賴于它自己的紋理特征,還和它周圍子塊的分類結(jié)果密切相關(guān)。當(dāng)屬于背景的圖像子塊的紋理特征很接近于屬于二維條形碼的圖像子塊時(shí),我們還是可以依靠和它相鄰的背景子塊來(lái)對(duì)它做出正確的分類。

5 ?后處理

經(jīng)過(guò)特征提取和特征分類兩個(gè)模塊后,我們得到了對(duì)圖像子塊的分類結(jié)果,但最后我們期望得到的是對(duì)二維條形碼的包圍盒。在我們的設(shè)置下,自適應(yīng)Spatialboost 分類器對(duì)背景子塊的分類相當(dāng)嚴(yán)格,此時(shí)對(duì)屬于二維條形碼的圖像子塊會(huì)有部分漏檢發(fā)生,

在這里插入圖片描述

因此在后處理模塊中,我們先使用一種自適應(yīng)聚類算法,對(duì)分類后的結(jié)果進(jìn)一步改進(jìn),來(lái)精確的覆蓋整個(gè)二維條形碼。特征分類后定位到的子塊的大小為 25×25,我們把這些子塊再劃分為 10×10 的小方塊。接著以得到的 10×10 的子塊為種子,用子塊灰度值的方差為衡量標(biāo)準(zhǔn)往外聚類,聚類時(shí)的閾值設(shè)定為:

在這里插入圖片描述

其中 M 是聚類開(kāi)始時(shí)作為種子的子塊的個(gè)數(shù),k 為調(diào)整系數(shù),在本文算法中 k設(shè)置為 0.5,Var 和 Mean 分別表示子塊灰度值的均值和方差。由公式(3-1)可知,每幅圖像的聚類閾值是自適應(yīng)的計(jì)算得來(lái)的。聚類開(kāi)始時(shí)首先從種子子塊出發(fā),計(jì)算它們周圍的子塊的灰度值方差,如果大于聚類閾值就把它標(biāo)識(shí)為屬于二維條形碼,重復(fù)這個(gè)過(guò)程直到周圍再?zèng)]有子塊符合聚類條件。圖 3-5 是聚類算法的部分結(jié)果,第一行的圖像是特征分類后的結(jié)果,準(zhǔn)確的定位到了一部分二維條形碼,但是沒(méi)有完全的覆蓋整個(gè)二維條形碼,不利于我們輸出最后的定位包圍盒。第二行為聚類后的結(jié)果,可以看到小塊幾乎完全覆蓋了整個(gè)二維條形碼,此時(shí)再把這些小塊合并為一個(gè)平行四邊形就很方便了。

在這里插入圖片描述

聚類后定位出來(lái)的小塊基本上覆蓋了整個(gè)二維條形碼,最后我們只需要把定位出的小包圍盒合并為大包圍盒,并輸出最后的定位結(jié)果。整個(gè)后處理流程見(jiàn)圖

在這里插入圖片描述

6 代碼實(shí)現(xiàn)

這里演示條形碼的檢測(cè)效果:

在這里插入圖片描述

關(guān)鍵部分代碼實(shí)現(xiàn):

# import the necessary packages
import numpy as np
import argparse
import CV2

# construct the argument parse and parse the arguments
# ap = argparse.ArgumentParser()
# ap.add_argument("-i", "--image", required = True, help = "path to the image file")
# args = vars(ap.parse_args())

# load the image and convert it to grayscale
image = CV2.imread('./images/2.png')
gray = CV2.cvtColor(image, CV2.COLOR_BGR2GRAY)

# compute the Scharr gradient magnitude representation of the images
# in both the x and y direction
gradX = CV2.Sobel(gray, ddepth = CV2.CV_32F, dx = 1, dy = 0, ksize = -1)
gradY = CV2.Sobel(gray, ddepth = CV2.CV_32F, dx = 0, dy = 1, ksize = -1)

# subtract the y-gradient from the x-gradient
gradient = CV2.subtract(gradX, gradY)
gradient = CV2.convertScaleAbs(gradient)

# blur and threshold the image
blurred = CV2.blur(gradient, (9, 9))
(_, thresh) = CV2.threshold(blurred, 225, 255, CV2.THRESH_BINARY)

# construct a closing kernel and apply it to the thresholded image
kernel = CV2.getStructuringElement(CV2.MORPH_RECT, (21, 7))
closed = CV2.morphologyEx(thresh, CV2.MORPH_CLOSE, kernel)

# perform a series of erosions and dilations
closed = CV2.erode(closed, None, iterations = 4)
closed = CV2.dilate(closed, None, iterations = 4)

# find the contours in the thresholded image, then sort the contours
# by their area, keeping only the largest one
(cnts, _) = CV2.findContours(closed.copy(), CV2.RETR_EXTERNAL,
CV2.CHAIN_APPROX_SIMPLE)
c = sorted(cnts, key = CV2.contourArea, reverse = True)[0]

# compute the rotated bounding box of the largest contour
rect = CV2.minAreaRect(c)
box = np.int0(CV2.boxPoints(rect))

5 最后

畢設(shè)幫助,選題指導(dǎo),技術(shù)解答,歡迎打擾,見(jiàn)B站個(gè)人主頁(yè)

https://space.bilibili.com/33886978

畢業(yè)設(shè)計(jì) 機(jī)器視覺(jué)二維碼識(shí)別檢測(cè)系統(tǒng)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
庆城县| 葫芦岛市| 西贡区| 那坡县| 奉贤区| 区。| 大宁县| 辽阳市| 牙克石市| 如东县| 辉南县| 镶黄旗| 通江县| 奉贤区| 元氏县| 华池县| 岗巴县| 江西省| 长宁区| 溆浦县| 泽库县| 阿拉善左旗| 墨脱县| 万年县| 盐亭县| 蒙山县| 洛浦县| 河西区| 新邵县| 永宁县| 广安市| 揭阳市| 永丰县| 花莲县| 石棉县| 绥滨县| 县级市| 西盟| 额济纳旗| 罗源县| 巴彦淖尔市|