<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          基于模式匹配的PCB基準標記檢測

          共 4223字,需瀏覽 9分鐘

           ·

          2021-10-30 14:42

          點擊下方AI算法與圖像處理”,一起進步!

          重磅干貨,第一時間送達

          這可能很容易忘記,但我們的電子設(shè)備內(nèi)部發(fā)生的一切并不是魔法。
          有些產(chǎn)品是如此復(fù)雜,以至于沒有一個人能夠準確地理解每個零件是如何相互作用的,而制造過程是存在的,因此出廠的產(chǎn)品能夠正常工作,這一想法讓我感到驚訝。任何涉及集成電路的東西都屬于這一類。
          如果你仔細觀察了一塊電路板(PCB),你可能會注意到一些小的金色磁盤,它們沒有電連接到任何其他結(jié)構(gòu)上。這些是基準標記:它們的目的是讓視覺系統(tǒng)盡可能容易地找到它們,在圖像中定位PCB。
          在本文中,我們將使用OpenCV的matchTemplate函數(shù)完成定位基準標記的步驟。你可以在此存儲庫中找到代碼和圖像。
          為什么PCB需要基準標記?
          在PCB組裝過程中,自動化系統(tǒng)將在焊接之前,將分立元件(芯片、電容器、連接器等)放置在PCB上各自的位置。
          基準標記的檢測允許在PCB上精確放置元件。放置后,自動檢查系統(tǒng)將檢查是否所有東西都在其應(yīng)放置的位置。再次,基準標記將提供將物理點從PCB圖紙(以毫米為單位)轉(zhuǎn)換為圖像點(以像素為單位)所需的參考點。

          預(yù)處理

          我們首先將圖像轉(zhuǎn)換為灰度,因為我們依賴于基準標記的不同形狀,而不是它們的特定顏色。這是通過OpenCV的cvtColor函數(shù)完成的。
          該PCB上的基準標記由兩個同心圓組成,其各自的直徑分別為26和68像素。
          手動測量內(nèi)圓盤的直徑:
          OpenCV的matchTemplate函數(shù)需要目標對象的模板圖像。在這種情況下,它將是一個基準標記的圖像。
          我們可以裁剪圖像中三個基準標記中的一個,并將其用作模板,但這種方法與真實基準標記容易有微小外觀差異。相反,我們將創(chuàng)建理想基準標記的合成圖像:
          #?創(chuàng)建一個合成基準圖像
          ??pattern_sizeHW?=?[args.fiducialOuterDiameterInPixels,?args.fiducialOuterDiameterInPixels]
          ??if?args.fiducialOuterDiameterInPixels?%2?==?0:??#?確保圖案大小是奇數(shù)
          ??????pattern_sizeHW[0]?+=?1
          ??????pattern_sizeHW[1]?+=?1
          ??fiducial_pattern?=?np.zeros(pattern_sizeHW,?dtype=np.uint8)
          ??cv2.circle(fiducial_pattern,?(pattern_sizeHW[1]//2,?pattern_sizeHW[0]//2),?args.fiducialOuterDiameterInPixels//2,?70,?cv2.FILLED)??#?外層是深灰色
          ??cv2.circle(fiducial_pattern,?(pattern_sizeHW[1]//2,?pattern_sizeHW[0]//2),?args.fiducialInnerDiameterInPixels//2,?255,?cv2.FILLED)??#?內(nèi)部是白色的
          ??#?標準化模式圖像
          ??standardized_fiducial_pattern?=?(fiducial_pattern.astype(np.float32)?-?fiducial_pattern.mean())/fiducial_pattern.std()
          基準標記圖像被標準化為零平均值和單位標準差.

          模式匹配

          我們現(xiàn)在擁有調(diào)用matchTemplate所需的所有成分:
          #?模式匹配
          match_img?=?cv2.matchTemplate(grayscale_img.astype(np.float32),?standardized_fiducial_pattern,?cv2.TM_CCOEFF_NORMED)
          #?用于可視化,填充0以獲得與原始圖像相同大小的圖像
          padded_match_8bits_img?=?np.zeros((img_shapeHWC[0],?img_shapeHWC[1]),?dtype=np.uint8)
          padded_match_8bits_img[fiducial_pattern.shape[0]//2:?fiducial_pattern.shape[0]//2?+?match_img.shape[0],
          ????fiducial_pattern.shape[1]//2:?fiducial_pattern.shape[1]//2?+?match_img.shape[1]]?=?(128?*?(match_img?+?1.0)).astype(np.uint8)
          需要注意的是,我們用零填充得到的匹配圖像,使圖像具有與原始圖像相同的尺寸。這是必要的,因為matchTemplate基于卷積,輸出圖像具有尺寸( W???-W???????+1, H???-H???????+1 ).
          在我們的例子中,模式圖像具有尺寸(69,69),matchTemplate的輸出比原始圖像的尺寸窄68像素,短68像素。為了補償這種影響,我們對圖像外圍的34個像素進行了零填充。我們還重新調(diào)整了匹配圖像的灰度級別,從[-1,1]到[0,255],以便于可視化。
          我們感興趣的是匹配圖像的強度峰值,即上圖中的亮點。決定哪些亮點是我們正在尋找的基準標志,關(guān)鍵在于設(shè)置正確的閾值。
          與手動設(shè)置閾值不同,我們將使用這樣一個事實,即我們知道此匹配圖像中應(yīng)該有三個基準標記,因此應(yīng)用正確的閾值應(yīng)該會產(chǎn)生一個正好有三個斑點的二值圖像。
          為此,我們將逐漸降低閾值,從255開始計算得到的閾值圖像中的斑點。當我們到達三個斑點時,我們停下來。
          通過降低閾值直到找到預(yù)期數(shù)量的對象來找到最佳閾值:
          #?找到最優(yōu)閾值,以檢測預(yù)期的基準數(shù)
          blob_detector?=?blob_analysis.BinaryBlobDetector()
          optimal_threshold?=?None
          optimal_seedPoint_boundingBox_list?=?None
          optimal_annotated_blobs_img?=?None
          for?threshold?in?range(255,?1,?-1):
          ????_,?thresholded_img?=?cv2.threshold(padded_match_8bits_img,?threshold,?255,?cv2.THRESH_BINARY)
          ????#?計算blobs的數(shù)量
          ????seedPoint_boundingBox_list,?annotated_blobs_img?=?blob_detector.DetectBlobs(thresholded_img)
          ????logging.info("threshold?=?{};?len(seedPoint_boundingBox_list)?=?{}".format(threshold,?len(seedPoint_boundingBox_list)?))
          ????if?len(seedPoint_boundingBox_list)?>=?args.numberOfFiducials:
          ????????optimal_threshold?=?threshold
          ????????optimal_seedPoint_boundingBox_list?=?seedPoint_boundingBox_list
          ????????optimal_annotated_blobs_img?=?annotated_blobs_img
          ????????break
          logging.info("The?optimal?match?threshold?is?{}.?The?number?of?found?blobs?is?{}".format(optimal_threshold,?len(optimal_seedPoint_boundingBox_list)))

          變換矩陣的計算

          PCB平面上的參考點(以毫米為單位)和它們在圖像中的各自位置(以像素為單位)之間的對應(yīng)關(guān)系是計算單應(yīng)矩陣所需的,即允許我們將以毫米為單位的坐標系轉(zhuǎn)換為以像素為單位的坐標系的變換矩陣。利用這個變換矩陣,我們可以標注圖像。
          上面的注釋圖像證實了三個基準標記被正確找到,并且計算的變換矩陣是準確的?,F(xiàn)在可以裁剪圖像的任何區(qū)域,其中應(yīng)該有我們想要檢查的給定組件。
          在制造環(huán)境中,要檢查的對象在輸送機上移動是很常見的。我們不能假設(shè)被檢查的物體總是精確地位于相對于攝像機的同一位置。
          通過檢測基準標記計算出的變換矩陣允許我們檢索PCB上給定的感興趣區(qū)域。
          我們剛剛做的是自動化檢查流程的第一部分。這可能不是最困難的部分,但肯定是最關(guān)鍵的部分:如果對象定位失敗,其他任何事情都沒有意義。
          下一次,當你看到PCB時——提醒自己它不是一個神奇的人工制品,而是一個工程奇跡——試著找出便于組裝和自動檢查的基準標記。

          [1] In computer vision, a blob is a cluster of connected pixels.
          努力分享優(yōu)質(zhì)的計算機視覺相關(guān)內(nèi)容,歡迎關(guān)注:

          交流群


          歡迎加入公眾號讀者群一起和同行交流,目前有美顏、三維視覺計算攝影、檢測、分割、識別、醫(yī)學影像、GAN、算法競賽等微信群


          個人微信(如果沒有備注不拉群!
          請注明:地區(qū)+學校/企業(yè)+研究方向+昵稱



          下載1:何愷明頂會分享


          AI算法與圖像處理」公眾號后臺回復(fù):何愷明,即可下載。總共有6份PDF,涉及 ResNet、Mask RCNN等經(jīng)典工作的總結(jié)分析


          下載2:終身受益的編程指南:Google編程風格指南


          AI算法與圖像處理」公眾號后臺回復(fù):c++,即可下載。歷經(jīng)十年考驗,最權(quán)威的編程規(guī)范!



          下載3 CVPR2021

          AI算法與圖像處公眾號后臺回復(fù):CVPR,即可下載1467篇CVPR?2020論文 和 CVPR 2021 最新論文


          瀏覽 44
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  91麻豆精品国产91久久久久久 | 91麻豆国产福利 | 午夜理理伦电影A片无码蜜桃av | www.日本特黄24小时免费 | 在线免费a∨ |