디더링 QR 코드 만들기

1 day ago 7

QR 코드의 데이터 모듈 주변 공간에 오차 확산으로 사진을 표현하면, 이미지를 보여주면서도 스마트폰으로 읽을 수 있는 코드를 만들 수 있음 스캐너의 위치 인식에 필요한 기능 패턴은 선명하게 유지하고, 실제 정보를 담는 데이터 모듈은 중심만 남겨 주변을 이미지에 활용함 데이터 모듈의 강제된 색상에서 생기는 소금·후추 잡음은 오차를 주변 8개 픽셀로 먼저 확산한 뒤 Floyd-Steinberg 디더링을 적용해 줄임 오류 정정을 이용해 일부 데이터 모듈을 바꿀 수도 있지만 이미지 품질은 크게 개선되지 않고 스캔 신뢰성이 심각하게 낮아짐 실제 사용에서는 인쇄 상태·조명·카메라 품질을 고려해 충분한 여백과 오류 정정 능력을 남겨야 함 QR 코드에 이미지를 담는 원리 QR 코드는 사진에서도 몇 바이트의 데이터를 쉽게 읽도록 만든 사각형 격자로, 초점 불량·인쇄 품질·촬영 각도·일부 영역 손실에 견디도록 설계됨 격자는 크게 기능 패턴과 데이터 모듈로 나뉨 기능 패턴은 스캐너가 QR 코드의 위치와 구조를 찾는 데 사용되므로 명확하게 구별되어야 함 데이터 모듈에는 실제 데이터와 헤더 등이 저장되며, 기능 패턴으로 위치를 파악한 뒤 읽히므로 어느 정도 변형할 수 있음 브랜드 QR 코드도 데이터 모듈을 변형해 고유한 모양을 만들며, 판독 견고성은 낮아지지만 일정 수준까지는 스캔 가능함 데이터 모듈 사이에 사진 넣기 Mastodon의 QR 코드 사례는 각 모듈을 3×3 격자로 나누고 중앙 칸에 QR 데이터를 저장하며 나머지 칸으로 사진을 표현함 스캐너는 기능 패턴을 기준으로 각 모듈의 중심을 확인하므로, 코드가 왜곡되지 않는다면 데이터 모듈을 축소하고 주변 공간을 활용할 수 있음 결과물은 저해상도 1비트 사진이며, QR 데이터가 차지하는 중앙 픽셀 때문에 소금·후추 형태의 잡음이 생김 디더링과 오차 확산 이미지를 낮은 색상 깊이로 줄일 때 단순히 밝은 픽셀은 흰색, 어두운 픽셀은 검은색으로 임계 처리하는 대신 체크무늬로 중간 명도를 표현할 수 있음 Bayer 필터는 이미지 전체에 이런 디더링을 적용하면서 세부 묘사의 손실을 줄임 Floyd-Steinberg 디더링은 임계 처리에서 발생한 밝기 오차를 아직 처리하지 않은 주변 픽셀로 확산함 왼쪽 위에서 시작해 밝기가 50%보다 높으면 흰색, 그렇지 않으면 검은색으로 만듦 밝기 70%인 픽셀을 100%인 흰색으로 바꾸면 30%만큼 밝아지므로, 이후 처리할 인접 픽셀에 오차를 분배해 합계...

Read Entire Article