閱讀賓果球第一和第二次曝光的群體。
這使得該過程顯著較慢,現在我們不僅具有兩種曝光,而且在兩個曝光之間的虛擬幀時間中,以允許在照明變化之後允許CMOS傳感器的恢復和容納。這就是為什麼整個成像過程實際上需要100毫秒。
掃描圖像的分辨率為220×220像素,具有8位像素深度。模擬灰度圖像僅由六位組成,其中剩餘的兩個位用於監視器上的藍色和紅色表示,因為灰度實際上是Greenscale。這些額外像素用作處理步驟之間的特殊標誌像素,在單步模式下可見,如藍色和紅色區域。在計劃開發和調試期間,這[原來是非常有用的。
整個過程分為17個步驟,也可以在單步模式下進行開發和調試目的。步驟顯示在屏幕的左上角(見下文),以及右上角有1毫秒分辨率的秒錶的當前狀態。這樣,很容易按照執行時間遵循並優化每個步驟。
球位置和伸展
要準確定位球,計算Formulas CX =ΣCixai/Σai和Cy =ΣCiyai/ΣAI的X,Y坐標,其中CX,CY是X,Y坐標和A是每個像素的值。由於背景主要是黑色,在該步驟之前,CX,Cy將大致在球的中心。然後,整個幀緩衝器被稱為2D塊,使得質心在坐標x = 110,y = 110處,其位於幀的中心。該中心標有2×2紅色像素(位7),僅用於開發人員方便,因為許多情況下的處理固件忽略位6和7。
接下來,測量球直徑,計算用於不同直徑的周邊上的平均像素值。然後,背景(直徑外部的每個像素)被設置為“白色”,或者更具體地,更具體地,綠色(值0x3F),以便更好地隔離黑區域。在處理過程中,背景將設置為白色或黑色的幾次,每次需要選擇黑色(墨水)或白色(紙張)區域。
不可能完美地將球形變為平坦的表面,但如果圖像是非線性變形的,則可以改善形狀,如步驟3圖像。小型16位微控制器沒有算術協處理器,並且使用標準三角網站將消耗太多的處理器時間。這就是為什麼使用三角查找表,您可以在秒錶(最佳最佳藍色數字)上看到,在這種情況下,拉伸程序的執行時間僅為11毫秒。您還可以看出球的中心部分大多是不變的,並且邊緣是非線性拉伸的,使得球形變形被最小化。
在步驟4中,類似於Photoshop中的Unsharp掩碼功能,創建了一個新的模糊圖像。由於另一個全幀緩衝器的RAM空間沒有足夠的RAM空間,它在輔助圖像上執行,該輔助圖像被縮放到分辨率44×44。 unsharp掩模的功能非常重要,因為它保證了相對於“紙張”像素的更好地選擇“墨水”像素。選擇意味著“位7的設置”,它將導致VGA屏幕上的紅色區域。
現在在同一幀緩衝區中存在兩個圖像,灰度一(比特0-5)和二進制1(位7)。後者用於預處理步驟6,其中消除了小孔和划痕。所選圖像首先擴展和收縮,然後重複該過程隨著購買的操作反轉 – 這導致邊緣正在平穩圓形和無垃圾。
組件操縱
經過更多預處理步驟之後,發生了更多的主要業務。第一個被稱為“連接的組件”,其中選擇隔離區域,並且獲取每個孤立區域。這包括x和y尺寸,x和y中心坐標,選擇的像素數,以及距離框架中心的歐幾里德距離。這將有助於將每個組件作為數字,大圓圈,下劃線或背景進行分類。在此階段,如果數字包括一兩位數,則也會清楚。
此步驟需要大量處理時間,大約200毫秒。另一個問題是連接組件的標準算法需要相同大小的輔助幀緩衝器,因此我必須創建一個新的算法,該算法利用相同的幀緩衝區,以及用於短期坐標的小表。
此時,處理器很容易選擇最佳的識別候選人 – 它是距離球中心最小的歐幾里德距離的圓圈。截至此圓圈內的連接組件被考慮在內,還有其他一切都會曝光。
有問題的球是特殊的OCR球,下劃線數字,So可以測量旋轉角度。現在,圓的中心是已知的,程序旋轉虛擬“T”形式,該形式對應於下劃線形狀,在360°圓周圍的512步,計算它包含的許多“墨水”像素。最高額定計數決定了旋轉角度,然後將幀緩衝器的2D塊移動到圖像的底部最佳角(步驟12在最左側圖像上),並且執行旋轉,將位圖移動到相對角的旋轉幀緩衝區。由於對數查找表,這組操作只需要50毫秒。
每一步都會保持更好。使用不同顏色選擇數字,然後將一個數字移動到安全距離,然後將每個數字縮放到已知分辨率為30×46。
認出
正如這個讀者是我的第一個OCR項目,我天真地認為,識別過程將是解決的最艱難的部分。在每一步完全調試並逐一檢查後,我達到了第17次和最後一步。正如我已經指出的那樣,我的初步計劃是選擇一個神經網絡,但是我嘗試了一個簡單的算法並與之播放。我用幾個球評估它,你無法想像我看到它完美的工作有多震驚!最後,位圖已正確呈現為兩個ASCII編號。
算法非常簡單。每個數字的位圖實際上分為三個部分,首先水平地分為三個部分,然後垂直地劃分。然後在每個列或行中計算活動像素,並創建直方圖。還有一個添加的第7直方圖,其傾斜,以幫助更好地檢測位點4和7處的橫向線。
只需3毫秒來為每個數字構建七個直方圖,並將它們與預先記錄的表進行比較,計算暗示中斷錯誤的總和並對結果進行排序。要使開發和調試更容易,所有直方圖都繪製到屏幕上。
在比較結果進行分類後,我們將獲勝者獲得每個數字(在本案件8和5)中,但我們的工作並未完成,直到一個更多的事情發生。必須評分的讀數質量,因此控制器可以估計結果是否足夠可靠。
如果球上的數字只有一個數字,則每個數字(0 … 9)的錯誤表被排序,並將“獲獎者”與第二個(近代)進行比較。如果比率很高,這意味著識別成功。在我們的情況下,它是147%,這意味著第二額定候選人比最好的候選人更多的錯誤更多。例如,第一個有100個“錯誤單位”,第二個有247.這是一個很好的評級,雖然許多評級是北北300%。通常,高於80%的評級應該被認為足夠安全。
但如果有兩位數是怎麼辦?鏈條只有其最薄弱的聯繫,所以該計劃將忽略更成功的識別數字(比率較高),並使用較弱的一個來實現成功的最終決定。
控制器有兩種基本的操作模式。在快速模式下,只有一個讀數,只有在第一次讀數不足的情況下才會重複(在球旋轉之後)。在較慢(“安全”)模式中,有兩種讀數的結果應該匹配。
讀者在Eleks-M公司在貝爾格萊德評估,生產賭場設備。測試是用一個額外的靜止式攝像機進行,該攝像機自動記錄每個球讀數,然後是按字母順序排序圖像(除了識別的球號而包含的文件名)進行了按字母順序排序,並且最終檢查手動進行。
整個測試持續了240小時,除了讀者之外,這將有助於壓力測試賓果鼓風機的耐用性。 10天后讀出115,000次,只有一個錯誤的讀數(球37被讀為7),讀者設置為快速模式。在安全模式下測試將毫無意義,因為可能永遠不會發生錯誤。
機械概念
賓果球的物理路徑是c