<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
"); //-->

博客專(zhuān)欄

EEPW首頁(yè) > 博客 > LabVIEW實(shí)現PCB電路板坐標定位(實(shí)戰篇—2)

LabVIEW實(shí)現PCB電路板坐標定位(實(shí)戰篇—2)

發(fā)布人:美男子玩編程 時(shí)間:2022-06-22 來(lái)源:工程師 發(fā)布文章

1


項目背景


在機器視覺(jué)實(shí)際工程實(shí)踐中,有時(shí)使用NI Vision定義的默認坐標系進(jìn)行測量控制并不是很直接。例如,檢測目標并不總在固定的位置出現,而是在ROI區域內平移或旋轉,甚至有些時(shí)候必須通過(guò)平移、旋轉工作面上的檢測目標或通過(guò)移動(dòng)相機,對部件上的幾個(gè)不同部位分別進(jìn)行檢測才能完成任務(wù)。


這樣進(jìn)行圖像識別、處理是非常麻煩的,此時(shí)就需要對圖像進(jìn)行坐標校準。


使用機器視覺(jué)系統進(jìn)行測控時(shí),各種計算結果都需要基于坐標系來(lái)表示。平面坐標系可以使用坐標原點(diǎn)(Original)、橫軸的角度(Angle)以及縱軸的方向(Axis Direction)來(lái)表示。


當使用NI Vision提供的VI對所建立的機器視覺(jué)系統進(jìn)行校準后,所得到的像素和世界坐標之間的映射關(guān)系是建立在默認校準坐標系基礎之上的。默認情況下NI Vision的系統校準VI按照以下原則定義校準坐標系:

1、坐標原點(diǎn)。若手工輸入一系列校準點(diǎn),則坐標原點(diǎn)被置于用戶(hù)定義的坐標原點(diǎn),通常是兩個(gè)方向上坐標值均為最小的點(diǎn)中心。若使用校準點(diǎn)陣,則以左上角點(diǎn)中心為坐標原點(diǎn);

2、橫軸的角度為0。亦即橫軸由點(diǎn)陣首行各點(diǎn)確定的矢量而定;

3、縱軸的方向為間接方向(Indirect)??v軸方向與笛卡兒直角坐標系的縱軸方向(Direct)相反。


下圖給出了NI Vision確定默認坐標系的示意圖,其中左圖為校準點(diǎn)陣的世界坐標系,右圖為某種可能的圖像像素坐標系:


圖片


舉個(gè)例子,下圖中的3個(gè)工件在視場(chǎng)中分別位于不同的位置并且有旋轉。為了能準確測量小孔的位置和大小,可以對每個(gè)工件自動(dòng)檢測其左邊緣和上邊緣,并以它們的交點(diǎn)為坐標原點(diǎn),以上邊緣為x軸,定義間接類(lèi)型的坐標系。這樣一來(lái),雖然每個(gè)工件在視場(chǎng)中的位置不同,但合格工件中的小孔相對于每個(gè)自動(dòng)定義的坐標系位置具有一致性。如果機器視覺(jué)算法相對于每個(gè)自定義的坐標系放置檢測小孔的ROI,無(wú)論工件如何在視場(chǎng)中變化,都能實(shí)現自動(dòng)檢測,直接返回測量結果。


圖片

為檢測過(guò)程自動(dòng)定義參考坐標系



2


坐標校準原理



機器視覺(jué)系統實(shí)現坐標校準有3種方法:


1、角度法


角度法適合沒(méi)有畸變且新坐標原點(diǎn)仍位于圖像中的機器視覺(jué)系統,它通過(guò)設定新坐標系的坐標原點(diǎn)、橫軸與原坐標系橫軸之間的旋轉角以及新坐標系縱軸的方向來(lái)設置新坐標,如下圖所示:


圖片


2、雙點(diǎn)法


雙點(diǎn)法適合有畸變且可以直接從圖像中確定新坐標原點(diǎn)位置的機器視覺(jué)系統。它通過(guò)指定新坐標原點(diǎn)和一個(gè)位于坐標系橫軸正方向上的點(diǎn)以及坐標系的類(lèi)型(直接或間接)來(lái)設定新坐標系。坐標原點(diǎn)和橫坐標上的點(diǎn)所構成的直線(xiàn)與圖像水平方向的夾角指明了新坐標系的旋轉角。


例如,下圖中A、B兩點(diǎn)確定了坐標系的橫軸,且A點(diǎn)為坐標原點(diǎn)。由于坐標系為間接類(lèi)型,因此,Y'軸與X'軸夾角為270°。由于在畸變的系統中,當被測目標沿著(zhù)水平或垂直方向移動(dòng)時(shí),仍能相對準確地確定其上的邊緣,而基于兩個(gè)邊緣點(diǎn)就可以確定穩定的坐標系,所以這種方法比角度法對畸變系統有更強的適應性。


圖片


3、三點(diǎn)法


有時(shí)候機器視覺(jué)系統不僅有畸變,而且被測目標還會(huì )在圖像中平移、旋轉。這種情況下可以使用多點(diǎn)法來(lái)設置新坐標系。多點(diǎn)法先使用兩個(gè)點(diǎn)確定一條坐標軸及其方向,但并不將這兩點(diǎn)中的一點(diǎn)作為坐標原點(diǎn),而是用第三點(diǎn)與前兩點(diǎn)所成直線(xiàn)的垂直交點(diǎn)來(lái)確定坐標原點(diǎn)。獲得坐標原點(diǎn)后,再基于坐標系的類(lèi)型,就可確定另一坐標軸,如下圖所示:


圖片


