2018년 10월 20일 토요일

3D 가족 앨범 만들기 - 8편 (머리카락 스캔 문제)

다시 제대로 해 보기 위해 1편 을 복습해 보기로 한다.

digital 로 3차원 공간을 스캔하려면 XYZ 로 표현 할 수 있어야 하는데, 일반 카메라는 2차원 사진밖에 찍을 수 없기 때문에, 3차원 사진을 찍으려면 IR (적외선) 기술을 이용해서 물체와의 거리를 측정하고 그것을 2차원 사진과 합쳐서 3차원 사진을 만들어 내는 것이다. 이 기술이 적용된 카메라를 depth 카메라 라고 한다.

이런 기술은 다양하게 개발 되었지만, 내가 스캔에 사용하는 방법은 pcl 에 realsense grabber 를 구현해서 kinfu_app 를 돌려서 스캔을 한다. 이말을 풀어서 다시 쓰면,

PCL = Point Cloud Library
grabber = 카메라 입력을 pcl 에 보내주는 도구
kinfu_app = Kinect Fusion

좀 더 풀어서 다시!
Point Cloud 는 '점이 모여서 만든 구름' 이라고 직역이 될 수 있는데, 말 그대로 3차원 공간을 한점한점 찍어서 만들어 내는 방식이다. 이 PointCloud 를 만들어 내는 library 가 PCL 이고 이 PCL 에게 카메라로 부터 읽어 들인 data 를 넣어 주는 것이 grabber 인 것이다.

Kinect Fusion 은 이런 걸 하는 Application 이다.
이 Kinect Fusion 이 무려 2011년에 소개 된 것이라면 믿겠는가...

KinFu 에서 사용할 수 있는 카메라는 여러가지가 있는데, 아이가 있는 집에 하나쯤은 있었던 Xbox360 키넥트가 그 중 하나다. 그런데 세월이 오래 된 키넥트 카메라가 스캔할 수 있는 해상도가 그다지 좋지 못하다. 대략 이정도?
1편에서 키넥트로 스캔했던 나
지금은 2018년 이니 당연히 그떄보다 좋은 depth 카메라가 많이 나와 있다.
그 중에 가장 저렴하게? 구할 수 있었던 녀석이 인텔에서 만든 Realsense 라는 녀석이었던 것이다.

Realsense 로 스캔을 하면 이렇게 정밀 해 진다.
 1편에서 스캔했던 나
3D 프린팅 해 주면 이런 모습이 되는 것이다.
1편에서 출력했던 나
여기 까지가 1편의 복습 이었다면, 이제 무언가 나아진 모습을 만들어 내야 하는데...
일단 다시 한번 스캔해서 출력해 보기로 했다. 그런데... 어? 다시 하려고 하니 도대체 되지를 않았다. 1편때는 가볍게 스캔하고 한방에 출력했던 것 같은데....

'카메라를 책상에 올려 두고, 회전 의자에 앉아 한바퀴 쓩~'
했는데 이런 결과만 나올 뿐이었다.
최선을 다했지만 구멍이 슝슝
음.. 무엇이 문제일까.
머리카락이 검은색이어서 그럴까? 그런데 다른 검은색들은 잘 스캔이 된다.
혼자서는 해결이 안되서 딸의 친구들을 데려 왔다.
머리카락의 비밀을 풀어줄 친구들
검은색이 문제라면 오른쪽 미니 마우스가 잘 스캔이 안되어야 한다.
미니미 스탠 잘됨
그런데. 두둥. 미니 마우스는 한방에 스캔이 됐다. 그렇다면 검은색이 문제는 아닌것이다.

그럼 이번에는 복실이
스캔이 안되는 복실이
엇. 내 머리카락과 같은 현상이 보인다.
유추해 보건데 색이 문제가 아니라 불규칙한 패턴으로 인해 적외선이 반사가 되지 않아서 거리를 측정하지 못하는 것 같다.

헐 그렇다면 머리카락 문제를 마땅히 해결할 방법이 떠오르지 않는다.
360도 스캔 장치를 멋드러지게 만들어도 머리카락이 스캔이 되지 않으면 무용지물 아닌가.
예전에는 그것도 모르고 스캔 장치부터 만들려고 했던 것이다. 헐...

그렇다면 1편에서는 왜 된것일까?
아!! 저때는 막 미용실에서 짧은 투블럭을 하고 제품을 발라서 머리를 딱 붙인 상태 였다.
사실 자세히 보니 저때도 완벽한 스캔은 되지 않았던 것이다. 심지어 귀는 구멍이 슝슝.
헐.. 3D 스캔 한번 하자고 머리를 자르고 제품을 바르라고 할 수는 없는 노릇인데.

자..자.. 침착하게 다시 한번 생각을 해보자.
'머리카락을 제대로 스캔할 방법이 없다'는 것을 인정하고 차선책을 찾아야 한다. 일단 생각나는 방법은 2가지 정도인데,
1. 이미 모델링 된 가짜 머리 모델을 합쳐서 스캔 데이터를 만드는 방법
2. 최대한 머리카락을 뭉개서 디테일을 떨어트리는 방법

1번 방법은 인터넷에서 쉽게 찾아지지 않았고 정밀한 머리 모양 모델은 유료로 상당히 비쌌다.
그렇다면 2번의 방법으로 해 봐야 하는데, 스캔을 여러번 하면서 머리를 뭉개서 대충의 형상을 만들 수 있는 설정값을 찾아봤지만 스캔으로 적정한 모델을 찾는 방법은 못 찾았다.
그런데 meshlab 에서 스캔한 data 를 살펴보다가 우연히 Surface Reconstruction 메뉴를 눌러 봤는데.... 우와!!! 바로 내가 원하던 그 뭉개진 데이터가 만들어 졌다.
meshlab 에서 Surface Reconstruction 

그렇다면.. 여기에다 세밀하게 스캔된 얼굴을 만들어서
정밀한 얼굴을 본을 떠 두고

합친다면?
합친 모습
두둥!!!!!!! 이런 멋진 작품이 만들어 진다.

1편 때 보다 머리가 많이 길고 살이 쪄서 ㅋㅋㅋㅋ 좀 다른 모습이긴 하지만. 멋지지 아니한가.
바로 출력을 걸어 봤다.
출력중 한컷
끝까지 기다리지 못하고 중간에 한컷 먼저~~~
대박!!! 이정도면 정말 괜찮은 스캔 시스템이 만들어 진것 같다.

출력이 끝나서 사진 추가~
출력 완료~

진화하는 내 모습들~

댓글 없음: