[OpenR8 解決方案] Image_FindBlob (找出影像中的物體)

 

 

 

一、Image_FindBlob

 

此解決方案目的是用於在影像中找出物體。方法是透過連通區域標記法提取出特徵  blob,再進一步將物體過濾出來。

 

此方法主要流程如下圖1。影像中找出物體的範例示意圖如下圖2

 

圖1.流程圖.png

圖1.流程圖

 

圖2.左圖原圖,右圖經由此方案流程找物體.png

圖2.左圖原圖。右圖經由此方案流程找物體

 

解決方案的資料夾包含三種流程檔案。以下章節分別個別介紹。

 

 

二、FindBlob.flow

 

【開啟 R8.exe】=>【檔案】=>【開啟】=>【載入 solution/Image_FindBlob】。如下圖3。

 

3.png

圖3. FindBlob.flow 示意圖

 

流程由上至下:

 

  • 【1 影像_開啟】

開啟想要讀取的影像。如下圖4。選擇圖的方式可見下圖5。

 

變數名稱

名稱

 

用途

影像檔案名稱(字串)

file name

 

sample.png

讀取 sample.png 的影像。此變數為名稱為  file name。

如果想要換其他測試的影像。請將值改為欲測試的影像路徑名稱。

影像(影像)

SampleImage

 

 

將讀進來的影像存至此變數。

 

 

圖4.流程之影像開啟.png

圖4.流程之影像開啟

 

圖5.影像_開啟選擇欲讀取的檔案.png

圖5.影像_開啟選擇欲讀取的檔案

 

  • 【2 影像_顯示】

將讀進來的影像顯示出來。如下圖6。

 

變數名稱

名稱

用途

影像(影像)

SampleImage

 

選擇想要顯示的影像變數。SampleImage 為流程的1讀取影像進來所存的變數。

縮放比例(整數)

 

 

顯示圖的百分比。值為200表示200%(圖片放大一倍)、50表示50%(圖片縮小一半),以此類推放大縮小。

視窗標題(字串)

windowTitle

SampleImage

顯示影像的視窗的標題。視窗名稱為 SampleImage 。

 

圖6.顯示原圖.png

圖6.顯示原圖

 

 

 

 

 

 

 

  • 【3 影像_二值化】

將讀進來的影像做二值化。影像超過某一個值,那個地方就是顯示成白色。反之,

小於某一個值,那個地方就顯示成黑色。如下圖7。值調高白色區域會變少,值調

小,白色區域會變多。

 

變數名稱

名稱

用途

影像(影像)

SampleImage

 

選擇想要做二值化的影像變數。SampleImage 為流程的1讀取影像進來所存的變數。

閾值(整數)

gray value

110

 

二值化影像(影像)

Binarize Image

 

將做完二值化處理的影像存至名稱為 Binarize Image 的變數。

 

圖7.左原圖右二值化結果.png

圖7.左原圖,右二值化結果

 

  • 【4 影像_顯示】

顯示影像做完二值化的結果。如上圖7右圖。

 

變數名稱

名稱

用途

影像(影像)

Binarize Image

 

選擇想要顯示的影像變數。

Binarize Image 為流程的3做完影像二值化所存的變數。

縮放比例(整數)

 

 

顯示圖的百分比。值為200表示200%(圖片放大一倍)、50表示50%(圖片縮小一半),以此類推放大縮小。

視窗標題(字串)

windowTitle

Binarize Image

顯示影像的視窗的標題。視窗名稱為 Binarize Image。

 

  • 【5 影像_找物體】

設定要找物體的影像。接著設定要找物體的條件,例如:長、寬、面積等。

最後將結果訊息存在 Json 的變數,以及結果圖存至影像到的變數。如下圖8圖9。

備註:此一流程前一步驟為二值化,可以自行替換成其他過濾方法,先將物體前後景分離。

 

變數名稱

名稱

用途

影像(影像)

Binarize Image

 

選擇想要找物體的影像變數。輸入已做二值化的影像來找物體。

啟用最小 X (布林)

 

 

 

