0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

手機鏡頭目標提取、缺陷檢測與圖像畸變校正

新機器視覺 ? 來源:博客園 ? 作者:LittleNyima ? 2020-08-28 13:50 ? 次閱讀

前兩天參加了北師的數(shù)學建模校賽,B題是一道圖像處理的題,于是趁機練習了一下OpenCV,現(xiàn)在把做的東西移植過來。

(2020.5.31補充:此方法在競賽中取得二等獎。這次的參賽論文的確存在一些問題,例如沒有對結(jié)果進行量化評估、對處理方式的具體細節(jié)敘述得不夠明確、參考文獻不夠豐富(好吧,其實沒有引用參考文獻)等。)

題目大意

給出一張生產(chǎn)線上拍攝的手機鏡頭的圖像(如下),要求解決三個問題:

建立模型構(gòu)造出一種分割方法,可以將左右兩個鏡頭的待測區(qū)域(白色環(huán)形內(nèi)區(qū)域)準確地分離出來。

建立模型構(gòu)造一種檢測方法,自動地在待測區(qū)域之內(nèi)將所有缺陷點找出,缺陷點為人眼可識別的白點,最小可為一個像素點。要求給出缺陷點的數(shù)學描述,并根據(jù)該描述建立檢測模型,自動確定每個缺陷點的位置和像素大小。給出右側(cè)鏡頭中按像素大小排序的最大的前五個缺陷點的位置坐標。

由于在實際拍照中鏡頭可能會在模具中抖動,所以拍攝的圖片可能并不是正對鏡頭的,此為圖像的偏心現(xiàn)象。比如圖中左側(cè)圖像就是正對的情況,右側(cè)就是不正對(偏心)的情況。建立模型構(gòu)造一種校正方法,校正右側(cè)圖像的偏心現(xiàn)象。呈現(xiàn)校正效果,并給出第2問所求五個缺陷點校正后的位置坐標。

問題求解

問題一

這個問題是目標檢測,并且需求十分明確:提取出白色圓環(huán)中的區(qū)域的圖像。觀察圖像可以發(fā)現(xiàn)圖中白色的部分幾乎只有需要檢測的白色圓環(huán),其他的白色區(qū)域基本上都是不規(guī)則圖形以及一些噪點。一種比較簡單的處理方式是直接選取一個合適的閾值二值化,把除了需要的白色圓環(huán)之外的區(qū)域全部置位黑色。不過為了魯棒性我們并沒有使用這種簡單粗暴的方式。

我們的預處理方法是二值化去除多余細節(jié)開運算去除噪點高斯濾波減小像素間梯度,完成預處理后再進行輪廓搜索。二值化采取了全局二值化,主要是在最大類間方差法(OTSU法)與三角形法兩者之間進行選取,實驗發(fā)現(xiàn)后者會使黑白區(qū)域邊界模糊且曲折,并且很多白色噪點(第二問要檢測)受到了干擾,因此選擇了前者作為二值化方法。開運算的卷積核為20×20矩形卷積核,進行了一次效果就很好了。高斯濾波的直徑(嚴格來說并不能叫做直徑)經(jīng)驗性地確定為了5。預處理后的效果如下圖所示。

預處理結(jié)束之后直接使用OpenCV內(nèi)置的findContours()尋找邊界,這個函數(shù)非常方便的一點是它可以根據(jù)輪廓之間的嵌套關(guān)系,對各個輪廓構(gòu)造層次關(guān)系,函數(shù)原型為:

cv2.findContours(image, mode, method[, contours[, hierarchy[, offset ]]])

其中的必要參數(shù)為:

image:輸入的圖像

mode:輪廓的檢索模式,共有四種取值。

cv2.RETR_EXTERNAL:只檢索外輪廓。

cv2.RETR_LIST:檢索輪廓不建立層次關(guān)系。

cv2.RETR_CCOMP:建立兩層的層次關(guān)系(即父子關(guān)系),父輪廓為外輪廓,子輪廓為相應內(nèi)孔。若內(nèi)孔中還有內(nèi)孔,則下一層的內(nèi)孔作為另一個父輪廓。

cv2.RETR_TREE:對輪廓建立等級樹的層次關(guān)系。

method:輪廓的逼近方法,共有四種取值。

