현실감각 0% :: 2D영상 오브젝트의 회전각 산출하기

컴퓨터 관련 2011. 3. 16. 14:22

2D영상 오브젝트의 회전각 산출하기





컴퓨터비전에서 영상처리를 하는 목적은 여러가지가 있겠지만 가장 큰 목적 중 하나가 바로 오브젝트의 추출이다.
이런저런 알고리즘을 써서 힘들게 오브젝트를 추출했는데.. 아니 글쎄 이놈들이 인식하기 어렵게 지들 마음대로 회전되어 있다면??
회전에 강건한 인식 알고리즘도 많지만 템플릿매칭이나 Haar-like 특징을 사용한 알고리즘 같이 회전되어있으면 좀 골치아픈 알고리즘에서는 이놈들을 다시 차렷자세로 돌려놓을 필요가 있다.

그럴때 쓰는 유용한 수식.




이 수식을 어디서 찾았는지는 분명하지 않다...-_-;; 아마 곤잘레스의 이미지프로세싱 책에서 본듯싶은데...
뭐 아무튼 수식을 간단히 설명하자면, 뮤는 수식에서 보면 쉽게 알 수 있듯이 뭐.. 분산이라고 보면 된다.
즉 뮤20은 x축의 분산, 뮤02는 y축의 분산, 그리고 뮤11은 그냥 분산...(?) 공분산!!

아무튼 x축 분산과 y축 분산을 빼면 어디로 더 분산이 큰지 알수있는데 그놈을 공분산값으로 나눠주면 기울기가 나온다.
그 기울기를 아크탄젠트 해주면 각도 생성.
언어에 따라 다르겠지만 혹 degree값이 필요한데 radian값으로 나왔다면 180/π 를 곱해주는 작업을 추가하면 된다.
반대인 경우 나눠주면 되고-_-;


                    
                     영상 -> 이진화 -> 레이블링 -> 각도 추출 -> MBR로 장축 길이 추출 -> 장축을 중심으로 각도만큼 회전


위 사진은 열쇠 영상을 이진화 한 후, 레이블링하여 각각의 오브젝트로 만든 후, 각각의 회전각을 산출하고 차렷자세로 만든 모습.
귀찮아서 인터폴레이션 안했더니 오브젝트에 구멍이 슝슝...-_-;


소스코드는 아래..(클래스화 시킨다고 시키고는 안돌려봐서 잘되는지는 모름-_-;)