Bhinish Dhiman

Seberapa besar logo boleh menutupi kode QR? Kami mengukurnya

Diterjemahkan dari versi asli berbahasa Inggris. Baca versi asli

Logo di tengah bisa menutupi sekitar 4.3% area kode QR pada level koreksi galat L, 9.2% pada M, 14.3% pada Q, dan 19.3% pada H, diukur dari sekitar 5 000 percobaan decode. Angka 30% yang banyak diulang itu salah membaca standar: ISO/IEC 18004 menyatakan level H memulihkan 30% codeword simbol, dan itu bukan 30% dari area yang terlihat.

Cari tahu seberapa besar logo boleh ditempatkan di kode QR, dan hampir setiap halaman akan menjawab 30%, biasanya pada level H. Kami tidak bisa menemukan pengukuran di balik angka itu, jadi kami membuatnya sendiri.

Apa yang sebenarnya dinyatakan standar

ISO/IEC 18004 klausul 5.1 mendefinisikan keempat level koreksi galat berdasarkan apa yang dipulihkannya:

memungkinkan pemulihan codeword simbol sebesar: L: 7%; M: 15%; Q: 25%; H: 30%.

Seluruh kesalahpahaman bertumpu pada dua kata: pemulihan codeword (codeword recovery). Satu codeword adalah delapan modul data yang di-encode. Tiga puluh persen codeword tidak sama dengan tiga puluh persen gambar, dan ada tiga hal yang memperlebar selisihnya.

Pola finder, timing, dan alignment sama sekali tidak memiliki koreksi galat. Pola-pola itulah yang dipakai pemindai untuk menemukan dan menentukan orientasi simbol sebelum proses decode dimulai. Pada kode versi 1, pola-pola itu menempati 52.8% area; pada kode versi 40, 5.4%. Tutupi bagian mana pun dari pola itu, dan tidak ada level koreksi galat yang bisa menolong, karena koreksi belum dimulai.

Logo adalah satu gumpalan yang menyatu, dan kena sebagian sama dengan hilang seluruhnya. Koreksi galat bekerja pada codeword utuh. Logo yang hanya memotong sudut sebuah codeword menghancurkan codeword itu sama tuntasnya dengan menutupi seluruhnya.

Koreksi diterapkan per blok yang di-interleave, tidak digabung. Sebuah simbol dibagi menjadi beberapa blok, masing-masing dengan anggaran pemulihan sendiri. Gumpalan yang terkonsentrasi di atas dua blok bisa menghabiskan anggaran keduanya, sementara bagian simbol lainnya tidak tersentuh dan anggarannya masih tersisa.

Pengukurannya

Kami meng-encode empat payload pada masing-masing dari keempat level koreksi galat, menimpakan area kosong berbentuk persegi di tengah, memperbesarnya satu modul demi satu modul, dan mencoba melakukan decode setelah setiap langkah. Setiap percobaan melewati model kamera, bukan render yang bersih: diperkecil ke jumlah piksel per modul yang tetap, diburamkan sebesar 0.8px, diberi derau Gaussian dengan σ=6, dan dikompresi JPEG dengan kualitas 70.

Total sekitar 5 000 percobaan decode. Untuk URL umum sepanjang 54 karakter:

Koreksi galat Logo terbesar yang masih bisa di-decode “Pemulihan” nominal
L 4.3% dari area 7%
M 9.2% 15%
Q 14.3% 25%
H 19.3% 30%

Bahkan pada level H, dengan payload terpanjang yang kami uji, batas atasnya 22.4%. Tidak ada hasil pengukuran kami yang mendekati 30%.

Bagian yang seharusnya mengubah cara Anda menguji

Koreksi Reed–Solomon tidak menurun secara bertahap. Di setiap level dan setiap resolusi yang kami uji, simbol berhasil di-decode 100% sampai modul terakhir yang masih bisa ditoleransi, dan 0% satu modul kemudian. Tidak ada rentang di mana kode itu kadang berhasil.

