[안드로이드] 비트맵 이진화 처리
비트맵 이진화 처리 함수입니다.
먼저 비트맵을 받아 복사한 후
모든 픽셀을 탐색하며 색깔을 변경해줍니다.(GetNewColor)
그리고 새로운 비트맵을 반환합니다.
private Bitmap GetBinaryBitmap(Bitmap bitmap_src) {
Bitmap bitmap_new=bitmap_src.copy(bitmap_src.getConfig(), true);
for(int x=0; x<bitmap_new.getWidth(); x++) {
for(int y=0; y<bitmap_new.getHeight(); y++) {
int color=bitmap_new.getPixel(x, y);
color=GetNewColor(color);
bitmap_new.setPixel(x, y, color);
}
}
return bitmap_new;
}
GetNewColor 함수입니다.
GetColorDistance 함수를 통해 흰색과 검정색 중 가까운 색깔을 선택합니다.
BLACK 부분에 0.4를 곱해 BLACK 값을 높여서 좀 더 어두운 환경에서도 이진화를 잘 수행할 수 있도록 했습니다.
흰색 또는 검정색(이진화 값)을 반환합니다.
private int GetNewColor(int c) {
double dwhite=GetColorDistance(c,Color.WHITE);
double dblack=GetColorDistance(c,Color.BLACK)*0.4;
if(dwhite<=dblack) {
return Color.WHITE;
}
else {
return Color.BLACK;
}
}
GetColorDistance 함수입니다.
R,G,B 값을 받아와 제곱의 합의 제곱근입니다.(거리 구하는 공식)
거리 값을 반환합니다.
private double GetColorDistance(int c1, int c2) {
int db= Color.blue(c1)-Color.blue(c2);
int dg=Color.green(c1)-Color.green(c2);
int dr=Color.red(c1)-Color.red(c2);
double d=Math.sqrt( Math.pow(db, 2) + Math.pow(dg, 2) +Math.pow(dr, 2) );
return d;
}
실행 결과입니다.
GetNewColor 함수의 BLACK 및 WHITE값을 적절히 조절하여 최적의 이진화 된 이미지를 얻을 수 있습니다.
이진화 된 이미지를 통해 OCR을 더욱 효과적으로 처리할 수 있습니다.
질문 및 오류사항은 댓글로 달아주세요.
'Android' 카테고리의 다른 글
안드로이드 OpenCV 설치 (2) | 2018.09.03 |
---|---|
안드로이드 핀치 줌 구현 - 멀티 터치 (0) | 2018.08.29 |
안드로이드 이미지 뷰 여백 없애기 (0) | 2018.08.28 |
안드로이드 카메라 줌 기능 구현 (1) | 2018.08.27 |
[안드로이드] 실시간 SurfaceView 화면 캡쳐하기 (1) | 2018.08.24 |
안드로이드 특수키 제어하기 (3) | 2018.08.23 |
[Android] 안드로이드 내부 저장소 텍스트 파일 읽기 및 쓰기 (2) | 2018.08.21 |
[Android] 안드로이드 SurfaceView 카메라 연동하기 (3) | 2018.08.20 |