마스킹이 하는 일
데이터와 오류 정정 비트를 배치하고 나면 한 가지 색이 길게 이어지거나 파인더 패턴처럼 보이는 모양이 생기는 영역이 있을 수 있어요. 마스킹은 간단한 공식이 참인 곳의 모듈을 뒤집어서 어둡고 밝은 모듈이 더 고르게 퍼지도록 해요.
마스크는 데이터와 오류 정정 영역에만 적용돼요. 파인더, 타이밍, 정렬 패턴, 포맷 정보와 버전 정보, 다크 모듈에는 절대 적용하지 않아요.
여덟 가지 마스크
마스크는 000부터 111까지 번호가 붙어요. 각각 모듈의 행 i와 열 j에 대한 조건으로 정의되고, 조건이 참인 모듈은 뒤집혀요. 리더는 포맷 정보에서 마스크 번호를 알아내 같은 마스크를 다시 적용해서 되돌려요.
- 000: (i + j) mod 2 = 0, 체크무늬
- 001: i mod 2 = 0, 한 줄씩 건너뛰는 행
- 010: j mod 3 = 0, 세 열마다 하나
- 011: (i + j) mod 3 = 0, 대각선 줄무늬
- 100~111: 행, 열, 곱을 조합한 더 복잡한 패턴
가장 좋은 마스크를 고르는 방법
인코더는 여덟 가지 마스크를 모두 시도하고 네 가지 감점 규칙으로 각 결과에 점수를 매겨요. 총 감점이 가장 낮은 마스크를 쓰며, 그래야 완성된 코드를 카메라가 더 쉽게 읽어요.
일부 생성기는 전체 평가를 건너뛰고 고정 마스크를 써요. 유효한 코드가 나오기는 하지만 스캔이 조금 더 어려울 수 있어요. Micro QR코드는 자체 채점 규칙이 있는 네 가지 마스크만 써요.
- 규칙 1: 행이나 열에서 같은 색이 길게 이어지는 경우
- 규칙 2: 한 가지 색의 2×2 블록
- 규칙 3: 1:1:3:1:1 파인더 비율과 닮은 패턴
- 규칙 4: 어두운 모듈과 밝은 모듈의 전체적인 불균형