728x90
얼굴영역 추출과 피부색 추출에 관한 논문이 상당히 많이 있다. 하지만 논문에 나오는 내용이 그다지 믿음직스럽지가 않다.
어제는 HSV에서 Hue값을, YCbCr에서 Cr값을, YUV에서 U값을 가지고 피부색을 추출하면 피부색만 거의 정확하게 추출할 수 있다는 논문을 봤다. 수식도 없고 다만 분포도만 나와있었다.
실제 검사를 해보니 해당 값들의 분포가 상당히 좁아서 사용해도 될 것이라는 생각이 들었다. 하지만 막상 실험을 해보니 peer보다 훨씬 못한 값들이 나왔다. 일부 사진에 맞춰놓은 값을 사용하면 그와 비슷한 환경에서 찍은 사진은 잘 적용이 된다. 하지만 내가 하고 있는 것은 다양한 곳에서 찍은 증명사진으로 얼굴을 구분해내는 작업이기 때문에 논문에 맞추기 위한 사진을 찍을 수는 없다.

그런 면에서 보면 프로젝트를 진행하는 것보다 조작 논문을 쓰는 것이 훨씬 쉽다는 생각이 든다. 물론 자신들도 제대로 실험하고 그 결과를 논문으로 쓰고 싶었겠지만 워낙 잘 안되는 분야다보니 조작된(이라기 보다는 잘 나오는 사진들을 가지고 적용한 결과만 있는) 논문이 많다.

=================================================
눈 부분 추출은 여러가지 방법을 사용해봤는데 결국엔 gray로 바꾼 후에 눈 영역만 가지고 대비를 증가시키는 histogram형활화를 시킨 다음 어두운 부분을 추출하는 것이 가장 결과가 좋았다.
=================================================
오늘은 눈의 중심을 잡고 그 중심을 이용하여 이미지를 회전시키는 작업을 해야겠다. 
지금도 그 부분은 구현되어 있지만 1회 진행하는 것으로 그친다. 그것을 양쪽 눈 중심의 Y값이 같을 때까지 반복수행 해야겠다.
728x90
728x90

그냥 test용으로 작성한 코드라 대강대강 만들었다.
대략 알고리즘은 주변 값들과 비교해서 피부영역이 많으면 피부영역으로 잡고 제거된 부분이 많으면 같이 제거하는 방식이다.


노이즈제거 전
<노이즈 제거 전>

노이즈제거 후
<노이즈 제거 후>
728x90
728x90

ycbcr(EmguCV에서는 YCC)형태의 이미지를 이용하여 피부색 영역을 추출하였다. 이미지 자체에 작업하기보다는 이미지와 같은 size의 int형 2차배열을 생성하여 배열에 label을 붙였다.

피부색을 추출하기 위해 사용하는 알고리즘으로 Peer와 Kismet을 많이 사용하는데 막상 적용해보니 결과가 그리 좋진 않았다. HSV로 이미지를 변환한 다음 Hue 분포를 이용하여 피부영역을 추출하는 것도 꽤 결과가 좋았다. 다만 많은 논문에서 주장하는 것처럼 채도값을 같이 사용하기에는 무리가 있었다.





허락없이 불펌당한 아기님 사진 죄송;;
hsv가 꽤 괜찮았고.. peer와 YCbCr중 어떤 것을 선택할 지 고민중

728x90
728x90

카메라를 사용했는데 회사에 전화를 해봤더니 WindowXP, OpenCV 0.9, MFC 환경에서만 돌아간다고 한다. dll화 시켜서 우리가 편집을 할 수 없고 소스도 공개할 수 없다고 한다.
결국 C#으로 돌리진 못한다는 말이다.
소프트웨어 지원은 제대로 안 해주지만 노트북에 달려있는 webcam보다 형태인식이 명확해서 꼭 사용해보고 싶다. 그래서 MFC로 영상을 받아와 저장하는 것만 프로그램을 만들고 C#과 연동하여 사용할까 생각중이다.
특징점 추출은 AAM방식을 이용하고 알고리즘을 조금 추가해서 사용할 예정이다.
AAM은 API도 있다고는 하는데 역시 C#용으로 나온 것은 없어보인다. 찾아보고 API용 소스가 있으면 변환해서 사용해봐야 겠다.
728x90

+ Recent posts