관리 메뉴

마틴블로그닷넷

OpenCV 강좌 05. 레이블링(Blob Labeling) 본문

[ 프로그래밍 ]/강좌

OpenCV 강좌 05. 레이블링(Blob Labeling)

K. Martin 2009.07.01 23:13
앞선 강좌에서는 OTSU 기법을 이용한 이진화 방법에 대해 알아보았다.
오늘은 이진화된 영상에서 각각의 컴포넌트들을 잘라낼 수 있는 레이블링에 대해 알아본다.

레이블링(Labeling)이란?
인접한 화소에 모두 같은 번호(Label)를 붙이고 연결되지 않은 다른 성분에는 다른 번호를 붙이는 일

1. 클래스 추가

2. 픽셀 방문 기록을 남길 구조체 및 각종 변수 선언

레이블링시 영상의 전체 픽셀을 검사하며 돌아다니게 되는데,
이 때, 해당 픽셀의 이전 방문 여부와 되돌아갈 곳의 위치를 저장하는 구조체를 선언한다.

또한 레이블링시 레이블이 저장될 이미지와 각 레이블의 정보가 담길 각각의 변수들을 선언한다.

3. 실제 레이블링 알고리즘의 구현
- 파라미터를 설정하고, DoLabeling() 함수를 실행함으로써 실제 레이블링 과정이 진행된다.

4. 알고리즘의 사용
- OnTimer 내부의 코드에 레이블링 관련 부분을 추가한다.

작성한 레이블링 알고리즘은 흰색(255의 값을 갖는 픽셀)을 Foreground로 판단하기 때문에,
앞서 이진화된 영상을 반전시킨다.

미리 작성해둔 레이블링 클래스를 이용 레이블링을 수행한 뒤,
각 레이블의 정보를 담고 있는 m_recBlobs 변수로 부터 각 레이블의 정보를 가져와
화면출력을 위해 만들어둔 이미지에 각각의 영역을 빨간색으로 표시한다.


5. 테스트 결과


다음장에서는 각 레이블의 크기 정보를 토대로 잡영을 걸러내고 원하는 레이블을 찾아가는 과정을 소개한다.




