'액션스크립트3.0'에 해당되는 글 1건

  1. 2010.07.13 3D 스캐너 만들기 (프로젝터와 웹캠만으로) (21)
3D2010.07.13 23:15

따뜻한 봄 날,  3D관련 전시회에 갔다가 신기한 녀석을 봐 버렸습니다.
빔프로젝터에 카메라가 달려있는 녀석이었는데,  이게 3D 스캐너라는 겁니다.
보자마자 원리가 보이더군요... 하지만 이게 정말 된단 말이야???


[사진1. 코엑스 3D영상기기 전시회에서 본 빔프로젝터 이용한 3D 스캐너 ]

예전부터 3D스캐너를 만들고 싶다는 생각은 했지만,  고가의 레이져 장비가 있어야 된다는 생각에 포기했었는데요,
뒤통수 맞은 기분이었습니다.  아니, 생각의 덫이 하나 떨어져 나가서 홀가분해졌다고 해야할까요!!

어쨌든, 중요한건,,,,  오홋! 그럼 나도 만들 수 있겠다.

그래서 일단 만들어봤습니다.
준비물은 매우 간단한 편입니다.

하드웨어: 일반 USB웹캠 1대(2대면 더 좋음),  빔프로젝터 1대,  고정용 스탠드.
개발환경: 제 경우 플래시 액션스크립트 3.0으로 직접 구현하는 것을 목표로 하였습니다.
              ( 보통은 C/C++, MATLAB,  기타 Tool을 이용하더군요,  관련링크 참조)



[사진2. 자작 3D 스캐너 - 웹캠 1대와 빔프로젝터 1대로 구성]

참고사항. 함께 설치된 Wiimote 2개는 IR Tracking용으로 일반적인 3D 스캐닝 용도로는 없어도 됩니다.



[동영상1. 스캐닝 후 공간분할이 잘 되었는지 확인하는 영상입니다. ]





[동영상2. 스캔 결과 Data(3D Points Cloud)를 별도의 MeshLab 뷰어로 확인해 봤습니다. ]

수만개의 단색 점을 3D 공간에 표시하기만 해도 대략적 형상이 나오는것을 확인 할 수 있습니다.



[동영상3. 몇가지 스캔 결과물을 모아놓은 영상입니다. ]

1. 종전의 영상은단색 점인것과 달리 본 영상의 점은 색상있는 점입니다.
2. 수만개의 점중에 일부 점만 무작위 추출하여 매핑을 한 영상입니다.
3. 위 결과를 라운드 처리하여 본 결과입니다.
4. 벽면의 붙인 그림을 스캔할 결과물입니다. 평면의 물체가 굴곡면으로 스캔된 것을 볼 수 있습니다.
    렌즈굴곡 보정을 안해줘서 그런것 같습니다.


사실 아직 완성된건 아니고, 렌즈굴곡보정, 노이즈처리, Point Cloud로 Polygon 형성, 3D Viewer 등등의 작업이 남아있습니다. 차후에 좀더 개량을 해야하겠습니다.  가능하면 관련 이론 소개를 별도의 문서로 올려보도록 하겠습니다. 새로운 참고자료도 본 글을 통해 업데이트 하도록 하겠습니다.


추가사항(2010.Nov.15)

스캔원리에대해 요약 소개:

링크 자료중 byo3d pdf 문서를 보시면  chapter5  structured lighting 이라는 개념이 있습니다.
사실 이게 빔프로젝터로 3D스캐너를 만드는데 있어서 핵심내용입니다.
카메라와  빔프로젝트가 거리 L만큼 떨어져있고,  빔에서 선이 하나 발사되어 벽에 반사되어 카메라로 캡쳐되는 상황을 가정해보시면 카메라와 프로젝터의 상대각을 구할 수 있고, 간단한 삼각함수만으로 그 점의 3차원 x,y,z 좌표값(카메라+빔프로젝터를 기준으로한 상대적인)을 구하실 수 있을겁니다.  

사실 이것만으로도 3d스캐닝이 가능합니다. 빔프로젝터에서 점을 이동하면서 카메라에서 그 위치를 캡쳐하게되면, (매우 느리겠지만) 원하는 point cloud를 구할 수 있습니다. 근데 문제는 너무 느려서 비효율적입니다. 점하나당 한번의 캡쳐를 해야한다는 결론이나오므로 실용성이 없습니다.

그래서 Structed Lighiting 이라는 방식이 도입되었습니다.
이 방법을 사용하면 n번의 갭쳐만으로 2^n * row  개의 기준화소점군(라인)을 구해낼 수 있게됩니다.
즉, 8장을 캡쳐하는것 만으로도 256개의 기준선을 추출할 수 있고, 각 기준선마다 m개의 화소를 추출할 수 있게되어,  한차례( 해상도에 따라 다름: 가령 8장 안팍)의 연사촬영만으로 수만개의 화소점을 구해낼 수 있게됩니다.

원리는 빛을 동일한곳에 다른 패턴으로 방사하고 촬영한 후 이 값들을 단순히 누적하기만 하면, 거의 화소단위로 영역이 구분이 된다는 것입니다. byo3d pdf문서를 잘 살펴보시면 원리를 알게될 겁니다. 

링크6. 정보가 추가 되었습니다. 

정보를 제공해주신 분에의하면 해당 자료를 다운받아 따라해보니 스캔 결과물도 괜찮게 나온다고 하셨습니다. 1대의 웹캠과 1대의 빔프로젝터, 90도 직각으로 설계된 캘리브레이션 도구를 이용하여 3d 스캐너를 구현한 방식입니다.


추가사항(2010.DEC.10)


사진. 단계노출 및 그로부터 계산된 line으로 그룹화된 점 정보들.

최하단의 결과 이미지에서 동일한 색상 및 명함으로 이뤄진 화소점들(Line)을 구해낸것을 볼 수 있습니다. 이 결과값으로 화소점들의 3D 좌표값을 구할수 있습니다.


사진. Point Net 씨우기

계산할 점의 개수가 너무 많으므로 일부만을 선택하여 사용하기 위해서 특정 점들만 선택하는 과정입니다. 왼쪽이 Convert 이전의 상태이며, 이때 일부 점들은 수동으로 위치시킬 수 있으며(얼굴부분) 나머지는 자동으로 가장 근처에 있는 점이 선택되어 최종적인 3D 좌표값으로 변환되게 됩니다.


사진. 3D스캐닝 세트 전경



관련자료
1. 제가 아는한 자작 3D스캐너와 관련하여 가장 자세한 기술소개문이 있는 사이트입니다.
   소스와 유틸리티, 원리소개등의 모든자료가 있다네요.    http://mesh.brown.edu/byo3d/index.html
  
2. 위 사이트에서 배포하는 기술소개문 pdf 파일입니다.  http://mesh.brown.edu/byo3d/notes/byo3D.pdf
3. 3D Photography on your desk  http://www.vision.caltech.edu/bouguetj/ICCV98/
    한수 더 떠서 막대기와 조명기구만으로 만드는 3D스캐너입니다. 
4.  Model-Based Face Capture from Orthogonal Images 사진 두장으로 3D얼굴 재현하기 입니다.
     http://mesh.caltech.edu/ee148/projects/EngLanmanMayes/
5. 독일 공항에 설치된 화려한 색광을 사용하는 얼굴스캐너  http://mtcave.blogspot.com/2009/09/face-scanner-test.html

6. 켄터키 대학에서 구현한 3d 스캐너: http://www.engr.uky.edu/~lgh/soft/soft.htm 


저작자 표시 비영리 변경 금지
신고
Posted by 로보밥 로보밥