最小X(整數)

 

 

 

啟用最大 X (布林)

 

 

 

最大X(整數)

 

 

 

啟用最小 Y (布林)

 

 

 

最小 Y (整數)

 

 

 

啟用最大 Y (布林)

 

 

 

最大 Y (整數)

 

 

 

啟用最小區域(布林)

True

True

設定最小面積閾值的開關。

最小區域(整數)

MinArea

1000

找出來的物體的最小面積閾值

如果想要找的物體面積比較大,此值就調高。反之,則調小。

啟用最大區域(布林)

 

 

 

最大區域(整數)

 

 

 

啟用最小填充率(布林)

 

 

 

最小填充率(雙精度浮點數)

 

 

 

啟用最大填充率(布林)

 

 

 

最大填充率

(雙精度浮點數)

 

 

 

Json(Json)

Output Json

 

輸出的結果,找出物件在影像中所在的區域座標。

影像從(影像)

SampleImage

 

 

影像到(影像)

Output Image

 

變數為 Output Image 的影像

此影像是將找出物體的結果畫出來。

型(字串)

Type

Defect

找出物體的類型名稱。

 

圖8.找出來的物體訊息.png

圖8.找出來的物體訊息

 

圖9.找物體的結果圖.png

圖9.找物體的結果圖

 

  • 【6 Json_列印】

將字串訊息 Json 顯示在 dos 視窗上。

如上圖8。顯示找物體的結果訊息。

 

變數名稱

名稱

用途

json(Json)

Output Json

 

顯示上面[影像_找物體]的結果訊息 Output Json

 

  • 【7 影像_顯示】

顯示影像,影像為找物體的結果。如上圖9。

 

變數名稱

名稱

用途

影像(影像)

Output Image

 

選擇想要顯示的影像變數。

Output Image 為找物體的結果。

縮放比例(整數)

 

 

顯示圖的百分比。值為200表示200%(圖片放大一倍)、50表示50%(圖片縮小一半),以此類推放大縮小。

視窗標題(字串)

windowTitle2

Output Image

顯示影像的視窗的標題。視窗名稱為 Output Image。

 

  • 【8 影像_儲存】

將找出物體的結果圖儲存下來。

 

變數名稱

名稱

用途

影像(影像)

Output Image

 

要儲存的影像變數。

影像檔案名稱

(字串)

Output File Name

output.png

儲存影像的檔案名稱。

 

【9 等待】

在【影像_顯示】後一定要加【等待】才能看到影像,影像停留多少微秒設定。

 

變數名稱

名稱

用途

鍵值(整數)

keyCode

0

輸出關閉的訊號。

微秒(整數)

milliSeconds

0

若想讓影像的顯示視窗至按下任意鍵才關閉,請設為0;若想讓影像顯示1秒後關閉,請設1000。

1秒鐘 = 1000微秒。

 

  • 【10 影像_關閉所有視窗】

在【影像_顯示】以及【等待】務必加上【影像_關閉所有視窗】。

此功能為將所有影像_顯示的視窗關閉。如下圖10。

 

圖10.影像_關閉所有視窗.png

圖10.影像_關閉所有視窗

 

 

三、FindBlob_OnlyFindScrewCap.flow

 

此流程與第二章節 FindBlob.flow 結果差異如下:

Image_FindBlob :找出錢幣以及螺絲

FindBlob_OnlyFindScrewCap :沒有找出錢幣,只有螺絲

其結果如圖11圖12

 

圖11.Image_FindBlob結果圖.png

圖11. Image_FindBlob 結果圖

 

圖12.FindBlob_OnlyFindScrewCap結果圖.png

圖12. FindBlob_OnlyFindScrewCap 結果圖

 

Find_ImageBlob 與 FindBlob_OnlyFindScrewCap 流程相異為【影像_找物體】。

其【影像_找物體】相異如下表。

透過設定不同的物體大小閾值,可以將面積較大的錢幣濾除,只剩下螺絲。

 

變數名稱

Find_ImageBlob

FindBlob_OnlyFindScrewCap

用途

影像(影像)