舉個(gè)例子,下圖中(左圖)的坐標系以標尺1cm處的點(diǎn)為原點(diǎn),7cm處的兩點(diǎn)作為橫軸正方向上的一點(diǎn)來(lái)確定坐標系橫軸。由于指定坐標系的縱軸為間接方向,因此坐標系位置可以被唯一確定。在右圖中很難直接找到合適的坐標原點(diǎn),因此先檢測左側和頂端的目標邊緣,隨后用頂端邊緣線(xiàn)段的起止點(diǎn)AB確定橫軸,而左側邊緣中的C點(diǎn)或D點(diǎn)與橫軸的垂直交點(diǎn)O為原點(diǎn),最后根據縱軸的方向就可以唯一確定坐標系。


圖片

雙點(diǎn)法和三點(diǎn)法確定坐標系



3


坐標校準方法



Nl Vision使用IMAQ Set Calibration Axis Info 2函數為圖像重新設置坐標系。該函數位于LabVIEW的視覺(jué)與運動(dòng)→Vision Utilities→Calibration函數選板中,如下圖所示:


圖片


函數說(shuō)明及使用可參見(jiàn)幫助手冊:


圖片


NI Vision使用位于視覺(jué)與運動(dòng)→Machine Vision→Analytic Geometry函數選板中的IMAQ Build CoordSys(Points)封裝了雙點(diǎn)法和三點(diǎn)法,開(kāi)發(fā)時(shí)可直接根據目標上的特征點(diǎn),調用該VI來(lái)確定參考或測量坐標系,如下圖所示:


圖片


具體使用可參見(jiàn)幫助手冊。



4


環(huán)境搭建



基礎環(huán)境搭建請參見(jiàn):LabVIEW軟件、驅動(dòng)安裝及編程方法(理論篇—2)


除此之外,還需要安裝:OpenG Libraries驅動(dòng),OpenG庫是由OpenG社區創(chuàng )建并根據BSD-3-Clause許可證(獲得Open Source Initiative批準)共享的數百個(gè)開(kāi)源VI的集合。


可直接在VI Package Manage中進(jìn)行安裝,如下所示:


圖片



5


項目實(shí)踐



接下來(lái)根據過(guò)孔和PCB邊角實(shí)現下圖PCB電路板坐標定位,達到無(wú)論在任何角度,均可定位PCB的效果。


圖片


程序設計思路如下:

  • 程序一開(kāi)始先使用IMAQ Create分別在內存中為電路板一個(gè)角的模板圖像(對應corner.png圖像文件)、電路板上的小孔模板圖像(對應hole.png圖像文件)以及應用程序處理過(guò)程中需要的臨時(shí)緩沖分配空間,并由IMAQ ReadFile把相應圖像文件中的數據讀入內存。

  • 緊接著(zhù)使用IMAQ Learn Pattern 4對兩個(gè)模板的特征進(jìn)行學(xué)習。

    由于A(yíng)ngle Range參數被設置為0~360°,因此,無(wú)論目標圖像在平面上旋轉多少度,函數都能按照學(xué)習到的特征準確地將模板與目標匹配。

  • IMAQ Set Simple Calibration 2以從文件Roundcard01.tif中讀入的圖像為模板,指定了縱橫兩個(gè)方向上像素間距分別代表世界坐標中的0.15mm。

    當然,此時(shí)假定相機垂直于觀(guān)測目標,且鏡頭畸變可忽略不計。

  • 一旦上述準備工作就緒,For循環(huán)就逐一對roundcard文件夾中的各個(gè)文件所保存的目標圖像進(jìn)行分析。

    在讀入目標圖像后,IMAQ Match Pattern 4會(huì )先根據學(xué)習到的特征匹配電路板的一角。

    Parameters參數指定了匹配時(shí)只需要找到一個(gè)目標,且假定目標圖像相對模板來(lái)說(shuō)只在±45°范圍內旋轉。

    找到電路板一角后,OverlayPatternMatchingResults會(huì )在目標圖像中標注出所匹配到的電路板一角的中心,并用矩形無(wú)損圖層框出匹配結果。

  • 為了能在后續測試過(guò)程中,無(wú)論圖像在視場(chǎng)中做何變化,都能直接得到電路板小孔相對于其一角的距離,需要重新設置以電路板一角為參照的系統校準坐標系。

    IMAQ Set Calibration Info將之前基于RoundCard01.tif中的圖像設置的校準信息應用到For循環(huán)正在處理的目標圖像中。

    IMAQ Set Calibration Axis Info用來(lái)重新指定校準坐標系。

    新的坐標系原點(diǎn)設定在所匹配到的電路板一角中心處。

    x軸旋轉角度由模板匹配過(guò)程中,識別到的目標圖像旋轉角度確定。

    需要注意的是,當坐標系縱軸設定為直接坐標方向時(shí),x軸相對于默認坐標系縱橫的旋轉角度為負值,反之為正值。

  • 設定好新的校準坐標系和校準信息后,就可以使用IMAQ Match Pattern 4匹配需要在電路板上尋找的小孔位置。

    與之前匹配電路板一角的情況類(lèi)似,當匹配過(guò)程找到小孔的位置后,Overlay Coordinate System和Overlay Pattern Matching Results將在圖像中繪制新定義的坐標系縱軸和橫軸,標記出小孔的位置并框出對小孔的匹配結果。

    一旦得到小孔在圖像中的位置,就可以依據校準信息和像素坐標計算得到小孔在校準坐標系中的世界坐標。

    這一工作由IMAQ Convert Pixel to Real World來(lái)完成。


程序實(shí)現如下所示:


圖片


下面顯示了對幾個(gè)目標圖像進(jìn)行檢測時(shí)的圖像顯示情況,以及某一目標圖像中測量得到的小孔像素位置坐標和其在校準坐標系中的世界坐標。


*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)


關(guān)鍵詞: LabVIEW

相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>