본문 바로가기
3_ 담백한알고리즘

C - GrassFire 라벨링 알고리즘

by 준환이형님 2011. 9. 21.


영상 라벨링을 할 일이 생겨서 만들었어요 (인터넷에서..소스를 못찾았던 거죠 ㅠ)

글래스파이어(GrassFire) 알고리즘은

잔디에 불이 붙어서 불붙은 곳을 중심으로 주변이 야금야금 타들어가듯이 씨드와 같거나 유사한 주변의 객체의 값을 바꾸는 구조로 되어 있습니다.

예전엔 어떻게 했었는지 정확히 기억이 나지 않는데.. '야금야금'이 되려면 재귀가 되어야 할 것 같아서 그렇게 구현 해 보았습니다.



보통 이렇게 일치 시킨 값을 하나로 묶어 사용하는 일이 많고 구조가 복잡하지 않기 때문에 라벨링의 기본 알고리즘으로 많이 사용됩니다.

(교수님께서는 너 '라벨링' 그거 촌스러운 발음, '레~이블링'이라고 발음하라고 말씀하셨었죠. 문득 기억이 나는군요)

영상처리를 위해 배우긴 하였으나 게임 내 적군의 길찾기 알고리즘으로 쓰이기도 했지요

(이것을 응용한 게임을 보시려면 다음링크를 클릭 해 주세요 ->  http://topnanis.tistory.com/100 ) 

 

'GrassFire'라니.. 무척 직관적인 이름 아닌가요?



결과값의 첫번째는 기본값, 두번째는 라벨링, 세번째는 라벨링된 크기값 출력 입니다. 생각해보니.. 타들어가는 모습을 캡쳐 할 껄, 잘 못했네요

아래에 소스코드와 실행파일을 첨부합니다.


labeling.cpp

labeling.exe

--------------------------------------------------------------------------------------------------------------------------------------------

2012.9.5 수정하여 다시 올립니다. 배열을 늘리고, 테두리 부분 예외처리를 추가 하였습니다.

(혹시 실행했는데 MSVCR100.dll 에러가 발생하시면 VS2010 재배포패키지를 받아주세요.; http://topnanis.tistory.com/201 )


GrassFire(20x25).cpp

GrassFire(20x25).exe