소소한 컴퓨터 이야기

역투영

by Cori

앞서 배운 2차원 히스토그램과 HSV 컬러 스페이스를 이용하면 색상으로 특정 물체나 사물의 일부분을 배경에서 분리할 수 있다.

기본 원리는 물체가 있는 관심영역과 H와 V 값의 분포를 얻어낸 후 전체 영상에서 해당 분포의 픽셀만 찾아내는 것 

 

* 해당 포스팅에서 다루고 있는 모든 내용은 다음 서적을 참고하였습니다.

 

파이썬으로 만드는 OpenCV 프로젝트

“개발자에게 딱 필요한 만큼의 이론과 활용 가능한프로젝트로 배우는 OPENCV 프로그래밍”OPENCV는 영상 처리와 컴퓨터 비전 분야에서 현존하는 가장 영향력 있는 라이브러리이다.이 책은 누구나


내용 정리

1. 역투영

0) 정의

-> 히스토그램 역투영은 영상의 각 픽셀이 주어진 히스토그램 모델에 얼마나 일치하는지를 검사하는 방법으로, 임의의 색상 영역을

검출할 때 효과적이다. 역투영을 이용하면 알파 채널이나 크로마 키 같은 보조 역할 없이도 복잡한 모양의 사물을 분리할 수 있지만,

대상 사물의 색상과 비슷한 색상이 뒤섞여 있을 때는 효과가 떨어지는 단점도 있음 

 

* 역투영은 전체 영상의 색상 정보와 대상 객체의 색상 정보의 비율을 0~255 구간으로 노멀라이즈 한 것으로 볼 수 있다. 

  역투영 결과 값은 추적 대상 객체의 색상 값과 비슷한 영역의 픽셀들만 큰 값을 가짐 

 

1) 역투영 함수

-> cv2.calcBackProject(img, channel, hist, ranges, scale)

더보기

· img: 입력 영상, [img]처럼 리스트로 감싸서 표현

· channel: 처리할 채널로, 리스트로 감싸서 표현한다. (1채널: [0], 2채널: [0, 1], 3채널: [0, 1, 2])

· hist: 역투영에 사용할 히스토그램

· ranges: 각 픽셀이 가질 수 있는 값의 범위

· scale: 결과에 적용할 배율 계수 

 

2) 활용

선택한 관심 영역을 HSV 컬러 스페이스로 변경하고, H와 S채널에 대한 2차원 히스토그램을 계산한 결과를 역투영 함수에 인자로 전달

 

* masking() 함수: 스레시홀드와 마스킹을 거쳐 결과를 출력

  cv2.getStructuringElement(), cv2.filter2D() 함수: 마스크의 표면을 부드럽게 함

 

다음은 역투영을 수행한 결과물이다.

역투영의 경우 사물의 색상과 비슷한 생상이 뒤섞여 있을 때 효과가 떨어진다고 하였는데, 다음은 효과가 떨어지는 역투영 영상이다. 

효과를 별로 보지 못하는 역투영 영상

블로그의 정보

코딩하는 오리

Cori

활동하기