跳轉到內容

SwisTrack/Examples/IDReaderRing

來自華夏公益教科書,開放的書籍,為開放的世界

SwisTrack 中的 IDReaderRing 元件可以讀取 blob 周圍的圓形條形碼。該實現假設中間有一個白色 blob,可以使用標準的 blob 檢測演算法檢測,周圍有一個灰黑色條形碼。本示例包含用於建立此類條形碼 blob 的 Matlab 程式碼,以及有關如何使用它的資訊。

建立新的 Blob 集

[編輯 | 編輯原始碼]

用於建立 blob 的 Matlab 指令碼位於 CreateBarCodes 資料夾中。以下過程將建立條形碼

  • 建立一個符號列表,例如使用 14 個晶片和漢明距離 4
symbollist=symbols(14, 4)
  • (可選) 檢查符號距離
symboldistances(14, symbolist);
  • (可選) 繪製一個符號
drawsymbol(14, symbollist(1), 'Test')
  • 繪製(並儲存/匯出)所有符號
exportsymbols(14, symbolist, 'Test')

您可能想要修改“drawsymbol”以更改 blob 的大小/比例。該演算法找到具有 14 個晶片且旋轉獨立的程式碼(即,任何兩個程式碼在任何旋轉中都不相同),並且具有至少 4 個晶片的漢明距離(即,任何兩個程式碼在任何旋轉中至少有 4 個晶片不同)。這是以啟發式的方式完成的,在多次執行演算法時,它可能會產生略微不同的程式碼數量。

選擇正確的晶片數量

[編輯 | 編輯原始碼]

晶片數量以及漢明距離將極大地影響可用程式碼的數量。然而,這裡涉及許多權衡

  • 使用的晶片越多,獲得的程式碼就越多。
  • 漢明距離越大,獲得的程式碼就越少。
  • 使用的晶片越多,需要的解析度就越高(即更好的相機解析度或相機影像上更大的 blob)。這是奈奎斯特准則施加的限制。作為經驗法則,對於具有 0.7N 個晶片的程式碼,影像應至少為 N×N 畫素。
  • 漢明距離越大,檢測/辨別就越健壯。

因此,您應該找到一個配置,提供您真正需要的 blob 數量。比您需要的程式碼多一兩倍是可以的,並且可以在以後需要更多程式碼的情況下為您提供備用程式碼,但如果您的配置產生的程式碼是您需要的 10 倍或 100 倍,那麼您不必要地用檢測質量換取程式碼數量。

建立物件列表

[編輯 | 編輯原始碼]

要建立條形碼列表,請執行 exportsymbols.m 以獲得包含所有符號的完整 XML 檔案,或修改現有的 robotlist.xml。最理想的是,您只在此處輸入實驗中使用的條形碼。檔案包含的條形碼越多,檢測條形碼所需的時間就越長。

玩轉檢測演算法

[編輯 | 編輯原始碼]

要玩轉檢測演算法,DetectionAlgorithm 資料夾中提供了一個 Matlab 指令碼。

實用提示和限制

[編輯 | 編輯原始碼]

當前實現假設條形碼是完美的圓形。在具有高畸變的相機上,這不會產生令人滿意的結果。

環的內半徑應選擇為,以確保中間的 blob 在任何情況下都不會發生干擾。由於 blob 是白色的,演算法會將其視為白色晶片。特別是如果預計有小的變形,則條形碼和中間的 blob(黑色環)之間的距離應該足夠大。如果機器人或地板是白色的,環的外半徑也可能發生這種情況。在這種情況下,在條形碼外部新增一個大的黑色環會有所幫助。

該實現對於光照具有一定的魯棒性(消除了亮度平均值),但如果 blob 上有反射,則會失敗。這通常不是紙質 blob 的問題,但對於塑膠塗層的 blob 來說可能是個問題。

在某些情況下,條形碼環中的白色晶片被檢測為 blob。一些解決方法包括:- 使條形碼為灰黑色而不是白色,並在中間放置一個白色 blob。條形碼辨別質量會略微下降,但在許多情況下是可以的。- 保持條形碼環很薄,而中間的 blob 很大。然後,對 blob 大小的閾值將過濾掉一些連續的白色晶片以及任何其他太小而不能是 blob 的東西。

使用拜耳模式彩色相機時,您可能需要更高的有效解析度才能可靠地檢測條形碼。

華夏公益教科書