본 장에서는 마커 추출을 위해 레이블의 크기정보를 토대로 잡영여부를 판단하고 이를 제거하는 방법을 소개한다.
1. 버튼 처리
- 단계적으로 결과를 보기 위한 체크박스 삽입
- 이진화를 해야 레이블링이 가능하고, 레이블링 이후에만 레이블링 통한 잡영 제거가 가능하도록 버튼 조작
(나중에 이런 부분들은 다 제거할 예정임.)
2. 레이블링 클래스에 잡영제거 루틴 추가
3. 제거 알고리즘의 작성(작은 레이블을 제거하는 루틴)
4. 잡영 제거
- 영상의 80% 이상, 30px 이하의 레이블들은 모두 제거한다.
5. 테스트(이번 강좌는 동영상으로다가....)
1. 버튼 처리
- 단계적으로 결과를 보기 위한 체크박스 삽입
- 이진화를 해야 레이블링이 가능하고, 레이블링 이후에만 레이블링 통한 잡영 제거가 가능하도록 버튼 조작
(나중에 이런 부분들은 다 제거할 예정임.)
2. 레이블링 클래스에 잡영제거 루틴 추가
BlobSmallSizeConstraint(int nWidth, int nHeight)는 지정한 값 보다 작은 레이블들을 제거하고,
BlobBigSizeConstraint(int nWidth, int nHeight)는 지정한 값 보다 큰 레이블들을 제거한다.
각각의 함수는 클래스 내부에서 각각 _BlobSmallSizeConstraint()와 _BlobBigSizeConstraint()를 호출한다.
BlobBigSizeConstraint(int nWidth, int nHeight)는 지정한 값 보다 큰 레이블들을 제거한다.
각각의 함수는 클래스 내부에서 각각 _BlobSmallSizeConstraint()와 _BlobBigSizeConstraint()를 호출한다.
3. 제거 알고리즘의 작성(작은 레이블을 제거하는 루틴)
각각의 레이블들을 지정한 width와 height 값과 비교하여,
큰 값들은 temp에 저장하고, 작은값(잡영으로 판단한 값)을 가지는 레이블은 과감히 제낀다 -_-a
이후 temp의 내용을 원래 레이블 크기정보가 들어있던 rect에 옮겨 담음으로써 마무리된다.
큰 값들은 temp에 저장하고, 작은값(잡영으로 판단한 값)을 가지는 레이블은 과감히 제낀다 -_-a
이후 temp의 내용을 원래 레이블 크기정보가 들어있던 rect에 옮겨 담음으로써 마무리된다.
4. 잡영 제거
- 영상의 80% 이상, 30px 이하의 레이블들은 모두 제거한다.
5. 테스트(이번 강좌는 동영상으로다가....)
강좌가 금방이라도 다 끝나버릴 것 처럼 빠르게 진행되고 있지만,
실제로는 사이사이 엄청나게 많은 고민과 변화가 필요하다.
예를들어, 지금은 단순히 OTSU의 이진화 방법을 이용하고 있지만,
조명의 영향을 덜 받기 위해 배경평면을 만들어 낸다던지,
이진화 기법을 개선하기 위해 Kmeans 알고리즘 등을 이용하여 추출률을 높힐 수 있다.
(실제로 번호판 문자의 추출에 본 알고리즘을 적용하여 사용하고 있다.)
또한, 레이블링 이후 검증 방법에서 가로세로 비율을 이용하여 잡영을 제거 한다던지,
적당한 크기를 미리 정하여 휴리스틱하게 맞춰가는 방법 등도 고려할 수 있다.
잘하려고 하면 한도 끝도 없고,
본 강좌의 목적이 학문적인 접근 보다는
간단하게 따라하고 다양한 형태로 적용 및 응용 가능한 기법들을 소개 하는데 있으므로
계속해서 이정도 선에서 진도를 나가겠다는 사족과 함께 본 장의 강좌를 마무리한다.
다음장에서는 레이블 형태의 검증을 통해 최종적으로 마커를 추출하는 방법에 대해 알아본다.
적당한 크기를 미리 정하여 휴리스틱하게 맞춰가는 방법 등도 고려할 수 있다.
잘하려고 하면 한도 끝도 없고,
본 강좌의 목적이 학문적인 접근 보다는
간단하게 따라하고 다양한 형태로 적용 및 응용 가능한 기법들을 소개 하는데 있으므로
계속해서 이정도 선에서 진도를 나가겠다는 사족과 함께 본 장의 강좌를 마무리한다.
다음장에서는 레이블 형태의 검증을 통해 최종적으로 마커를 추출하는 방법에 대해 알아본다.
'[ 프로그래밍 ] > 강좌' 카테고리의 다른 글
OpenCV 강좌 08. 마커 추출 (3) - 마커 꼭지점 구하기 (20) | 2009.07.15 |
---|---|
OpenCV 강좌 07. 마커 추출 (2) - 마커 검증 (5) | 2009.07.07 |
OpenCV 강좌 05. 레이블링(Blob Labeling) (35) | 2009.07.01 |
OpenCV 강좌 04. 영상 이진화 하기 (11) | 2009.06.30 |
OpenCV 강좌 03. 다이얼로그에 캠 영상 입력받기 (25) | 2009.06.25 |