댓글을 달아 주세요

  1. 정선기

    저는 3d 스캐너나 관련 지식이 없는 대학생입니다.
    물체의 평행한 측면형태를 얻기위해 3d 스캐너가 필요하게 됐는데요.
    아무 지식없는 제가 3d 스캐너를 만들수 있을까요?
    소요시간은 얼마나 걸릴지 궁금합니다.

    2011.08.08 20:11 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 일단 관련정보를 수집하셔서 숙독하시고, 직접 구현한다는 생각으로 원리를 이해해보시면 가능하실 것 같습니다.
      메일 보내주셔서 답변드렸습니다.
      별도움은 안되겠지만 참고 하시기 바랍니다. ^^.
      간혹 수신이 안되는 경우가 있으니 미수령시엔 다시 메일주시기 바랍니다!

      2011.08.09 00:19 신고 [ ADDR : EDIT/ DEL ]
  2. 비밀댓글입니다

    2011.08.27 13:58 [ ADDR : EDIT/ DEL : REPLY ]
    • 안녕하세요
      저는 상업적은 물론이고 개인적인 용도로도 완성된 스캐너시스템을 만든것은 아닙니다. 글에 소개되었듯이 렌즈굴곡처리등의 기본작업 조차도 무시하고 실험적인 구현만 해본 상태입니다. 다만, 웹캠과 프로젝터만으로도 수mm 해상도의 정교한 스캐닝이 기술적으로 가능하고 링크에 소개된 일부 프로젝트에서 확인이 가능하십니다. 또한 석고상은 고정물이고 표면색상도 단색이므로 스캐닝이 매우 유용한 피사체로 판단됩니다.
      단, 스캐닝 과정(포인트 클라우드 구하기)보다도 이를 반복하고 이를통해 표면데이타(Polygon)를 얻게해주는 해석프로그램이 어찌 보면 더 큰 비중이 될 수 도 있는것 같습니다. 참고하시기 바랍니다.

      2011.08.27 15:38 신고 [ ADDR : EDIT/ DEL ]
  3. 비밀댓글입니다

    2011.11.12 19:56 [ ADDR : EDIT/ DEL : REPLY ]
    • 글쎄요,3D 스캐너 전용 빔프로젝터가 있는지는 모르겠습니다. 3D스캐너 개발사에서 성능개선을 위해 특화된 프로젝터를 개발하여 사용할수는 있을것 같습니다.

      2011.11.15 07:18 신고 [ ADDR : EDIT/ DEL ]
  4. dakar

    artrobot 에 들렸다 우연히 이곳에 오게 됐습니다.
    생각외로 다양한 장르?의 작품들로 게시판들을 채워놓으셨군요. 좀 더 일찍 알았더라면 하는 아쉬움도 있습니다만,
    그만큼 앞으로 자주 방문하면 되겠지요^^
    3D 스캐너를 구현하는 색다른 방법 잘 봤습니다. 혹시 다른 방식으로도 3D스캐너 구현을 원하시면 Xbox360의 악세사리인 Kinect도 고려해 보심이 어떨지요. 외국사이트들에선 Kinect를 응용한 다양한 개발킷들이 나오고 있는 모양입니다. Kinect의 뛰어난 스테레오 입체 동작 감지 기술이라면 충분하지 않을까 합니다.

    2011.12.22 22:16 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 반갑습니다 ^^.
      네 저도 Kinect를 요리해보고 싶었는데요 아직 못했습니다;;
      해상도가 중요하지 않은 빠른 스캐닝을 할경우 키넥트가 훨씬 좋은 선택일것 같네요..

      2011.12.23 01:48 신고 [ ADDR : EDIT/ DEL ]
  5. 비밀댓글입니다

    2012.02.14 05:26 [ ADDR : EDIT/ DEL : REPLY ]
    • 안녕하세요
      보통 cloud points 에는 색상 정보가 없으므로 스캐닝과 동시에 별도의 사진촬영후 스킨데이타를 매시에 매핑시켜야 컬러 결과물이 나오는것으로 알고있습니다. reconstruction까지 하셨으면 이미 저보다 진도가 많이 나간 것이므로 저보다는 관련 전문가분에게 문의하셔야 배우는게 있으실것 같습니다. ^^.

      2012.02.14 21:16 신고 [ ADDR : EDIT/ DEL ]
  6. 비밀댓글입니다

    2012.06.07 16:09 [ ADDR : EDIT/ DEL : REPLY ]
  7. 비밀댓글입니다

    2012.08.08 07:29 [ ADDR : EDIT/ DEL : REPLY ]
  8. doodrim86

    학부 졸업논문이 작성자님과 똑같은 3D스캐닝을 하는것입니다. 추후에 계속해서 질문좀 많이 드려도 될런지요 ㅎㅎ

    학기가 시작하면 바로 들어가야 하는데 그저 막막하네요 ㅎ 좋은 자료 감사합니다 ㅋ

    시도해 보고 모르는 부분있으면 질문하겠습니다^^

    2012.08.17 02:02 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 우선은 직접 자신만의 방법으로 제작한다고 생각해보는 시간을 갖아보시기 바랍니다. 그 후 링크된 자료들을 참고하시면 도움이 많이 되실것 같습니다.

      저도 초급자이니 물어보지 마셔용 ^^.

      2012.08.19 23:11 신고 [ ADDR : EDIT/ DEL ]
  9. 드림로보

    정말 멋진 자작기 잘 봤습니다. ^^
    내용중 Wiimote 2개는 IR Tracking용으로 달았다고 하셨는데 IR Tracking이 뭔지 궁금합니다..

    2012.10.12 20:12 신고 [ ADDR : EDIT/ DEL : REPLY ]
  10. 안녕하세영

    질문있습니다

    제가 각 점의 xyz 좌표를 뽑는것까지는 했는데요

    meshlab으로 확인하실때 어떻게 하셧나요??

    파일만드실때 어떻게 만드셧는지 알고싶네요

    2013.01.04 16:20 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • Meshlab 에서 읽어들일수 있는 포멧중에 binary형식이 아닌 txt파일 형식이 있습니다. 간단한 사각형을 만드셔서 이포멧(txt형)으로 저장하신후 포맷을 분석하시고 그 포맷에 맞도록 txt파일을 생성한 후 MeshLab에서 읽어들이시면 됩니다.

      2013.01.05 10:28 신고 [ ADDR : EDIT/ DEL ]
  11. 안녕하세요

    글을 보고 따라 만들어 보고 있는 대학생입니다 ㅎㅎ
    다름아니라 저희는 레이저로 (파라렐 렌즈 ) 라인을 뽑아 만들었다가
    빔프로젝터를 사용해보려 하는데
    위 동영상 처럼 빔 프로젝터 라인을 어떻게 뽑으셨는지 궁굼해서 글을 남깁니다 ㅎㅎ

    2013.11.18 07:36 신고 [ ADDR : EDIT/ DEL : REPLY ]