마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

이미지 이진화 하는 과정에서 질문 드립니다.

0 추천
카메라로 숫자를 찍으면 숫자 인식하는 모듈을 만들려고 합니다.
그래서 이미지를 찍고 이진화를 하는데 분명 코드에서는 r, g, b의 threshold 이상이면 백색, 이외에는 흑색으로 지정을 하는데
막상 이미지를 보면 잡상으로 볼수 있는 색들이 굉장히 많이 보입니다
잡상 색깔은 RGB로 (227,227, 227)    (224, 224, 224)    (15, 15, 15) 등 색상은 굉장히 다양합니다
원본 이미지에서는 잡상이 낄수 있어도 그 이미지 배열을 탐색하면서 전부 흑과 백으로 색상을 세팅했음에도 불구하고 잡상이 있는것이 궁금합니다.
또한 그 잡상때문에 침식과 팽창(열림, Opening)기법을 3x3 마스크를 이용해서 사용했음에도 잡상 자체는 그대로 존재 합니다.

질문을 요약하자면,
이진화를 했음에도 잡상이 존재합니다.
분명히 제가 코딩을 잘못했을거라 생각합니다.
이진화 메소드를 봐주시고 피드백 해주시면 감사하겠습니다.

for (int i = 0; i < data.length; i++)
{
     if (i / Bit.getWidth() >= Bit.getHeight()) break;
     int pixel = Bit.getPixel(i % Bit.getWidth(), i / Bit.getWidth());
     int a = Color.alpha(pixel);
     int r = Color.red(pixel);
     int g = Color.green(pixel);
     int b = Color.blue(pixel);
     int white, black;
     white = 125;    //150
     black = 125;    //105
     try {
          if (r > white && g > white && b > white) {
             Bit.setPixel(i % Bit.getWidth(), i / Bit.getWidth(), Color.WHITE);
          } else if (!(r > black && g > black && b > black)) {
              Bit.setPixel(i % Bit.getWidth(), i / Bit.getWidth(), Color.BLACK);
          } else {
               Bit.setPixel(i % Bit.getWidth(), i / Bit.getWidth(), Color.GRAY);
          }

     } catch(Exception e) {
          e.printStackTrace();
     }
}
익명사용자 님이 2017년 2월 4일 질문

1개의 답변

0 추천
 
채택된 답변
질문자님,

영상 종류에 따라서 잡음제거가 완벽하게 되기는 힘듭니다.

질문자님이 요구하시는 결과가 어느정도인지는 모르겠으나 처리 결과물좀 확인하고 싶네요.

그리고 OCR 모듈 자체적으로 어느정도 잡음은 무시하도록 되어 있으나 너무 무리해서 잡음제거를 하시면 오히려 역효과가 될수 있습니다.

제가 실험적으로 확인 하였을때에는 이진화 하기전에 이미지 블러링을 거친 후에 하면 조금더 효과적으로 잡음이 제거 되는것을 확인 할 수 있었고 OCR 전처리로 가장 필수적인 요소는 잡음 제거보다는 deskew(이미지 기울기 보정)라는것을 확인 할 수 있었습니다.

deskew 관련해서는 구글링 하다보면 자료가 많이 나오니 참고 하시기 바랍니다.
Development Guy (70,570 포인트) 님이 2017년 2월 6일 답변
...