cv2.CHAIN_APPROX_NONE:儲存所有輪廓點,相鄰兩個點的橫縱坐標之差均不超過1。

cv2.CHAIN_APPROX_SIMPLE:壓縮水平方向,垂直方向,對角線方向的元素,只保留該方向的終點坐標,例如一個矩形輪廓只需4個點來保存輪廓信息。

cv2.CHAIN_APPROX_TC89_L1和cv2.CHAIN_APPROX_TC89_KCOS都是使用teh-Chinl chain近似算法。

對于圓環(huán)來說直接選取CCOMP模式,圖中的所有輪廓中只有圓環(huán)的外輪廓有子輪廓,從而找出所有的目標邊界。根據(jù)此邊界創(chuàng)建遮罩,再將遮罩與原圖做按位與即可分割出目標圖像。最后做出來的結(jié)果相當不錯。(就不放在這里了,有興趣的可以自己拿原圖跑一下代碼)

1 ''' 2 * detection.py 3 Runtime environment: 4 python = 3.7.4 5 opencv-python = 4.1.1.26 6 numpy = 1.17.2 7 ''' 8 9 from cv2 import imread, IMREAD_GRAYSCALE, threshold, THRESH_BINARY, THRESH_OTSU,10 getStructuringElement, MORPH_RECT, erode, dilate, GaussianBlur, findContours,11 RETR_CCOMP, CHAIN_APPROX_SIMPLE, IMREAD_COLOR, drawContours, bitwise_and,12 imwrite13 from numpy import zeros, shape, uint814 15 def detection():16 original = imread('Original.png', IMREAD_GRAYSCALE)17 _, binary = threshold(original, 0, 255, THRESH_BINARY | THRESH_OTSU)18 imwrite('problem1_binary.png', binary)19 kernel = getStructuringElement(MORPH_RECT, (20, 20))20 eroded = erode(binary, kernel)21 dilated = dilate(eroded, kernel)22 blur = GaussianBlur(dilated, (5, 5), 0)23 imwrite('problem1_preprocess.png', blur)24 contours, hierarchies = findContours(blur, RETR_CCOMP, CHAIN_APPROX_SIMPLE)25 chromatic = imread('Original.png', IMREAD_COLOR)26 drawContours(chromatic, contours, -1, (0, 0, 255), 10)27 imwrite('problem1_contours.png', chromatic)28 chromatic = imread('Original.png', IMREAD_COLOR)29 for hierarchy in hierarchies[0, :]:30 if hierarchy[2] != -1:31 drawContours(chromatic, contours, hierarchy[2], (255, 0, 255), 15)32 imwrite('problem1_target_contours.png', chromatic)33 chromatic = imread('Original.png', IMREAD_COLOR)34 count = 035 for hierarchy in hierarchies[0, :]:36 if hierarchy[2] != -1:37 mask = zeros(shape(chromatic), dtype = uint8)38 drawContours(mask, contours, hierarchy[2], (255, 255, 255), -1)39 imwrite('mask' + str(count) + '.png', mask)40 imwrite('detection' + str(count) + '.png', bitwise_and(chromatic, mask))41 count += 142 43 if __name__ == '__main__':44 detection()

問題二

檢測缺陷點還要計算大小,這很明顯是一個圖搜索問題。把問題一預處理第一步,也就是二值化得到的圖像與遮罩疊加,所需要搜索的缺陷點就都顯現(xiàn)出來了。需要做的只是遍歷圖像中所有點,然后對每個點進行廣度優(yōu)先搜索就可以了。這個問題也比較順利地解決了,唯一的缺點是遍歷廣搜運行起來有一點慢,要運行數(shù)十秒才能得到結(jié)果。

