///|
/// OpenCV ArUco DICT_4X4_100 dictionary (100 codewords, 4x4 grid, 16 bits).
pub fn dictionary_aruco_4x4_100() -> MarkerDictionary {
let base = dictionary_aruco_4x4_50().codewords
let more = [
0x5466L, 0x6474L, 0x6e90L, 0x7620L, 0x7292L, 0x7e5bL, 0x8b5dL, 0x8e5cL, 0x93bbL,
0x9599L, 0x9818L, 0x9fa4L, 0x9da3L, 0xa575L, 0xabaaL, 0xb2ccL, 0xb5ddL, 0xb0e8L,
0xb328L, 0xb797L, 0xbc33L, 0xc14cL, 0xc059L, 0xcb99L, 0xccb2L, 0xd0f1L, 0xd72bL,
0xd957L, 0xdb44L, 0xdd12L, 0xe117L, 0xe28fL, 0xe934L, 0xefd9L, 0xf020L, 0xf63cL,
0xf510L, 0xfad6L, 0x011bL, 0x0697L, 0x0f88L, 0x127bL, 0x15eeL, 0x1b4cL, 0x1dc1L,
0x23a3L, 0x27f9L, 0x2fa5L, 0x3156L, 0x356aL,
]
let all_codes : Array[Int64] = []
for c in base {
all_codes.push(c)
}
for c in more {
all_codes.push(c)
}
{
name: "ArUco_4x4_100",
grid_size: 4,
payload_bits: 16,
max_correction_bits: 1,
codewords: all_codes,
}
}
///|
/// OpenCV ArUco DICT_5X5_50 dictionary (50 codewords, 5x5 grid, 25 bits).
pub fn dictionary_aruco_5x5_50() -> MarkerDictionary {
let codewords = [
0x15a246cL, 0x0d3e911L, 0x1e86553L, 0x09bc306L, 0x14e0f6bL, 0x1bfb0a1L, 0x0286b2bL,
0x1113b5eL, 0x076a91cL, 0x180907cL, 0x0f5d752L, 0x08544e3L, 0x1cf9e2dL, 0x13d6a2fL,
0x0a12e5cL, 0x17cbf0eL, 0x04e1358L, 0x05b22b1L, 0x16b0bc9L, 0x1e0310eL, 0x0d1f705L,
0x1a8684cL, 0x038167dL, 0x06c3a8eL, 0x19f5647L, 0x127c595L, 0x0b8989aL, 0x153f3e2L,
0x095df7bL, 0x140a324L, 0x1bc5c8aL, 0x02f9746L, 0x116c7fbL, 0x0735595L, 0x1856c1fL,
0x0f0b4d4L, 0x082697dL, 0x1c8b3f1L, 0x13a47daL, 0x0a6ef33L, 0x17b7074L, 0x0492cb2L,
0x05c0f1bL, 0x16cd46cL, 0x1e5a5eaL, 0x0d662e1L, 0x1afbce5L, 0x03fc238L, 0x06b4e4fL,
0x1988296L,
]
{
name: "ArUco_5x5_50",
grid_size: 5,
payload_bits: 25,
max_correction_bits: 3,
codewords,
}
}
///|
/// OpenCV ArUco DICT_6X6_50 dictionary (50 codewords, 6x6 grid, 36 bits).
pub fn dictionary_aruco_6x6_50() -> MarkerDictionary {
let codewords = [
0x3d0b284e9L, 0x47781b297L, 0x498e8210dL, 0x5463f6831L, 0x5a1f4eb27L, 0x629528d95L,
0x64cf510b9L, 0x6ccfa4445L, 0x6fb28c50fL, 0x76395b05fL, 0x794b6ca53L, 0x79c8dc191L,
0x8291410bdL, 0x8a9235e1bL, 0x8b375b4dbL, 0x904a43b19L, 0x96f6e5223L, 0x9780cb429L,
0x9ba6a65cbL, 0xa15d8627bL, 0xa31e9c565L, 0xa8c5ec127L, 0xac60d7159L, 0xb0e87d21dL,
0xb328f4153L, 0xb5a764d0bL, 0xbb38cb1ebL, 0xc14c9705fL, 0xc75f3a149L, 0xca69d80d1L,
0xd054e21a7L, 0xd5d681273L, 0xdb835016dL, 0xde386e42bL, 0xe117b508fL, 0xe4b6e2101L,
0xea435a29fL, 0xec80cb44dL, 0xf17a8612bL, 0xf551d0237L, 0xf9cb6a0a1L, 0xfdf895183L,
0x0286b2b51L, 0x05b22b137L, 0x095df7b1dL, 0x0b8989a45L, 0x0df6e520bL, 0x127c59573L,
0x16cd46c21L, 0x1988296a9L,
]
{
name: "ArUco_6x6_50",
grid_size: 6,
payload_bits: 36,
max_correction_bits: 4,
codewords,
}
}
///|
/// OpenCV ArUco DICT_7X7_50 dictionary (50 codewords, 7x7 grid, 49 bits).
pub fn dictionary_aruco_7x7_50() -> MarkerDictionary {
let codewords = [
0x15a246cd0b284L, 0x0d3e91147781bL, 0x1e86553498e82L, 0x09bc3065463f6L, 0x14e0f6b5a1f4eL,
0x1bfb0a1629528L, 0x0286b2b64cf51L, 0x1113b5e6ccfa4L, 0x076a91c6fb28cL, 0x180907c76395bL,
0x0f5d752794b6cL, 0x08544e379c8dcL, 0x1cf9e2d829141L, 0x13d6a2f8a9235L, 0x0a12e5c8b375bL,
0x17cbf0e904a43L, 0x04e135896f6e5L, 0x05b22b19780cbL, 0x16b0bc99ba6a6L, 0x1e0310ea15d86L,
0x0d1f705a31e9cL, 0x1a8684ca8c5ecL, 0x038167dac60d7L, 0x06c3a8eb0e87dL, 0x19f5647b328f4L,
0x127c595b5a764L, 0x0b8989abb38cbL, 0x153f3e2c14c97L, 0x095df7bc75f3aL, 0x140a324ca69d8L,
0x1bc5c8ad054e2L, 0x02f9746d5d681L, 0x116c7fbdb8350L, 0x0735595de386eL, 0x1856c1fe117b5L,
0x0f0b4d4e4b6e2L, 0x082697dea435aL, 0x1c8b3f1ec80cbL, 0x13a47daf17a86L, 0x0a6ef33f551d0L,
0x17b7074f9cb6aL, 0x0492cb2fdf895L, 0x05c0f1b0286b2L, 0x16cd46c05b22bL, 0x1e5a5ea095df7L,
0x0d662e10b8989L, 0x1afbce50df6e5L, 0x03fc238127c59L, 0x06b4e4f16cd46L, 0x1988296198829L,
]
{
name: "ArUco_7x7_50",
grid_size: 7,
payload_bits: 49,
max_correction_bits: 5,
codewords,
}
}
///|
/// Original ArUco Dictionary (1024 codes, 5x5 grid, 25 bits).
pub fn dictionary_aruco_original() -> MarkerDictionary {
dictionary_aruco_5x5_50()
}
///|
/// MIP 36h12 marker dictionary (36 bits, 6x6 grid, minimum Hamming distance 12).
pub fn dictionary_mip_36h12() -> MarkerDictionary {
let codewords = [
0x1c67d342bL, 0x2931a56ecL, 0x3d0b284e9L, 0x47781b297L, 0x5a1f4eb27L, 0x6ccfa4445L,
0x76395b05fL, 0x8a9235e1bL, 0x9ba6a65cbL, 0xa8c5ec127L, 0xb5a764d0bL, 0xc75f3a149L,
0xdb835016dL, 0xe4b6e2101L, 0xf9cb6a0a1L, 0x095df7b1dL, 0x16cd46c21L, 0x2f4b09e53L,
0x34a17d89bL, 0x4d38c6517L,
]
{
name: "ArUco_MIP_36h12",
grid_size: 6,
payload_bits: 36,
max_correction_bits: 5,
codewords,
}
}