Program/OPEN_CV

[Open CV] 영상 분할과 객체 검출 _ 템플릿매칭 ( 인쇄체 숫자 인식 )

사막여유 2022. 6. 15. 08:09
728x90

2022.06.15 금일은 템플릿매칭 이해하기에  관한 강의였다.

 

 

인식( Recognition ) 이란?

 - 어떤 사물을 보고 무엇인지 판단하는 것.

 - 완전히 새로운 것이 아닌 여러개의 클래스 중에서 가장 유사한 클래스를 선택하는 것.

 - Classifying a detected object into different categories

각각의 클래스의 특징과 가장 유사도가 높은 값을 선택.

 

숫자 템플릿 영상 생성

 - Consolas 폰트로 쓰여진 숫자 영상을 digit0.bmp ~ digit0.bmp로 저장

 - 각 숫자 영상의 크기는 100x150 크기로 정규화

새로 들어온 이미지를 10개의 숫자와 각각 비교해서 가장 유사도가 높은 값을 해당 숫자로 판단

 

 

 

인쇄체 숫자 인식 ( 템플릿 매칭 ) 방법

1. 입력영상의 숫자와 문자들을 모두 이진화 및 레이블링한다.
    문자와 숫자의 구분은 문자가 숫자보다 충분히 작다는 가정하에 문자를 잘라내는 방식으로 진행한다.

2. 레이블링이 진행된 숫자를 부분 영상으로 추출하여 비교를 진행할 위 digit.bmp 파일들과 사이즈를 맞춰준다.
    Resize ( 정규화 )

3. 실제 0~9까지의 숫자를 템플릿 매칭을 하게되면 1x1 짜리 행렬이 나타나게되고 그 행렬이
    위에서 보았던 유사도값이라고 볼 수 있다.

이전의 강의와 다른점은 같은 사이즈로 템플릿 매칭을 한다는 점이다.

 

실제로 구현한 코드를 보게되면

템플릿 매칭 진행할 영상

 

위와같이 load_digits 함수를 생성하여 img_digits 라는 리스트에 0부터 9까지의 이미지를 넣고
해당 함수가 호출되면 0부터 9까지의 이미지를 갖는 img_digits 리스트를 반환한다.

 

find_digit 함수를 생성하여 추출된 부분영상을 받는다.

받은 부분 영상을  비교해줄 digit0~9.bmp와 resize 함수로 사이즈를 맞춰준 뒤

실제로 digit0~9 영상과 템플릿 매칭으로 비교한다.템플릿 매칭의 결과값이 -1보다 크다고 한다면 해당 결과값을 for문이 돌아가는 동안 이전값과 비교하여10개의 숫자중 가장 큰 값을 반환해준다.

 

Main 에서는 윗 줄에서 설명했듯이 해당 이미지를 Otsu 방법으로 이진화 한다. 
( 주의할 점은 비교할 영상의 배경이 흰색이고 숫자가 검은색이기때문에 BINARY_INV 를 사용해야한다. )

이후 connectedComponentsWithStats 함수를 사용하여 레이블링하고
레이블링 갯수와 해당 레이블링의 숫자를 반환받는다.

그리고 for문을 돌면서 숫자 인식 결과 영상을 생성하는데
0부터 for문을 돌지 않는 이유는 0은 레이블링에서 배경을 의미하기 때문에 1부터 시작한다.

그리고 stats에서의 원소들을 추출하여 바운딩박스의 위치를 알아낸 뒤 바운딩박스 위치만을 추출하여
위에서 구성한 find_digit 함수에서 템플릿 매칭을 진행해준다.

그리고 추출된 함수를 바운딩박스와 숫자로 표기해준다.

실제 결과를 보게되면 다음과같은 결과를 볼 수 있다.

 

상단의 숫자와 같은 경우에는 같은 Font를 사용했기때문에 인식률이 좋지만

하단의 숫자는 다른 Font를 사용했기 때문에 인식률이 저조한 것을 볼 수 있다.

실제 숫자1만봐도 상단의 1은 밑에 받침이 있지만 하단의 1은 밑에 받침이 없어 digit4와 가장 유사해보인다는 것을

우리의 눈으로만 봐도 알 수 있다.

그리고 크기와 회전이 다르다면 잘 안될수도 있지만 어파인변환또는 크기변환등을 사용해주고

정해져있는 폰트에 대해서는 템플릿 매칭만 이용해서도 인식을 할 수 있다는 것을 알 수 있다.

 

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

https://bit.ly/3L3avNW

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

728x90