[OpenR8 解決方案] Image_FindRotateVerticalAngle (找出圖片物件傾斜角度)

一、Image_FindRotateVerticalAngle 介紹

 

Image_FindRotateVerticalAngle 是對圖片做處理後找出傾斜角度,將圖片轉正的解決方案,如圖 1

圖 2為 ImageFindRotateVerticalAngle 的解決方案之流程,其使用方法與流程說明於第三、四章做介紹。

 

※根據圖片的不同,對圖片做處理的方式也不同,本文件的對圖片做處理方式詳見第五章。

 

圖 1.解決方案的目標 .png

圖 1.解決方案的目標 。

 

圖 2.解決方案的流程圖 .png

圖 2.解決方案的流程圖 。

 

 

二、Image_FindRotateVerticalAngle 資料夾介紹

 

Image_FindRotateVerticalAngle 位於 OpenR8的 solution 資料夾內,如圖 3,內有一個 flow 檔案及一個圖片檔,如圖 4

 

  1. ImageFindRotateVerticalAngle.flow:找出角度並旋轉圖片的解決方案。
  2. sample.png:本文件所使用的圖片。

 

圖 3.Image_FindRotateVerticalAngle位置 .png

圖 3.Image_FindRotateVerticalAngle 位置 。

 

圖 4.Image_FindRotateVerticalAngle資料夾 .png

圖 4.Image_FindRotateVerticalAngle 資料夾 。

 

 

 

 

 

三、開啟與執行 ImageFindRotateVerticalAngle.flow

 

請點選【檔案】=>【開啟】=>【進入到 OpenR8 底下的 solution 資料夾】=>【選擇 Image_FindRotateVerticalAngle 資料夾】=>【選擇 ImageFindRotateVerticalAngle.flow 開啟】,如圖 5圖 6

 

圖 5.選擇ImageFindRotateVerticalAngle.flow .png

圖 5.選擇 ImageFindRotateVerticalAngle.flow 。

 

圖 6.開啟ImageFindRotateVerticalAngle.flow .png

圖 6.開啟 ImageFindRotateVerticalAngle.flow 。

 

開啟後,在【影像_開啟】選擇想旋轉的圖片。

※如果只是想看預設的執行結果可以不用選擇。

 

圖 7.選擇想旋轉的圖片 .png

圖 7.選擇想旋轉的圖片 。

 

選擇完圖片,即可按下執行。

 

圖 8.執行ImageFindRotateVerticalAngle.flow解決方案 .png

圖 8.執行 ImageFindRotateVerticalAngle.flow 解決方案 。

 

圖 9.執行結果圖大略說明 .png

圖 9.執行結果圖大略說明 。

 

※如果轉正後的結果圖所轉的角度不理想,請調整對圖片做處理的方式。

 

 

四、ImageFindRotateVerticalAngle.flow 流程

 

這個章節主要介紹 ImageFindRotateVerticalAngle.flow 流程的函式內容。

 

※對圖片做處理有特別說明,詳看第五章。

 

圖 10. ImageFindRotateVerticalAngle.flow的流程 .png

圖 10. ImageFindRotateVerticalAngle.flow 的流程 。

 

  1. 影像_開啟:

開啟想旋轉的圖片。

影像檔案名稱:透過圖11右邊紅框。

影像:輸出讀入的影像。

 

圖 11. ImageFindRotateVerticalAngle.flow的影像_開啟 .png

圖 11. ImageFindRotateVerticalAngle.flow 的影像_開啟。

 

  1. 影像_顯示:

顯示想旋轉的圖片(圖 9的原始圖)。

影像:選擇【影像_開啟】所輸出的影像。

縮放百分比:顯示的影像縮放比例,不填時預設為100(=100%正常大小)。

視窗標題:顯示的視窗名稱。

 

圖 12. ImageFindRotateVerticalAngle.flow的影像_顯示 .png

圖 12. ImageFindRotateVerticalAngle.flow 的影像_顯示 。

 