1 ''' 2 Runtime environment: 3 python = 3.7.4 4 opencv-python = 4.1.1.26 5 numpy = 1.17.2 6 ''' 7 8 from cv2 import imread, IMREAD_GRAYSCALE, threshold, THRESH_BINARY, THRESH_OTSU, 9 imwrite, bitwise_and, IMREAD_COLOR, circle10 from numpy import shape, zeros, uint811 12 def findDefect():13 original = imread('Original.png', IMREAD_GRAYSCALE)14 _, binary = threshold(original, 0, 255, THRESH_BINARY | THRESH_OTSU)15 mask = imread('mask0.png', IMREAD_GRAYSCALE)16 target = bitwise_and(binary, mask)17 imwrite('problem2_target.png', target)18 flag = zeros(shape(target), dtype = uint8)19 defects = []20 for i in range(shape(target)[0]):21 for j in range(shape(target)[1]):22 if target[i][j] == 255 and flag[i][j] == 0:23 queue = []24 head, tail= 0, 025 x, y = i, j26 queue.append(None)27 queue[head] = (x, y)28 flag[x][y] = 129 head += 130 while head > tail:31 if x > 0 and target[x - 1][y] == 255 and flag[x - 1][y] == 0:32 queue.append(None)33 queue[head] = (x - 1, y)34 flag[x - 1][y] = 135 head += 136 if y > 0 and target[x][y - 1] == 255 and flag[x][y - 1] == 0:37 queue.append(None)38 queue[head] = (x, y - 1)39 flag[x][y - 1] = 140 head += 141 if x < shape(target)[0] - 1 and target[x + 1][y] == 255 and flag[x + 1][y] == 0:42 queue.append(None)43 queue[head] = (x + 1, y)44 flag[x + 1][y] = 145 head += 146 if y < shape(target)[1] - 1 and target[x][y + 1] == 255 and flag[x][y + 1] == 0:47 queue.append(None)48 queue[head] = (x, y + 1)49 flag[x][y + 1] = 150 head += 151 (x, y) = queue[tail]52 tail = tail + 153 size = len(queue)54 xsum, ysum = 0, 055 for (x, y) in queue:56 xsum += x57 ysum += y58 defects.append((size, xsum // size, ysum // size))59 defects.sort()60 print(defects[::-1], len(defects))61 print(defects[-5:])62 return defects[-5:]63 64 def visualize(defects):65 original = imread('Original.png', IMREAD_COLOR)66 for defect in defects:67 circle(original, (defect[2], defect[1]), 10, (0, 0, 255), -1)68 imwrite('defects.png', original)69 70 if __name__ == '__main__':71 defects = findDefect()72 visualize(defects)

最后得到了116個缺陷點,雖然大多數(shù)都只有1~2個像素但不得不吐槽這個鏡頭的加工技術(shù)確實不太行。

問題三

這個問題是對鏡頭在模具內(nèi)抖動造成的偏心畸變進行修正,再重新計算缺陷點坐標。修正畸變是本次各個問題中最為棘手的一個部分。查找了一下資料,偏心畸變是由于圖像中目標的光軸與攝像機的光軸不重合造成的,這也是偏心畸變在英文中被稱為decentering distortion的原因。在本問題中,大概是這樣:

如果把鏡頭內(nèi)表面看做圓錐面的話,偏心畸變的產(chǎn)生原因就是這個圓錐稍微“倒下”了一點。想要從幾何上對齊進行修正,就要將這個圓錐“扶正”,具體方式是將圓錐面上的每個點都映射到另一個正立的圓錐上,使得其在母線上的位置比例關(guān)系不變。

如上圖,這是從圓錐的底面看向頂點的視圖。目標是將紅色的圓錐母線映射到藍色的圓錐母線上,在左圖看來,就是對于圓O內(nèi)任意一點P,連接O'P并延長交圓O于Q,連接OQ,在OQ上找到一點P'使得O'P/O'Q=OP'/OQ,P'即為所求。具體的公式推導就不推了,主要過程就是先將原坐標系中的坐標映射到這個圓O的坐標系中,得到目標點的坐標后再映射回去(因為線性代數(shù)很多都忘記了所以數(shù)學推導十分受苦QAQ)。最后的修正效果如下:

左圖是修正前的原圖,右圖是修正后的圖像。雖然直觀上看并沒有太大變化,但仔細觀察中間的深色原點以及深灰色圓形陰影的位置,就可以看出整幅圖像得到了一個從左下到右上的校正。最后的總體效果還是比較令人滿意的,在新的圖像上重復問題一、二的算法,問題即得解。

問題三的代碼如下,主要有兩部分,第一部分是求中間小的深色圓形陰影位置的代碼,第二部分是進行畸變校正的代碼(實現(xiàn)比較暴力,相應地運行效率也比較低)。

1 ''' 2 * locating.py 3 Runtime environment: 4 python = 3.7.4 5 opencv-python = 4.1.1.26 6 numpy = 1.17.2 7 ''' 8 9 from cv2 import imread, IMREAD_GRAYSCALE, threshold, THRESH_OTSU, THRESH_BINARY,10 imshow, waitKey, imwrite, THRESH_TRIANGLE, adaptiveThreshold, ADAPTIVE_THRESH_MEAN_C,11 ADAPTIVE_THRESH_GAUSSIAN_C, HoughCircles, HOUGH_GRADIENT, circle,12 getStructuringElement, MORPH_RECT, erode, dilate, medianBlur, GaussianBlur,13 Canny, findContours, RETR_CCOMP, CHAIN_APPROX_SIMPLE, drawContours,14 IMREAD_COLOR, RETR_TREE, minEnclosingCircle15 from numpy import uint1616 17 if __name__ == '__main__':18 original = imread('detection0.png', IMREAD_GRAYSCALE) # read original image as grayscale image19 kernel = getStructuringElement(MORPH_RECT, (20, 20))20 eroded = erode(original, kernel)21 dilated = dilate(eroded, kernel)22 dilated = dilate(dilated, kernel)23 eroded = erode(dilated, kernel)24 blur = GaussianBlur(eroded, (5, 5), 0)25 original = blur26 binary = adaptiveThreshold(original, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 99, 2)27 imwrite('adaptive_mean.png', binary) # save image adaptive mean method(loc.)28 origin = imread('adaptive_mean.png', IMREAD_GRAYSCALE)29 kernel = getStructuringElement(MORPH_RECT, (40, 40))30 eroded = erode(origin, kernel)31 dilated = dilate(eroded, kernel)32 blur = GaussianBlur(dilated, (5, 5), 0)33 origin = blur34 contours, hierarchies = findContours(origin, RETR_TREE, CHAIN_APPROX_SIMPLE)35 print(hierarchies)36 chromatic = imread('Original.png', IMREAD_COLOR)37 for i in range(len(hierarchies[0])):38 if hierarchies[0][i][2] == -1:39 break40 length = len(contours[i])41 (x0, y0), r = minEnclosingCircle(contours[i])42 sum = [0, 0]43 for k in contours[i]:44 sum = sum + k45 print(sum // length)46 x, y = tuple(sum[0] // length)47 circle(chromatic, (int(x0), int(y0)), 5, (0, 255, 0), -1)48 circle(chromatic, (int(x0), int(y0)), int(r), (0, 255, 0), 10)49 X, Y, R = (2585, 1270, 433)50 circle(chromatic, (X, Y), 5, (0, 0, 255), -1)51 circle(chromatic, (X, Y), R, (0, 0, 255), 10)52 print(int(x0), int(y0), int(r))53 print(X, Y, R)54 imwrite('contours.png', chromatic)

1 """ 2 * calibrate.py 3 Runtime environment: 4 python = 3.7.4 5 opencv-python = 4.1.1.26 6 numpy = 1.17.2 7 """ 8 9 from math import sqrt10 from cv2 import imread, IMREAD_GRAYSCALE, imwrite, medianBlur11 from numpy import shape12 13 14 def dist(p1, p2):15 r = (float(p1[0] - p2[0]) ** 2 + float(p1[1] - p2[1]) ** 2) ** 0.516 return r17 18 19 def calibrate():20 x, y, r = 2567.0, 1289.0, 63.021 x0, y0, r0 = 2585.0, 1270.0, 433.022 dist0 = dist((x, y), (x0, y0))23 input_img = imread('Original.png', IMREAD_GRAYSCALE)24 output = imread('Original.png', IMREAD_GRAYSCALE)25 tan_theta = float(y - y0) / float(x0 - x)26 sin_theta = tan_theta / sqrt(1 + tan_theta * tan_theta)27 cos_theta = 1 / sqrt(1 + tan_theta * tan_theta)28 sin_theta, cos_theta = sin_theta.real, cos_theta.real29 for i in range(shape(input_img)[1]):30 for j in range(shape(input_img)[0]):31 original = (i, j)32 if dist(original, (x0, y0)) < r0:33 neo = (cos_theta * float(i - x0) - sin_theta * float(j - y0),34 -sin_theta * float(i - x0) - cos_theta * float(j - y0))35 a = float(neo[1]) ** 2 + (float(neo[0]) + dist0) ** 236 b = -2.0 * float(neo[1]) * dist0 * (float(neo[0]) + dist0)37 c = float(neo[1]) ** 2 * (dist0 ** 2 - r0 ** 2)38 delta = b ** 2 - 4 * a * c39 if delta < 0 or a == 0 or float(neo[1]) == 0:40 continue41 yr = (sqrt(delta) - b) / (2 * a)42 if (yr * float(neo[1])) < 0:43 yr = (0 - b - sqrt(delta)) / (2 * a)44 xr = ((float(neo[0]) + dist0) * yr / float(neo[1])) - dist045 x2, y2 = xr / yr * float(neo[1]), float(neo[1])46 real = (cos_theta * x2 - sin_theta * y2 + x0, -sin_theta * x2 - cos_theta * y2 + y0)47 output[int(real[1])][int(real[0])] = input_img[int(original[1])][int(original[0])]48 imwrite('problem3_after_mapping.png', output)49 medianed = medianBlur(output, 3)50 imwrite('Result3.png', medianed)51 52 53 if __name__ == '__main__':54 calibrate()

總結(jié)

雖然之前處理過一些圖像處理問題但從來沒有像這次一樣完整地做一次題目,也沒有深入地了解過各個運算的內(nèi)在原理。這次的圖像處理問題前兩個比較基礎(chǔ),最后一個比較有挑戰(zhàn)性,感覺對于學習OpenCV還是很有幫助的。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 圖像
    +關(guān)注

    關(guān)注

    2

    文章

    1075

    瀏覽量

    40278
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4237

    瀏覽量

    61973
  • OpenCV
    +關(guān)注

    關(guān)注

    29

    文章

    622

    瀏覽量

    41091

原文標題:OpenCV實戰(zhàn) | 手機鏡頭目標提取、缺陷檢測與圖像畸變校正

文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    基于DCC和張氏標定的相機鏡頭畸變校正

    電子發(fā)燒友網(wǎng)站提供《基于DCC和張氏標定的相機鏡頭畸變校正.pdf》資料免費下載
    發(fā)表于 08-29 10:37 ?0次下載
    基于DCC和張氏標定的相機<b class='flag-5'>鏡頭</b><b class='flag-5'>畸變</b><b class='flag-5'>校正</b>

    圖像分割與目標檢測的區(qū)別是什么

    圖像分割與目標檢測是計算機視覺領(lǐng)域的兩個重要任務,它們在許多應用場景中都發(fā)揮著關(guān)鍵作用。然而,盡管它們在某些方面有相似之處,但它們的目標、方法和應用場景有很大的不同。本文將介紹
    的頭像 發(fā)表于 07-17 09:53 ?546次閱讀

    目標檢測圖像識別的區(qū)別在哪

    目標檢測圖像識別是計算機視覺領(lǐng)域中的兩個重要研究方向,它們在實際應用中有著廣泛的應用,如自動駕駛、智能監(jiān)控、醫(yī)療診斷等。盡管它們在某些方面有相似之處,但它們之間存在一些關(guān)鍵的區(qū)別。 基本概念
    的頭像 發(fā)表于 07-17 09:51 ?373次閱讀

    目標檢測與識別技術(shù)的關(guān)系是什么

    任務是在圖像或視頻中快速準確地定位出感興趣的目標,并給出目標的位置信息。目標檢測技術(shù)通常包括候選區(qū)域提取
    的頭像 發(fā)表于 07-17 09:38 ?282次閱讀

    圖像檢測與識別技術(shù)的關(guān)系

    檢測技術(shù)是指利用計算機視覺技術(shù),對圖像中的特定目標進行定位和識別的過程。它通常包括圖像預處理、特征提取、
    的頭像 發(fā)表于 07-03 14:43 ?343次閱讀

    labview圖像畸變矯正問題

    求助各位大佬,如下圖,圖像畸變矯正需要有個矯正模板template.png,怎么樣可以把這個“template.png”的矯正信息全部變成常量放入到VI里面。后面vi就不需要調(diào)用這個地址的圖片了
    發(fā)表于 06-20 22:16

    工業(yè)鏡頭中常說的畸變、遠心鏡頭及遠心度

    淺談工業(yè)鏡頭中常說的畸變、遠心鏡頭及遠心度
    的頭像 發(fā)表于 05-22 11:00 ?843次閱讀
    工業(yè)<b class='flag-5'>鏡頭</b>中常說的<b class='flag-5'>畸變</b>、遠心<b class='flag-5'>鏡頭</b>及遠心度

    機器視覺的鏡頭圖像采集卡硬件技術(shù)分析

    光學鏡頭目前有監(jiān)控級和工業(yè)級兩種,監(jiān)控級鏡頭主要適用于圖像質(zhì)量不高、價格較低的應用場合;工業(yè)級鏡頭由于圖像質(zhì)量好、
    發(fā)表于 04-07 14:23 ?444次閱讀
    機器視覺的<b class='flag-5'>鏡頭</b>和<b class='flag-5'>圖像</b>采集卡硬件技術(shù)分析

    攝像頭各標定參數(shù)的作用

    車載攝像頭的畸變矩陣描述了攝像頭鏡頭造成的畸變,主要包括徑向畸變和切向畸變等參數(shù)。畸變矩陣的作用
    的頭像 發(fā)表于 03-21 11:11 ?648次閱讀
    攝像頭各標定參數(shù)的作用

    視覺檢測設(shè)備的分類

    、質(zhì)量控制、醫(yī)療影像、安防監(jiān)控、無人駕駛等。視覺檢測設(shè)備的主要功能包括圖像采集、圖像處理、目標檢測、特征
    的頭像 發(fā)表于 02-21 09:41 ?888次閱讀
    視覺<b class='flag-5'>檢測</b>設(shè)備的分類

    描繪未知:數(shù)據(jù)缺乏場景的缺陷檢測方案

    Neuro-T 視覺平臺 克服了數(shù)據(jù)缺乏狀況的困難,通過零代碼設(shè)置 GAN模型 和 無監(jiān)督學習模型 ,輕松實現(xiàn)缺陷圖像的標注、繪制和導出。 工業(yè)應用中存在較多的缺陷檢測需求。針對
    的頭像 發(fā)表于 01-25 10:46 ?370次閱讀
    描繪未知:數(shù)據(jù)缺乏場景的<b class='flag-5'>缺陷</b><b class='flag-5'>檢測</b>方案

    機器視覺之玻璃產(chǎn)品缺陷檢測

    數(shù)字化處理后的圖像傳輸至計算機中,依靠視覺檢測軟件系統(tǒng)完成缺陷圖像的濾波、邊緣檢測、特征提取以及
    發(fā)表于 12-22 16:09 ?632次閱讀
    機器視覺之玻璃產(chǎn)品<b class='flag-5'>缺陷</b><b class='flag-5'>檢測</b>

    基于8片TMS320C6416的衛(wèi)星圖像目標提取高速處理系統(tǒng)

    電子發(fā)燒友網(wǎng)站提供《基于8片TMS320C6416的衛(wèi)星圖像目標提取高速處理系統(tǒng).pdf》資料免費下載
    發(fā)表于 10-19 14:35 ?1次下載
    基于8片TMS320C6416的衛(wèi)星<b class='flag-5'>圖像</b><b class='flag-5'>目標</b><b class='flag-5'>提取</b>高速處理系統(tǒng)

    項目案例:基于YOLO的鋁型材表面缺陷識別

    方法多采用傳統(tǒng)機器視覺算法,通過圖像形態(tài)學處理與特征提取進行缺陷識別,往往需要根據(jù)不同形態(tài)的缺陷特征,設(shè)計不同的特征提取與識別算法。鋁型材表
    的頭像 發(fā)表于 10-08 15:30 ?998次閱讀
    項目案例:基于YOLO的鋁型材表面<b class='flag-5'>缺陷</b>識別

    基于改進FCOS的表面缺陷檢測算法

    首先使用深度卷積神經(jīng)網(wǎng)絡提取輸入圖像特征圖,然后使用分類網(wǎng)絡、回歸網(wǎng)絡、中心度網(wǎng)絡對特征圖上的所有特征點逐個進行檢測,分類網(wǎng)絡輸出原圖上以此特征點為中心的區(qū)域所含缺陷類別,回歸網(wǎng)絡輸出
    發(fā)表于 09-28 09:41 ?394次閱讀
    基于改進FCOS的表面<b class='flag-5'>缺陷</b><b class='flag-5'>檢測</b>算法