機器視覺小教室 Aurora Vision Studio 入門篇【03】簡易影像處理、資料流架構概念

弘翔精密科技股份有限公司
1粉絲
2024年10月14日
機器視覺小教室 Aurora Vision Studio 入門篇線上課程連結
https://www.urvision-tw.com/article_detail/25.htm
本篇利用一個簡單的影像處理範例,利用二值化、Blob、形態學、面積篩選、計算區塊中心、統計個數,來練習資料流程式設計的基礎概念。
我們繼續下一節的課程
我們來寫一個簡單的影像處理
剛才上次有提過怎麼把這個Digivision把它拉進來
把它拉進來以後
就是第一個要學會怎麼儲存這個專案
儲存專案在這個畫面的左上角
左上角這邊有一個存檔圖示
這個可能對現在年輕人
可能年輕人不知道這是什麼東西
這個叫做磁片
就是年輕人現在都用手機有沒有磁片
但是這個圖示你非常的大家用的很習慣
按下去以後就會出現這個儲存專案的視窗
顧名思義這個是資料夾的圖示
就是開啟你上次儲存的專案
這個叫New
就是你放棄你現在顯示的專案
你要開一個新的
同樣的功能別在這個File這裡找到
File的Save就是儲存
我現在沒有還沒有命名
所以我按Save它就會彈出來
叫我重新命名
然後Save Earth就是我想要儲存新的專案檔
New就跟剛才那個是一樣
Open
這邊還有這三個Open原廠的範例
Open原廠的範例非常的多
你可以去看
就是初學者你可以看這個Tutorial
它裡面會介紹這個基礎功能
它按下去以後
它會問我
因為我現在還沒存檔
所以等一下再按
我現在要存檔按
存下去以後
它會問我說你要存在哪裡
我把它存在桌面
存在桌面
然後我要開一個新的資料夾
因為它可能會有一些附加的檔案
我不想讓它閃在桌面
開一個新資料夾
然後這個新資料夾叫ABC
放在那個裡面
Desktop ABC
然後它的預設的檔名叫做Program.av
AV就是Origin
PR或者是Project
Program.OriginProject
那就按存檔
存完了以後
你可以到你這個桌面去看一下
好那這個桌面這個ABC的資料夾
打開以後就會出現這個
AV Project
那AV Project是這個
是它的專案的
檔案
那你下次
你就直接點兩下這個
它就自動把這個Studio打開
或者說你先開啟Studio
再按這個讀取
然後直向它就可以打開
好那它還有一些附加的
是它自己生出來
那這個結構不要去動
因為你動的時候
它的專案會開不起來
好那這個AV View
AV View的話是它放一些
顯示的一些資訊
UI的東西
那AV Code
其實它裡面的那個程式
Source Code
腳本的Source Code
那這個Source Code
其實我那個用記事本是可以看到
我目前裡面有一個DTV局
那這個Source Code
等到你寫完以後
你可以你如果不想讓人家知道的話
你可以不要把這個專案給別人
你就把它輸出成這個執行檔就可以
好那接下來的
就是我們要來玩這個影像處理
好影像處理我們現在有一個相機
好取相
好那我現在
放了一個一塊錢
放了一個一塊錢在這裡
好這個一塊錢
有些人如果沒有相機
有些人沒有相機
那我叫取一張影像
好那取一張影像
我可以把這個影像手動把它存下來
手動把它存下來
我可以按這個右鍵
對這個影像按右鍵
Save Image As
那它有兩個Save
一個是Save Image
一個是Save View
Save View的話就是
如果你有畫一些圖層在上面
會把那個圖層也一起存下來
不要我要原始檔
我要Save Image
好按下去了以後
它就會彈出這個存檔視窗
好存檔視窗
那你的因為你已經有這個專案
專案叫ABC
所以我就當然它會
自動開啟這個ABC的資料夾
好那
我可以存這個Data
我把這個圖檔放在這個Data裡面
然後ABC的Data
然後圖檔的檔名叫什麼
然後它有儲存內建幾個格式
比如說PNG、BMP、JPG
或者說
這個Arabic它自訂的格式
那我們都喜歡用這個
你如果想要原始
原始原位你就用BMP
可是這個檔案比較大
所以我們用JPG
那你就輸入01
然後按存檔
這個圖
圖就會在這
那你如果沒有相機的話
你就可以讀這個圖
那我現在在
放到別的地方
我在存檔
然後它自動會跳0.2
這個設計還蠻貼心的
你剛才如果用01的話
它自動會跳0.2
我在存檔
好停掉
停掉就假設你沒有相機怎麼玩
就是我們第二個功能就是File
取像的第二個功能
就假設你沒相機的人
你可以把這個File拉進來
好拉進來以後
它會問你說
你是要用這個load img
我們最常用是第二個跟第三個
然後我兩個都示範
第一個
叫做單張讀檔
單張讀檔
insert選進來
選進來我要讀檔
啊這個相機我
等一下介紹一個功能
我可以不急著砍掉
不急著砍
砍掉我的ID要重設
所以我可以按右鍵
按右鍵
按滑鼠右鍵有點這個Disable
Select Instance
好點下去了以後
它會把它Disable
那下次你還想要用的時候
你再按右鍵
選到Enable
它又再變亮起來
Disable
我們像我們在寫程式的
都我們寫到一半
這個功能暫時我不要用
我不是可以撇撇
像C++C效果撇撇
然後把它mark掉
那有的程式語言是什麼
槓槓還有星星的都有
然後這個是mark掉的功能
我只想要load img
load img
點然後它會出現問號
所以你這個斜線地方就要選
選這個01 img
選了以後這個路徑都會跑出來
你就可以拉到這邊來
然後按一下
因為它這是單張
單張所以一樣的
按下這程式就關掉
但是這圖就可以讀進來
好讀進來以後
我們來觀察一下這個
這個檔名
檔名我們是用目前是用這個
絕對路徑
檔全域的絕對路徑
西朝什麼巴拉巴拉巴拉
然後Desktop
APC Data
好那我們也可以改成這個相對路徑
相對路徑就把你的Data
後面這個留著
把APC還有桌面西朝的改成一點
這樣就好了
那這什麼意思
因為我這個圖
我這個圖其實在這個專案的
相同資料夾的Data
我把它拉進
專案的一個點叫做相同資料夾的
Data的裡面的01
所以他就可以找到這個東西
所以我一樣按下去
還是一樣可以找到這個東西
那你如果要讀02的話
你就直接用改
02 Enter
按一下
你按這個跟按這個結果是一樣的
因為這個只跑一字而已
所以你按這個
那這個是單次執行
單次執行就是熱鍵叫F6
那你按的時候他會Hold在這個
程式的最下面
他會有一個綠色的棒棒
讓你在除錯的時候用
好那目前因為這個是
這就一個功能的一個結果是一樣
好那如果我要兩張一直換
兩張一直換的話我就把它刪掉
我們再把這個防範有拉進來
好然後你就要選到這個
Enumerate image
Enumerate這個叫做列舉
Insert
拉進來
列舉你就可以看到說
這個也是有齒輪的
所以因為你的資料夾
可能會有一大堆影響
所以他可以
你按下Play的話就一張一張幫你換
一張張幫你換
好那這個Directory
你叫設定
點他預設只是一個點
點然後你剛纔有記得有相對路徑
Data
然後這樣就可以了
我他會自己去搜集這個Data
Data裡面全部的讀檔
好那按Play
拉過來按Play
刷刷
你根本看不到因為他太快
好那你可以設左下角的設置Delay time
一秒
好這個
叫做Delay time
那Delay time的單位是mini second
所以一秒就是每隔一秒鐘
更新一次
啵啵
好結束
所以兩張圖啵啵結束
啵啵結束
好那如果你想讓他不要結束
不要結束這邊有個Repeat
Repeat把它改成True
改成True的時候就他就
啵啵啵啵啵啵
好那這個IP我把它關掉
那你想要顯示他現在是哪一個檔
這邊有個File path
或是File name這兩個都拉出來看看
File path就是他目前讀的是哪一個檔
然後File name就是檔名
然後覺得太慢了
所以就0.5
你馬上改馬上就有效
啵啵啵啵啵啵
好這時候我們就可以開始來玩這個影像處理
好影像處理第一個要學的就是二值化
好所以拉到這個下面
二值化在這個
這個地方
Image possession這個Threshold image
然後這個把它拉過來
拉過來通常我們習慣
處理的功能
你取向的功能把它放在這個
這個程式這邊有Acquire
那處理的功能把它放在Process
比如說讀資料處理讀資料處理
這個你如果把它全部擠到Acquire
會不會怎麼樣不會怎麼樣
那全部擠到Process會不會怎麼樣
也不會怎麼樣
只是他為了增加你程式的可讀性
他故意把它分成兩塊
好那這個我剛才把它Color Process
他就問說你要選擇
Threshold image的哪一個功能
我要選的是To Region的Intensity
他功能很多你就選擇
這個是通常左上角那個都是最簡單的
好那這個功能把Insert
Insert進來這個功能
他是把這個影像
把這個影像砍一個靶子
然後變成這個Region這個格式
變成Region這個格式
這個Region的格式
是跟這個影像一樣長寬一樣大
但是有暗的地方會塗顏色
Off的地方會沒有顏色
就是0或1
他相當於一個Mask的這個概念
好那怎麼用
我就把這個影像把它拉過來
好先執行一張
好那我要怎麼砍這個靶子
靶子剛纔有提過
我只要知道他歸界
好滴管滴下去背景都是25
好前景的地方
大概可能100
我放大看一下就是
嗯
120可能120吧
120好所以我們馬上試就是左下角
這邊有一個最小值還有一個最大值
最小值的Minimum
反正你超過128
他目前預設值128
超過128
他就會算成是暗
好Maximum我就不用
等一下再調有需要再調
好那我們就把這個Region
拉到圖上面去
好那我們就可以看到說
這個Region長這樣
Region長這樣
然後因為背景比較背景是超過128
所以背景是暗
然後前景是Off
我們就是沒有滴動的動
好那我們來看一下說
這個
到這個地方
這個地方有點髒髒
那我想要看一下能不能調整
所以我在滴管滴過去
1 1 3 5 1 3 5
所以表示我這個
我這個裡面有點反光吧
所以我這個
髮質可以再調
好那你要調的時候
當你停在這個暫停的狀態
停在這樣暫停的狀態
你按這個單次執行
好單次執行
好好你要看這一張
把它暫停在這邊
那你只要改這個綠色光放
前面的任何的參數
他馬上會幫你重算
好我們去調這個髮質
好往下調不對
所以往上調
調到
150
好160
170
好這樣子的話我們就可以把這個
背景塗上白色
但是我們背景
我們想要把這個銅版圖能擺的反過來
圖怎麼辦
反過來圖的話
那當然就是我們要改用Messina
所以這個把它取消改用Messina
178設在Messina這裡
那就會變成銅版被塗起來
碰碰碰碰
銅版被塗起來
好那這個是一個非常簡單的影像
就是我學影像處理第一個步驟
就是要玩二值化
然後這個二值化的話
很常用就是把二值化結果塗成這個
region的格式
好這個region的
總尺寸就是1602x120
它會跟影像一模一樣大
為什麼它會跟影像一模一樣大
因為這個region是這個影像審出來的
所以它會跟影像一模一樣大
這pixel by pixel是對齊的
好它是對齊的
好那接下來是我們
我們如果要計算
我們要計算這個
這個裡面有幾個錢幣
好那我因為這圖檔只有只有一個錢幣
好所以我們要改改回用到相機
就是我這個disable
然後再你一disable
因為這個二值化它是從這個圖
圖片這邊拉過來
所以你圖片被disable
它下面就自動也都disable
所以我就把相機這個再切過來
然後把這相機解開
好那把這個相機的圖再拉回去
那region調整
好這個就是即時的畫面
好那我們想要在這個下面顯示
這個圖檔就不要了
顯示說這個錢幣的個數
怎麼顯示這個錢幣的個數
好我現在有兩個錢幣
怎麼顯示這個錢幣的個數
這個感覺把紙還要再調一下
190好用190
好顯示錢幣的個數
我們就要用到這個叫做flop
flop跟我們左邊
region analysis是這裡
就我們已經有region
所以我們要去分析這個region
好這個叫做分割region
分割region割出來的東西就叫flop
flop寫的
flop就是說一塊塊塊狀的
區塊狀的東西
在影像處裡有這個專有名詞
好split
split region into flops
我們用左上角的工具
然後insert
把這個region牽起來
然後再把這個flop
flop他就會顯示成這個region的array
也就是說我會有一塊一塊的region
拉上去那拉上去的執行
好執行的時候你就會看到有個2
表示他有兩個
這region可以被切成兩個
好那有時候他會跳
有時候會跳
他為什麼會跳
因為有雜訊
他有時候兩個搞不好有時候是三個
那我們就可以去3
然後我們可以看到底有幾個
這邊按右鍵
按右鍵對這些功能按右鍵輸出
輸出按右鍵property output
那這邊有個count
你可以去看這個property就是屬性
這些output他其實都有些屬性
然後按右鍵
你可以去看這屬性還有什麼指南位
好你可以找到這個count
按下去
還有這個area
按下去
好那我就可以分別對他做顯示
好count拉到下面總共有兩個
好的重複執行
有時候
按按按按按按按按按按
有時候會有三個出現
不是很頻繁的
有時候會有兩有時候兩個有時候三
好那把這個area拉到右邊
你就發現他有時候多一個小的
好但是你可以看到說
他大概這個area大概都是3萬多
好所以你要立足這些小雜訊
你可以在左下角這個南位這裡設定
minimum crop area
他目前是隻要有一個pixel
你就算了
好那因為我們這個
銅板大概都是3萬多
那我們就一直一直看著1萬
好比如說1萬以上纔算是個銅板
那這樣子的話
我們就永遠都會是兩個
這個2就很穩定不會跳
然後這個時候我們可以再來
三個
比較新的銅板跟VM
因為我現在沒有光源沒有大光
好四個
這樣就我們就可以玩這個
conquer的這個功能
當然這個程式非常簡單
他沒有自由
你把他扣在一起他怎麼會算來扣
這個
以後玩熟練各種影像處理技巧
再自己去自己去磨練
好那當然就是
我們這邊有這個小洞洞
小洞洞那
除了我去調這個
髮質讓他這個洞變少
有沒有其他的影像處理方法
有的
那怎麼弄呢
我們就要用到這個morph
morph叫做morphology
morphology在影像處理
他有個專有名叫形態學
好把它拉進來
那形態學的工具有補洞的功能
好我們來找一下補洞在哪裡
我們補洞
有個叫做feel region hole
feel region hole
好的把它點進來
點進來把每個blob
你只要有被成功變成blob
我就把它補起來裡面就不要有洞
好的我們就把
其他都不要我們就秀最後的結果
那這樣這個
錢幣都非常裡面的這個實行的
非常的乾淨
就會非常乾淨
好那這邊要介紹一個東西
我現在把這個
連結先關掉
我們來看一下
這個工具
他的input叫做region
output叫做region
好但是這個blob
我們來看一下滑鼠點叫做region array
那我剛纔不是有四個銅板
有四個銅板
那總共有四個region
四個region
你是不是要寫一個迴圈
我們通常會寫迴圈
就是怎麼寫的
4然後i等於0
然後i小於4
然後i++
然後裡面跑這個fear region
fear
叉叉叉叉叉然後
每一個都列舉然後region
中括弧i
對i會從0123然後
輪流的跑
好那這個動作在我們這個
這個圖控工具裡面不需要寫
就是他自己會幫我們做
怎麼做的其實很簡單
我們就把這個array帶array的
直接拉過來
連到這個沒有array的工具上
放開
他就自動
結果就會自動變array
那這個自動變array的這個
他會用這個雙箭頭表示
這個雙箭頭
你只要看到這個雙箭頭
代表他的輸入是是個array
但是這個工具本身並不是array
那他自動幫你一個一個丟進來
跑計算然後得到這個array的結果
好這個
這個就是一個圖控工具資料
也說我的data其實是依序
啵啵啵啵啵自動的被丟進來
好資料被啵丟進來
然後再啵丟進來
跑到這裡他是四個啵啵啵
有幾個就丟幾次
好這個是資料流的一個概念
就是你不用花太多的心思在這個
程式碼裡面
去寫一個沒有意義的迴圈
大部分的情況
你的迴圈就是一個取向的大迴圈
好那裡面有小迴圈資料上的迴圈
直接在資料上讓他自動去處理掉
好這個是需要習慣的地方
好那我們再列舉一下
就是說我們再來擺下這個應用
好那
我們這有一個想要說我想要算這個
這個錢幣的這個座標
錢幣的座標
好那錢幣的座標
座標是特徵
region的region
那feature裡面有什麼有center
所以我們找到這個
region mass center這個工具
在這裡
region mass center
把它拉進來
拉進來一樣
我們就故意來示範這個雙鍵頭
好所以我們有啵啵啵啵有四個
所以我們把它拉進來
所以他mass center也會啵啵啵啵有四個
好那這個輸出就會是一個point的2D
2D點
就是xy的座標
那他會中括代表的是一個array
那這array為什麼會在這個括號裡面
因為他
本來
本來是point的2D
是因為計算啵啵啵啵的關係
好拉上去
好並且把這個array
area不要我們顯示座標
那因為這個
2D點是可以跟同一個一起的
所以你如果拉到一個
空白的比例視窗
他會問你說
你要用圖形的方式顯示還是用文字
好這時候我們要顯示數字
所以我們只用text的方式去顯示
好執行
然後他就有四個座標
他會有四個座標
好的第一組座標
這是第二組座標
好那接下來
你怎麼知道這個第一組是誰
你怎麼知道第一組是誰
965435是誰
他當然就讀法練習傻瓜式的做法
我們可以看到這滑鼠
滑鼠在跑的時候
這個左上角這邊有個座標
我再一個一個看看
哪一個
去摸摸看哪一個是這個數字
要不就不用這樣
就是有兩個方法
第一個方法就是
我在這個地方
他這個上面有這個小箭頭
小箭頭
你把這個小箭頭把它打開
打開了以後
你可以去看
可以去看
總共有四個
然後你可以一個一個看
看他是哪一個
好那我們要看的是0
所以我們就看0
0的話他是這一個
好那這個小電筒就打開
就是我們把Mask Center跟Region
的小箭頭通通打開
好他就會同步一起更新
我們可以用index去指向說
他到底是哪一個
好那恢復的話你全部通通顯示
小箭頭關閉的時候你全部一起顯示
這是第一個方法
好那第二個方法就是
上面這裡
這邊有個小icon
Toggle display
Toggle display index next to image array element
然後你把它點下去
點下去以後
我的視窗上面就會出現這個
index的標籤
然後這樣就可以快速的
讓你去看這個index
好這個是0的index
這樣子的話我就可以在debug的時候
馬上知道說這個座標來自於誰身上
好那這個是我們今天
暫時先講到這裡
好那寫到一半的記得最後存檔
