본 장에서는 마커 추출을 위해 레이블의 크기정보를 토대로 잡영여부를 판단하고 이를 제거하는 방법을 소개한다.
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 강좌 06. 마커 추출 (1) - 잡영 제거 (8) | 2009.07.02 |
OpenCV 강좌 05. 레이블링(Blob Labeling) (35) | 2009.07.01 |
OpenCV 강좌 04. 영상 이진화 하기 (11) | 2009.06.30 |
OpenCV 강좌 03. 다이얼로그에 캠 영상 입력받기 (25) | 2009.06.25 |
아 정말 감사합니다 ㅠ_ㅠ...
처음에 다이얼로그로 하려다가 복잡해서 ㅋㅋ
다이얼로그 포기하고 그냥 하고있는데요 ㅎㅎ
마틴님 블로그에서 황금덩이를 마구마구잡이로 캐가고있습니다
죄송할따름입니다 ㅠ_ㅠ..ㅎㅎ
마틴님께 이 영광을 바칩니다 ㅠ0 ㅠ ㅋㅋ!!!!!!!!
근데 이해가 안되는점이
for(nX = 0; nX < *nRecNumber; nX++)
{
temp[nX] = rect[nX];
}
이부분은 왜 하는건지 이해가 잘 안되서요...
이부분 설명좀 해주실수있나요? ㅎㅎ
제가 알기로 그 부분은..
constrain 한 후에 유효한 blogRect만 넣어주기 위함입니다.
놀부님! 여기서 댓글을!
고맙습니다! ^^*
마틴님 강의 정말 잘 보고 갑니다.
내용이 유익해서 좋네요. ㅎㅎ
참고해볼게요 ㅎㅎ
좋은 자료 감사합니다..
로봇 대회에 참가하여 캠을 이용하여 주행할 경우 참고하여 사용하려고 합니다.
혹여나 본 코드를 참고하여 사용하여도 될지 여쭈어 봅니다 ㅎㅎ
좋은 자료 감사합니다!
졸업작품 마커 검출 부분이 있는데
본코드 참조해서 사용회도 될지 여쭤봅니다..
좋은 자료 감사합니다
혼자서 프로젝트 하나 만들고 있는데 마틴님 블로그에서
참고 많이 하네요