2014-03-03 1 views
1

레이저 또는 잉크젯으로 인쇄 된 QR 코드를 스캔 할 때 오류가 발생합니다. 내가 제어 할 수있는 두 변환 단계 각각에서 사용하고있는 이미지 처리 매개 변수. 나는 종류의 "솔루션"을 생각해 냈지만 얼마나 견고한 지 알지 못한다. 나는 무엇이 진행되고 있는지 그리고 더 믿을만한 접근 방법이 있는지 이해하고 싶다.ZXing의 QR 코드 이미지 내에서 "흰색 얼룩"처리

필자는 입력으로받을 PDF 파일을 제어 할 수 없으며, 필자가 가지고있는 PDF 샘플 내에서 이미지를 검사하게하는 도구를 모르지만, 샘플은 일종의 회색 이미지입니다. 예를 들어, Acrobat Reader를 사용하여 QR 코드 셀 중 하나의 코너의 화면 스냅 샷을 볼 수 있습니다. 나는 검은 내부의 퍼지 원이 이미지 내에서 하나의 "밝은"픽셀을 나타내는 것으로 가정합니다.

enter image description here

내가 sDevice=pnggrey와 고스트 스크립트를 사용하여 PNG 파일로 PDF를 돌립니다. ZXing이 200dpi의 출력 해상도로 QR 코드를 인식하지 못했을 때 출력 픽셀 수를 100dpi로 변경하여 성공했습니다. 아마도 주변 픽셀 수가 더 많은 밝은 픽셀을 평균하여 결과 레벨이 나중에 ZXing이 작동하는 흑백 이미지로 이미지를 전환하는 데 사용 된 임계 값.

다음 이미지 처리 단계는 ZXing.rb Ruby 보석에서 가져온 것으로, ZXing의 LuminanceSourceGlobalHistogramBinarizer에 대한 호출로 구성됩니다. 후자는 이진화를 위해 하나의 전역 검정 점을 사용하고 데스크톱 애플리케이션 용으로 HybridBinarizer을 제안하지만 ZXing의 온라인 버전에서도 이미지가 손상 되었기 때문에 'HybridBinarizer'로 실험하지 않았습니다.

가 200dpi (실패) 이미지 :

200 dpi image

100 dpi의 (후속하는) 이미지 :

enter image description here

업데이트 : 600dpi로의 PDF 변환 스캔 시도 및 그것은 또한 성공했다. 호기심, 나는 다음 내 휴대 전화에 인쇄 된 이미지의 사진을 가져다가 여기에 결과 JPEG의 모듈 중 하나의 폭파 버전입니다 : 예상대로

enter image description here

, 휴대 전화 QR 코드 앱을했다가 각도 나 거리에 관계없이 이미지를 인식 할 수 있습니다.

enter image description here

답변

0

문제는 디더링 그레이 스케일의 차이가 정말 :

업데이트 2은 여기에 (성공) 600dpi의 (PNG) 이미지 코드의 몇 가지를 살펴입니다. 도서관은 이미지가 사진과 같은 것으로 가정하고 흑백 경계가 회색 음영을 통해 검은 색에서 흰색으로 연속적으로 변화하는 것처럼 보입니다. 흑백 경계선이 흑백을 나타내는 바둑판 무늬 패턴으로 디더링 된 이미지는 회색조를 나타 내기 위해 흑백 패턴이 많은 경우 작은 검은 색 전환으로 해석되기 때문에 제대로 작동하지 않습니다.

가장 좋은 방법은 파이프 라인에서 발생하는 디더링 단계를 피하는 것이지만 제어가 불가능할 수 있습니다. 그렇다면 가장 좋은 방법은 필터를 다운 샘플링하거나 흐리게하는 것인데, 이는 이미 본 것입니다. 반점이 붕괴 된 이후 100 dpi 이미지가 작동합니다.

바이너리 화가가이 상황에 많은 차이를 만들지는 않을 것이라고 생각합니다.

+0

항상 그렇듯이 신속하고 사려 깊은 답변, Sean에게 감사드립니다. 회색/색상 변화를 얻기 위해 바이너리 이미징과 하프 톤을 결합한 디지털 장치로 인해 인쇄물의 비율이 점차 증가하고 있으므로 사진의 반 연속 특성은 카메라의 기능이라고 생각합니다. - 모션 유도 또는 합성 된 블러는 기본 이미지의 특성입니다. 자세한 내용은 업데이트 된 질문을 참조하십시오. –

+0

예, 휴대용 카메라의 이미지는 하프 톤 처리를 제거하기에 충분한 저레벨 모션 블러와 부정확 한 포커스를 항상 갖습니다. 다운 샘플링 또는 라이트 블러 필터는 필요한 경우 동일한 효과를 얻을 수있는 저렴한 방법입니다. –

+0

+1 도와주세요. 다운 샘플링은 가장 저렴하고 쉬운 것처럼 보이지만 해프 토닝 문제를 제거하면서 해상도를 최대화하도록 설정하는 방법에 대한 지침을 제공 할 수 있습니까? 또한 200에서 600으로 해상도를 높이는 것이 왜 효과가 있었는지 설명 할 수 있습니까? –