※第3點到第6點的做法,第五章有做說明。

 

  1. 影像_色彩分離:

將彩圖分成藍色、綠色、紅色三種通道。

影像:選擇【影像_開啟】所輸出的影像。

影像B:輸出藍色通道的圖。

影像G:輸出綠色通道的圖。

影像R:輸出紅色通道的圖。

 

※【影像_開啟】選擇的圖片如果是灰階圖會無法分離,請注意!

 

圖 13. ImageFindRotateVerticalAngle.flow的影像_色彩分離 .png

圖 13. ImageFindRotateVerticalAngle.flow 的影像_色彩分離 。

 

  1. 影像_差值:

兩個影像相減,這裡用於【影像_色彩分離】G 通道 -【影像_色彩分離】B 通道。

影像 A:被減數(被減的影像)。

影像 B:減數(減的影像)

影像差值:輸出(影像 A - 影像 B) 的影像。

模式:分模式0與模式1兩種,這裡選模式0

※影像_差值之模式0公式:影像差值 = 影像 A - 影像 B

※影像_差值之模式1公式:影像差值 = 影像 A - 影像 B + 128

 

圖 14. ImageFindRotateVerticalAngle.flow的影像_差值 .png

圖 14. ImageFindRotateVerticalAngle.flow 的影像_差值 。

 

  1. 影像_顯示:

顯示【影像_差值】相減完的圖片(圖 9的 sample 1圖)。

影像:選擇【影像_差值】所輸出的影像。

縮放百分比:顯示的影像縮放比例,不填時預設為100(=100%正常大小)。

視窗標題:顯示的視窗名稱。

 

圖 15. ImageFindRotateVerticalAngle.flow的影像_顯示 .png

圖 15. ImageFindRotateVerticalAngle.flow 的影像_顯示 。

 

  1. 影像_二值化:

對【影像_差值】相減完的圖片做二值化,過濾出中間的綠色方塊。

影像:選擇【影像_差值】所輸出的影像。

閾值:二值化的閾值。

二值化影像:輸出二值化後影像。

 

圖 16. ImageFindRotateVerticalAngle.flow的影像_二值化 .png

圖 16. ImageFindRotateVerticalAngle.flow 的影像_二值化 。

 

  1. 影像_顯示:

顯示【影像_二值化】圖片(圖 9的 sample2 圖)。

影像:選擇【影像_二值化】所輸出的影像。

縮放百分比:顯示的影像縮放比例,不填時預設為100(=100%正常大小)。

視窗標題:顯示的視窗名稱。

 

圖 17. ImageFindRotateVerticalAngle.flow的影像_顯示 .png

圖 17. ImageFindRotateVerticalAngle.flow 的影像_顯示 。

 

  1. 影像_找旋轉角度:

計算圖片特徵傾斜角度。

影像:選擇【影像_二值化】所輸出的影像。

最大修正角:允許圖片旋轉的最大角度,如果找出來的角度大於此參數值則輸出角為0,如圖 19

輸出角:輸出圖片特徵的旋轉角度。

 

圖 18. ImageFindRotateVerticalAngle.flow的影像_找旋轉角度 .png

圖 18. ImageFindRotateVerticalAngle.flow 的影像_找旋轉角度 。

 

圖 19.影像_找旋轉角度的最大修正角與輸出角的關係 .png

圖 19.影像_找旋轉角度的最大修正角與輸出角的關係 。

 

  1. 影像_旋轉:

根據【影像_找旋轉角度】所輸出的角度旋轉【影像_開啟】所讀入的原始圖。

影像:選擇【影像_開啟】所輸出的影像。

度:選擇【影像_找旋轉角度】所輸出的角度。

輸出角:輸出旋轉後的圖片。

 

圖 20. ImageFindRotateVerticalAngle.flow的影像_旋轉 .png

圖 20. ImageFindRotateVerticalAngle.flow 的影像_旋轉 。

 

圖 21.影像旋轉 .png