Binarize Image

Binarize Image

選擇想要找物體的影像變數。輸入已做二值化的影像來找物體。

啟用最小 X (布林)

 

 

 

最小 X (整數)

 

 

 

啟用最大 X (布林)

 

 

 

最大 X (整數)

 

 

 

啟用最小 Y (布林)

 

 

 

最小 Y(整數)

 

 

 

啟用最大 Y (布林)

 

 

 

最大 Y (整數)

 

 

 

啟用最小區域(布林)

True

True

設定最小面積閾值的開關。

最小區域(整數)

1000

1000

找出來的物體的最小面積閾值。

如果想要找的物體面積比較大,此值就調高。反之,則調小。

啟用最大區域(布林)

True

 

設定最大面積閾值的開關。

最大區域(整數)

5000

 

找出來的物體的最大面積閾值。

啟用最小填充率(布林)

 

 

 

最小填充率(雙精度浮點數)

 

 

 

啟用最大填充率(布林)

 

 

 

最大填充率

(雙精度浮點數)

 

 

 

Json(Json)

Output Json

Output Json

輸出的結果,找出物件在影像中所在的區域座標。

影像從(影像)

SampleImage

SampleImage

 

影像到(影像)

Output Image

Output Image

變數為 Output Image 的影像

此影像是將找出物體的結果畫出來。

型(字串)

Defect

Defect

找出物體的類型名稱。

 

 

四、FindBlobAndDrawRectJson.flow

 

此流程檔案將不同物體框選標記其名字。

 

主要與上面兩個流程不同於使用兩個【影像_找物體】,個別卡不同的面積大小把錢

幣(coin)與螺絲(cap)從影像中過濾出來,再把兩個影像_找物體的結果訊息整合,最

後將訊息畫至圖片上。

 

圖13.FindBlobAndDrawRectJson結果圖.png

圖13. FindBlobAndDrawRectJson 結果圖

 

 

流程內容差別如下圖14。說明如下:

 

【Image_FindBlob】找出錢幣與兩個螺絲

  1. 影像_找物體

    限制找出最小物體面積 MinArea 1000

  1. 顯示使用【影像_找物體】輸出的影像

 

【FindBlob_OnlyFindScrewCap】找出錢幣

  1. 影像_找物體:

              限制找出最小物體面積 MinArea 為1000及卡最大面積 MaxArea 為5000

  1. 顯示使用【影像_找物體】輸出的影像

 

【FindBlobAndDrawRectJson】找出錢幣與兩個螺絲,且將框標記成所屬的類別名稱

  1. 影像_找物體

               限制找出最小物體面積 MinArea 為1000以及最大物體面積 MaxArea 為 

               5000。

               限制找出最小物體面積 MinArea 為5000

  1. Json 類別_加入新值

              將兩個【影像_找物體】的結果訊息合

  1. 顯示用【影像_以 Json 畫方形】來把訊息畫至影像上

 

 

      (以上 MinArea 與 MaxArea 面積單位為像素2 )

 

圖14.FindBlobAndDrawRectJson流程圖.png

圖14. FindBlobAndDrawRectJson 流程圖

 


延伸閱讀

1.
[ezAI 簡單學 AI] 深度學習 Live 影像分析及深度學習股價預測

2.
[ezAI 簡單學AI] PCB 電路板的深度學習影像分析

3.
[ezAI 簡單學AI] 深度學習影像分析快速入門

[CP 值最好的 AI 人工智慧電腦熱賣中]
硬體採用最新最快的 Titan RTX, RTX-2080Ti-11G, 及 TESLA V100!
視窗圖控介面,易學易用。
硬體優勢:針對深度學習最佳化設計,且經過客戶端 24H 運作驗證。
軟體優勢:事先安裝人工智慧軟體及優化設定,每週提供最新 AI 演算法下載。
公司優勢:專業人工智慧機器人設計公司,資本額一億。
歡迎企業、學校、及公家機關大量採購。
可租用,歡迎來信或來電洽詢。
詳細資料請參閱以下網址: https://tw.openrobot.club/ai_computer