文章介紹apriltag的編譯碼系統,參考文獻: apriltag: a robust and flexible visual fiducial system
edwin olson
university of michigan
當資料負載從方形中找到的時候,接下來就需要編碼系統來判定他是否是可行的,設計編碼系統的目標是:
·最大化可區分編碼數量
·最大化可以檢測和糾正的位錯誤數量
·最小化誤報和標籤間混淆的概率
·最小化標籤的總位數和標籤的大小
這些目標之間經常是會衝突的,所以一套給定的標籤編碼代表了一種妥協和權衡。這裡我們描述一種基於詞典的新標籤編碼系統,他和以往的編碼方法相比有著顯著的優勢。我們的程式可以生成具有各種屬性的詞典,讓使用者能夠挑選出最適合他們的需要的標籤編碼系統進行使用。
我們建議使用修改過的詞典系統。傳統的詞典是使用(每乙個編碼的位數n和兩個標籤之間的最小漢明距離d)兩個量來引數化的。詞典編碼可以糾正(d-1)/2位的位元錯誤,並且能夠檢測d/2的位元錯誤。為了方便起見,我們會展示36h10編碼族,他使用36位進行編碼並且最小漢明距離是10。
詞典碼從用於生成有效碼字的過程中得到名稱的:候選碼以字典順序(從最小到最大)被考慮,當他們和之前新增到碼本的每乙個碼字的至少距離都是d的時候,將新碼字新增到碼本,雖然非常的簡單,但是這種方案通常會非常的接近最優。
再視覺基準的情況下,編碼方法必須對旋轉是魯棒的。換句話說,當標籤旋轉90,180,270的時候,標籤碼字之間依然保持d的最小漢明距離。標準的詞典生成演算法不保證這個屬性,但是可以通過簡單的擴充套件來保證這個屬性:當測試新的候選碼字的時候,我們可以簡單的確保所有四個旋轉都具有所需要的最小漢明距離。詞典演算法能夠很容易被擴充套件到包含額外的約束這是我們的編碼方式的乙個優點。
有一些碼字儘管滿足漢明距離的約束,但是依然是糟糕的選擇。例如,全0碼字會導致標籤看起來就像是單個黑色的方塊,這種簡單的幾何圖形通常會出現在自然場景中,從而導致誤報的發生。例如,artag就明確禁止兩個編碼,因為他們很可能會偶然發生。
我們不是手動識別有問題的標籤,而是通過拒絕導致簡單幾何圖行的候選碼自來進一步修改詞典生成演算法。我們的度量基準是基於生成標籤2d圖案所需要的矩形數量。比如,乙個實心的標籤只需要乙個矩形,而黑白條紋需要兩個矩形。我們的假設,在本文後面的實驗結果支援下具有高複雜性的標籤模式(需要很多的矩形來組成),在自然條件下發生的頻率極低,因此可以有較低的假陽性率。
通過這個想法,我們再次修改詞典生成演算法來拒絕過於簡單的候選碼字。我們使用簡單的貪婪演算法來近似生成標籤模式所需要的矩形的數量,這個方法重複考慮所有可能的矩形並且新增最能夠減少錯誤的矩形。由於標籤通常非常的小,所以計算量不是乙個瓶頸。最小複雜度小於閾值的標籤(實驗中設定為10)被我們捨棄掉。結果部分演示了這種構造方式的適當性和有效性。
最後,我們通過對詞典生成演算法進行一次修改,觀察到了比較低的誤報率。我們不考慮按順序(0,1,2,3,4,5,6,7.。。)的測試碼字,而是考慮(b,b+1p,b+2p,b+3p…)其中b是任意的數,p是乙個大的素數,每一步都保留最低的n位。直覺上,這種方法生成的標籤在每乙個位元位置都有更大的熵,同時詞典順序有利於小值碼字。這種方式的缺點是建立出來的碼字的數量可能會更少一些:詞典排序能夠更加密集的打包碼字,而更隨機的順序導致碼字的打包效率更低一些。
總的來說,我們使用字典碼字生成系統可以生成任意大小的標籤(33,44,55,66等)和最小漢明距離的碼字。我們的方法明確保證每乙個標籤的所有四個旋轉的最小漢明距離,並且消除幾何複雜度低的標籤,計算標籤可能是一項昂貴的操作,但是可能離線完成,小標籤可以在幾秒或者幾分鐘內輕鬆的計算完成,但是大的(6*6)標籤可能需要幾天的cpu時間。許多有用的編碼族我們已經計分配算好了;大多數使用者不需要生成自己的編碼族。
可以容易的分析理論上的假陽性率。假設識別出錯誤的四邊形並且位模式是隨機的,誤報的概率就是被接受為有效標籤的碼字數量和所有可能的碼字的總數的比值。更加積極的糾錯會增加這個速率,因為他會增加被接受的碼字的數量。下面的36h10和36h15碼字說明了這種不可避免的錯誤率的增加。
當然,36h15編碼擁有更好的效能是有代價的:只有27個可以區分的碼字,而不是36h10的2221個可以區分的碼字。
我們的編碼方案明顯強於之前的方案,包括artag和artoolkitplus使用的兩種方案:我們的編碼系統在完成編碼比較多的碼字的同時能夠達到乙個更大的最小漢明距離。最小漢明距離的改善如圖和下表所示:
(漢明距離,好的編碼在有效碼字之間具有更大的漢明距離,上面顯示的是幾個現有系統的漢明距離。注意,我們的編碼方案通過構造來保證最小漢明距離,而其他的系統具有一些很相似的碼字,這會導致更高的標籤間混淆的概率。)
為了解碼可能被損壞的碼字,我們需要計算碼字和編碼詞典之間的漢明距離。如果最佳匹配的漢明距離小於使用者設定的閾值,那麼就報告一次檢測。通過指定特定的閾值,使用者能夠在假真和假假之間進行權衡選擇。
這個方法的乙個缺點就是這個解碼過程花費了碼字詞典大小的線性時間,因為在這個過程當中,必須要考慮每乙個有效的碼字,不過,這個係數非常的小,以至於和其他的影象處理步驟相比這個耗時可以忽略不記。
對於給定的標籤編碼方案,更大的標籤(例如36bits和25bits)編碼效能會明顯優於較小的標籤,當然這是需要付出代價的。在其他條件相同情況下,給定攝像機讀取36位標籤的範圍將短於同乙個攝像機讀取16位或者25位的標籤的範圍。然而由於標籤的四畫素開銷,比較小的標籤的範圍的好處非常使用,使用16位標籤而不是36位標籤,可以預期檢測範圍僅提高25%。因此,僅在較大的範圍敏感的應用中,比較小的標籤是有利的。
編譯碼 霍夫曼編譯碼
1.檔案源 原始影象分塊為 8 8 在rle編碼之後做霍夫曼編碼。其中rle碼字格式如下。struct rlecode 2.構建霍夫曼表 本文中使用的為jpeg標準ac y霍夫曼表。構建乙個256維大小的碼表hufftable,其霍夫曼碼字結構如下。struct huffcode 3.關鍵幀霍夫曼編...
編碼 解碼 中文編譯碼
字串和字符集的關係 字串是python程式的一種格式 位元組串是網路傳輸的一種形式 字串和位元組串轉換 字串 str encode 位元組串 bytes 位元組串 bytes decode 字串 str ascii字符集是utf 8字符集的前128位字元,可以說ascii字符集是utf 8字符集的子...
編譯碼,拷貝
s alex assicc碼 utf 8和gbk的英文是asicc碼 s1 s.encode utf 8 utf 8轉化為位元組 print s1.decode gbk 位元組轉化為gbk 刪除列表的兩個方法 li 1,2,3,4,5,6 lst for i in li for n in lst l...