신고
34 Comments
  • 이전 댓글 더보기
  • uuu 2009.09.06 00:00 신고 참조 논문을 꼭 읽고싶은데...
    찾아서 메일로 보내주시면 안될까요?
    ukletter@gmail.com
    꼭 좀 부탁드립니다.
  • Favicon of http://martinblog.net K. Martin 2009.09.15 01:28 신고 오래전에 짜둔거라,
    하드디스크에 남아있지 않은 것 같네요.
    도움이 못되어 유감입니다.
  • Favicon of http://linuxmarine.tistory.com 마리니 2009.09.17 00:16 신고 버퍼에 입력할때 unsigned char 형으로 입력해야 하나요???

    버퍼에 자꾸 '0' 으로 입력이 되어세요...
  • Favicon of http://martinblog.net K. Martin 2010.02.18 20:25 신고 unsigned char 형으로 하셔야 됩니다.
  • Favicon of http://btd86.tistory.com 숙신 2010.02.18 11:28 신고 만약에, 검출된 흰색 객체 중에서 가장 큰 객체만 테두리를 치려면 어떻게 해야할까요?
  • Favicon of http://martinblog.net K. Martin 2010.02.18 20:28 신고 레이블링 시 각 레이블의 크기정보를 가지고 있도록 코딩 하시면 됩니다.
    제가 만들어 둔 레이블링 클래스에는 각 레이블의 정보가 m_recBlobs에 들어있습니다.
    참고하세요
  • 민폐 2010.02.23 14:33 신고 내용에 감동했어요 ^^
    혹시 개인 블로그에 담아가도 될까요?
    출처는 꼭 남길께요 ^^;;
  • Favicon of http://martinblog.net K. Martin 2010.05.06 12:37 신고 어디에 남기시는지도 함께 알려주시면 더욱 좋겠지요 ^^
  • 궁금합니다 2010.03.10 21:28 신고 2000년의 눈문에 나온 레이블링 알고리즘이라고 하셨는데.. 자세히 찾아 보려구 해요
    혹시 레이블링에 쓰신 알고리즘의 이름을 알수잇을까요 ?? 논문 이름이라던지요..
    olympps@naver.com 으로 알려주세욘
  • Favicon of http://martinblog.net K. Martin 2010.05.06 12:38 신고 글세요 저도 기억이...
  • 김봉사 2010.05.06 11:28 신고 컴퓨터 앞에만 서면 심청이 아부지 처럼 봉사로 돌변 했는데 마틴님의 치유 덕에 요즘들어 앞이 희미하게 나마 보이기 시작하네요. 정말 감사드리고요. 마틴님은이시대의 진정한 슈바이쳐이십니다. 앞으로도 모든 병이 완쾌할 그날까지 잘 부탁드리고요. 뿌듯한 하루 보내세요.

    -마틴님 은덕에 눈을 뜬 김봉사외 5명-
  • Favicon of http://martinblog.net K. Martin 2010.05.06 12:37 신고 하하하. 점심먹고 컴퓨터 앞에 앉았다가 한바탕 크게 웃었습니다.
    심청이 아버지에 슈바이처까지... 정말 재미있고 영광스러운 비유시네요.
    한편으론 부끄럽기도 하구요.
    더 많은 도움 드릴 수 있도록 노력하겠습니다.
    고맙습니다.
  • 조환상 2010.05.08 22:30 신고 마틴님 덕분에 많은 정보 얻어가고 있습니다. 감사합니다.
    궁금한 점이 있는데요 이 레이블링 된 부분을 잘라서 이미지로
    저장하거나 변수로 저장을 하려고 하는데
    조언 좀 부탁드려요. 수고하세요~
  • Favicon of http://martinblog.net K. Martin 2010.05.10 08:08 신고 GetBlobImage 같은 함수를 추가로 만드셔야 할텐데요.
    m_image 내부에 레이블링된 각각의 값들이 저장이 되어 있으므로,
    m_recBlob 각각의 영역 안에서 해당 인덱스의 레이블만 저장하면 됩니다. 참고하세요~
  • 안승하 2011.06.03 22:35 신고 다들 너무 오래전 글이라 아무런 답변이 안달릴것 같은 예상을 하지만 절박한 마음에 혹시나 해서 글을 올려 봅니다....
    이번에 만들려는게 도서관 빈자리 찾아주는 것인데요...
    웹캠으로 도서관의 여러자리가 모여있는 큰 책상을 찍습니다.
    그러기 위해서 openCV 를 이용해서 큰 책상에 각 자리마다 ROI 를 설정을 해 주어서
    그 부분에 대해서 영상처리를 하려고 하는데요.....
    그동안 해온 언어라곤 자바와 파이썬이 전부라... 그것도 미천한 실력이구요..
    그래서 C++ 이 어렵게 느껴지고 더군다나 MFC .. 특히나 openCV 를 사용하는 것은 버겁게 느껴집니다. 사설이 너무 길었습니다.. 요점은! 운영자님께서 짜신 레이블링 소스를 돌려 보았는데요.. 저는 ROI 를 설정한후에 그부분에 대해서 영상처리를 하려구 하는데요 그러기 위해서 레이블링후 리턴타입을 이미지 형태 IplImage 로 받고 싶은데 어떻게 해야 할지 막막해서요.. 운영자님께서는 타입을 다 int 받으셨더라구요.. 어떻게 해야 할까요? 조언좀 부탁드립니다.....
  • Favicon of http://martinblog.net K. Martin 2011.07.08 20:58 신고 CBlogLabeling 클래스 내에 각 레이블을 직접 컨트롤 하실 수 있게끔 여러 변수들이 마련되어 있습니다. 참고바랍니다.
  • 황인학 2011.07.11 22:28 신고 생초보입니다. 레이블링 공부하려고 봤는데 마틴님 소스에는 블로그에 설명이 없는부분이 많아서요 수만은 함수가 있는데 블로그만 봐서는 전혀 이해가 가지 않는군요 뭘 봐야 할지도 모르겠고 설명을 많이 추가해 주시면 않되나요? 증강현실 구현하는 책이라도 있으면 좋겠지만 책은 뭐가 좋을지 모르겠내요 증강현실 책도 좀 추천해 주시면 않될까요 부탁드립니다. 방학이라 이부분을 공부하려고요 여러가지로 신세를 지게 되내요 부탁드려요
  • hahagil 2011.12.29 19:08 신고 이번에 공부를 하고 있는데 labeling을 이렇게 친절하게 설명해주신 분은 마틴님 블로그 뿐이네요 ㅠㅠ 감사합니다! 많이 배우고 갑니다!
  • 니키 2012.05.01 01:08 신고 마틴님 너무 존경스럽습니다. 오픈CV를 공부하는 학생인데 아직 봐도 무슨말인지 잘 몰라서 일일이 실행하면서 필요한 부분만 잘 보고 있습니다. 나중에 한번 만나서 술한잔 하면서 여러가지를 물어보고 싶군요...............ㅋ
  • 학생1 2012.08.22 05:52 신고 소스보면 레이블링 과정에서 반전을 주게 되는데 이진화후 반전을 주지 않은 상태에서 검은색으로 판단을 할 수 있을까요?;
  • WebWeb 2013.02.17 13:44 신고 마틴님 감사합니다 ㅎㅎ
  • dudek14 2013.09.16 01:21 신고 레이블링 된 것들의 번호(라벨)을 어떻게 확인할 수 있을까요??
  • supra85 2013.12.31 14:14 신고 안녕하세요. 마틴님의 레이블링 소스를 여러 분야에 매우 잘 사용하고 있습니다. 제가 한가지 문제점을 맞닥드렸는데요. 레이블의 갯수가 255개를 넘으면 인식을 못하는데.. 물론 MAX값은 수정해주었습니다. 혹시 원인을 알고계시는지 궁금합니다.
  • Favicon of http://martinblog.net K. Martin 2014.01.02 21:59 신고 해당 내용에 대한 업데이트버전을 OpenCV 카페에 올려두었으니 확인 바랍니다.
    http://cafe.naver.com/opencv/26499
  • 찐콩 2014.02.03 13:57 신고 안녕하세요~ opencv를 갇 입문하게된 한 학생입니다.
    1강 부터 강의를 듣고 조금씩 이해하며 배우고 있는중 레이블링 영역에서 한참을 해메고 있습니다.
    글로써 표현하기에는 질문이 다소 복잡하여 사진이랑 소스를 올려서 질문을 드리고 싶은데
    어디에다가 하면 괜찬을까요 ?
  • 김태원 2014.02.10 11:56 신고 강좌 잘 보았는데요 레이블링 정보를 건드릴때 어느 부분을 건드려야 할지 잘 모르겠네요...
    ROI로 영역 잡아 놓고 그안에서만 레이블링 후에 캡쳐 하는 것을 구상 할라고 했는데 레이블링 구현까지는 강좌를 보고 완료를 하였는데 레이블정보가 정확히 어디에 명시가 되어있는지 알고 싶습니다. 알려주실수 있나요?
  • wjjang 2014.08.20 12:17 신고 좋은 강좌 소스 감사합니다. ~~ ^^
    델파이를 사용하는데 관련 소스나 자료도 많지 않은 상황에서 올려주신 소스 덕분에
    잘 컨버젼해서 사용중입니다
  • 키루 2014.10.11 04:30 신고 Hand.exe의 0x7644c42d에 첫째 예외가 있습니다. Microsoft C++ 예외: cv::Exception(메모리 위치 0x003cb9d4).
    Hand.exe의 0x7644c42d에 처리되지 않은 예외가 있습니다. Microsoft C++ 예외: cv::Exception(메모리 위치 0x003cb9d4).
    빌드는 이상없이 되는데 디버깅에서 이러한 메세지가 나오네요 어떻게 해결해야하나요?
    저는 opencv 2.4.3과 비주얼스튜디오2010에서 c++ 로 하였습니다.
  • 2016.12.04 17:34 비밀댓글입니다
  • Favicon of http://martinblog.net K. Martin 2016.12.10 10:26 신고 항공우주공학도님, 얼마든지 자유롭게 사용하세요. OpenCV (네이버)카페에 가시면 업데이트 버전도 있으니 확인해 보시면 좋을 것 같습니다.
댓글쓰기 폼