Hal itu penting karena cara orang memeriksa kode QR: mereka memindainya dengan ponsel, berhasil, lalu mengirimnya ke percetakan. Pemindaian yang berhasil memberi tahu Anda bahwa Anda berada di sisi tebing yang benar. Pemindaian itu tidak memberi tahu apa pun tentang seberapa dekat Anda dengan tepinya, padahal di tepi itulah cetakan yang aus, sensor kamera yang lebih murah, atau sudut yang lebih curam bisa mendorong Anda ke sisi sebaliknya.

Inilah alasan untuk menghitung marginnya, bukan mengujinya. QR code generator kami menampilkan seberapa besar porsi anggaran koreksi galat yang dipakai oleh logo, sehingga Anda bisa melihat jarak ke tebing alih-alih baru menemukannya setelah satu batch cetak.

Tiga hasil lain yang bertentangan dengan saran umum

Modul bersudut bulat dan berbentuk titik tidak memakan anggaran, hingga diameter sekitar 0.7×. Peringatan umum bahwa modul bersudut bulat merusak keterbacaan tidak didukung oleh hasil pengukuran kami, asalkan ketiga pola finder di sudut tetap berupa persegi solid.

Mengubah gaya pola finder adalah kerusakan yang sesungguhnya, dan koreksi galat tidak bisa memperbaikinya. Pola finder bertitik mencatat tingkat pemindaian 60% yang sama persis di L, M, Q, dan H. Datar di keempat level, karena ini kegagalan deteksi, bukan kegagalan koreksi: pemindai tidak bisa menemukan simbolnya, jadi koreksi tidak pernah berjalan. Inilah argumen terkuat yang ada untuk melawan anggapan “atur saja ke H, pasti aman”.

Hue tidak relevan; hanya luminans yang dihitung. Hijau di atas merah, pasangan yang jelas terlihat buruk, gagal. Merah di atas biru, yang terlihat sama janggalnya, berhasil di-decode dengan andal. Ukuran yang menentukan adalah Symbol Contrast menurut ISO/IEC 15415, selisih reflektansi yang dinilai dari A sampai F, dan itu bukan rasio WCAG. WCAG mengukur keterbacaan teks bagi mata manusia; sensor kamera adalah instrumen yang berbeda. Sebagian besar halaman yang menjawab “berapa kontras yang dibutuhkan kode QR” mengutip angka WCAG, satuan yang salah untuk pertanyaan itu.

Aturan jarak 10:1 tidak punya dasar

Aturan bahwa jarak pemindaian bisa sepuluh kali lebar simbol muncul di mana-mana, tetapi tidak ada di standar mana pun; ISO/IEC 18004 sama sekali tidak menetapkan ukuran modul minimum. Yang kami ukur adalah ambang dalam satuan piksel kamera per modul: di bawah sekitar 2.5 piksel per modul, tingkat keberhasilan decode anjlok tajam.

Itu membuat aturan tersebut keliru ke dua arah, karena mengabaikan jumlah modul. Kode versi 2 dan kode versi 20 dengan ukuran cetak yang sama memiliki modul yang ukurannya berbeda 2.3×, sehingga jarak pemindaiannya pun sangat berbeda. Satu angka tidak bisa menggambarkan keduanya.

Hal yang perlu diketahui bersamaan dengan itu: ponsel melakukan decode dari preview stream kamera, bukan dari foto beresolusi penuh. Sensor 12 megapiksel tidak memberi Anda 12 megapiksel untuk decode, dan karena itulah perhitungan fisika terlihat jauh lebih optimistis daripada pengalaman sehari-hari.

Catatan, dinyatakan terus terang

Setiap decode di atas memakai satu implementasi decoder. Decoder itu terukur lebih toleran daripada alat verifikasi cetak dan mungkin lebih toleran daripada ponsel pada umumnya, jadi anggap angka-angka ini sebagai batas atas, bukan jaminan. Model anggaran di balik alat kami sengaja diatur di sisi yang konservatif dari hasil pengukuran kami: model itu memprediksi tebing dalam selisih satu modul, dan cenderung memberi tahu Anda bahwa logo terlalu besar.

Metode, skrip, dan angka mentahnya ada di repositori di balik situs ini. Jika Anda mengulang pengujian ini dengan decoder lain dan mendapat angka yang berbeda, kami ingin mengetahuinya.