圖 21.影像旋轉 。

 

  1. 影像_裁切:

根據【影像_旋轉】後的影像會有黑色的區塊,所以要把黑色區塊切掉,如圖 23說明。

影像:【影像_旋轉】所輸出的影像,如圖 24

x:裁切的起始點 X 座標,如圖 24

y:裁切的起始點 Y 座標,如圖 24

w:裁切的長度(從裁切起始點算起) ,如圖 24

h:裁切的寬度(從裁切起始點算起) ,如圖 24

裁切影像:輸出裁切完後的影像,如圖 24

 

圖 22. ImageFindRotateVerticalAngle.flow的影像_裁切 .png

圖 22. ImageFindRotateVerticalAngle.flow 的影像_裁切 。

 

圖 23. 影像_旋轉造成的黑色區域 需要裁切的原因 .png

圖 23. 影像_旋轉造成的黑色區域 需要裁切的原因 。

 

圖 24. 影像_裁切示意圖 .png

圖 24. 影像_裁切示意圖 。

 

  1. 影像_顯示:

將【影像_裁切】輸出的影像顯示在視窗中(圖9的 sample3圖)。

影像:選擇【影像_裁切】所輸出的影像。

縮放百分比:顯示的影像縮放比例,不填時預設為100(=100%正常大小)。

視窗標題:顯示的視窗名稱。

 

圖 25. ImageFindRotateVerticalAngle.flow的影像_顯示 .png

圖 25. ImageFindRotateVerticalAngle.flow 的影像_顯示 。

 

  1. 等待:

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

鍵值:輸出的訊號。

微秒:想讓影像直到按下任意鍵才關閉時,請設0;想讓影像顯示1秒後關閉,請設1000;想設置n秒後關閉,請設1000 * n。

※1秒鐘 = 1000微秒。

 

圖 26. ImageFindRotateVerticalAngle.flow的等待函式 .png

圖 26. ImageFindRotateVerticalAngle.flow 的等待函式 。

 

  1. 影像_關閉所有視窗:

將所有【影像_顯示】所顯示的影像視窗關閉。

 

圖 27. ImageFindRotateVerticalAngle.flow的影像_關閉所有視窗 .png

圖 27. ImageFindRotateVerticalAngle.flow 的影像_關閉所有視窗 。

 

 

五、對圖片做處理

 

在將處理過的圖片餵入【影像_找傾斜角度】之前,需要做些處理,能留下有用的資訊,將不必要的資料排除,常見的方法像是二值化、模糊化、侵蝕、膨脹、相加、相減……之類,下面會介紹 ImageFindRotateVerticalAngle.flow 的解決方案之做法。

 

※方法僅供參考,並非不得不使用這些做法不可

 

由於圖 28圖片偏綠,直接使用二值化要把綠框完整過濾出來會有一些雜點,所以 ImageFindRotateVerticalAngle.flow 的解決方案使用【影像_色彩分離】分出藍色、綠色、紅色三個通道,如圖 29。

 

圖 28. ImageFindRotateVerticalAngle.flow所使用的影像 .png

圖 28. ImageFindRotateVerticalAngle.flow 所使用的影像 。

 

圖 29. 影像_色彩分離的三個通道圖 .png

圖 29. 影像_色彩分離的三個通道圖 。

 

可以看出圖 29的藍色通道與綠色通道明顯看出矩形的形狀,且一個偏黑、一個偏白,於是使用【影像_差值】,用綠色通道 – 藍色通道,試圖過濾出矩形區域,如圖 30

 

圖 30. 影像_差值的結果圖 .png

圖 30. 影像_差值的結果圖 。

 

【影像_差值】相減完的結果明顯看出中央有矩形,而其他區域都是黑的,這時使用【影像_二值化】將矩形過濾出來,如圖 31

 

圖 31. 影像_二值化的結果圖 .png

圖 31. 影像_二值化的結果圖 。


延伸閱讀

1.
OpenR8 社群版 - 人人都會用的 AI 軟體 (免費下載)

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