Structure From Motion (SfM) 시험 ~ OpenCV3.3.1 + SfM 모듈 (Ubuntu 16.04) ~

이번에는 Structure From Motion (SfM)에 대해
OpenCV(3.3.1) + SfM 모듈을 사용하여 샘플을 실행해 보았습니다.

Structure From Motion(SfM)이란?



Structure From Motion은 여러 이미지에서 3차원 모양을 복원하는 기술입니다.
htps // 엔.ぃきぺぢ아. 오 rg / uki / St 루 c 얽힘 _ f 여 m_ 모치 온

실행 환경



· 우분투 16.04 LTS
· OpenCV 3.3.1

도입 절차



SfM 모듈 도입



참고)
htps : // / cs. 오펜 cv. rg/3.3.1/db/db8/단독 l_sfm_인 s 치치온. HTML

필요한 패키지 설치


sudo apt-get install libeigen3-dev libgflags-dev libgoogle-glog-dev

없으면 Cmake도 설치


sudo apt-get install cmake

Ceres Solver 빌드 및 설치


git clone https://ceres-solver.googlesource.com/ceres-solver
cd ceres-solver
mkdir build && cd build
cmake ..
make -j4
make test
sudo make install

OpenCV(3.3.1) + contrib 도입



참고)
htps : // / cs. 오펜 cv. rg/3.3.1/d7/d9f/개별 l_ぃぬx_いんsたっ l. HTML

필요한 패키지 설치


sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

튜토리얼에 나와 있지 않지만 필요한 패키지 (Viz) 설치


sudo apt-get -y install libvtk5-dev

Git Repository에서 최신 소스 코드 얻기


cd ~/<my_working_directory>
git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git

OpenCV(3.3.1) + contrib 빌드 및 설치


cd ./opencv
mkdir build
cd build

# cmake [<some optional parameters>] <path to the OpenCV source directory>
# オプション: OPENCV_EXTRA_MODULES_PATH=<path to opencv_contrib modules directory>
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local .. <path to the OpenCV source directory>
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=<path to opencv_contrib modules directory> ..

# make
# ジョブ数:8 (任意)
make -j8

# make install
sudo make install

샘플 코드 실행



참고)
htps : // / cs. 오펜 cv. rg/3.3.1/d5/다 b/개별 l_sfm_t등지 c와 ry_에스치마치온. HTML#gsc. b = 0
htps : // 코 m / 치 오치카 c 치아 티 / ms / 178d23508b92 A09E 59E
htps // 이와키 2009. bgs포 t. jp / 2016/01 / 우분츠 1404_7. HTML

trajectory_reconstruccion.cpp 컴파일


cd <path to opencv_contrib directory>/modules/sfm/samples/
g++ -o trajectory_reconstruccion trajectory_reconstruccion.cpp `pkg-config --libs opencv` -I/usr/local/include -I/usr/include/eigen3 -DCERES_FOUND=1

※오류 대응 메모
· 에러 케이스 1
/usr/local/include/opencv2/sfm/numeric.hpp:41:22: fatal error: Eigen/Core: No such file or directory
compilation terminated.
→ -I/usr/include/eigen3 옵션 추가

· 에러 케이스 2
trajectory_reconstruccion.cpp: In function ‘int main(int, char**)’:
trajectory_reconstruccion.cpp:148:77: error: ‘reconstruct’ was not declared in this scope
reconstruct (points2d, Rs_est, ts_est, K, points3d_estimated, is_projective);
→ -DCERES_FOUND=1 옵션 추가

Viz 패스를 통과


  • 라이브러리 경로 확인
  • ldd trajectory_reconstruccion
    

    not found 가 되어 있어 패스가 통과하고 있지 않다・・
        linux-vdso.so.1 =>  (0x0000~)
        libopencv_sfm.so.3.3 => /usr/local/lib/libopencv_sfm.so.3.3 (0x0000~))
        libopencv_viz.so.3.3 => not found
        ...
    
  • libopencv_viz의 경로를 통한
  • # ファイル生成
    cd /etc/ld.so.conf.d
    touch opencv_viz.conf
    

    파일 생성 후 opencv_viz.conf에/usr/local/lib를 입력하고 저장하고,
    ldconf.cache를 갱신 (※ 고속화를 위해 캐시로부터 읽어내기 때문에)
    # ldconf.cache 更新
    ldconfig
    

    경로 확인
    ldconfig -p | grep opencv_viz
    

    패스가 다니고 있는 것을 확인할 수 있었습니다.
        libopencv_viz.so.3.3 (libc6,x86-64) => /usr/local/lib/libopencv_viz.so.3.3
        libopencv_viz.so (libc6,x86-64) => /usr/local/lib/libopencv_viz.so
    

    trajectory_reconstruccion 실행


    ./trajectory_reconstruccion ./data/desktop_tracks.txt 1914 640 360
    

    실행하면 Viz가 시작됩니다.



    마우스로 각도를 바꿀 수 있는 것 외에 다음의 키를 사용할 수 있습니다.



    내용


    s
    카메라 시점으로 스위치

    q
    종료


    scene_reconstruction 실행



    사쿠라다 파밀리아를 촬영한 4장의 화상으로부터 3차원 정보를 복원합니다.
    ※화상은 여기 입니다.
  • 컴파일
  • g++ -o scene_reconstruction scene_reconstruction.cpp `pkg-config --libs opencv` -I/usr/local/include -I/usr/include/eigen3 -DCERES_FOUND=1
    
  • 실행
  • ./scene_reconstruction ./data/images/dataset_files.txt 350 240 360
    

    Viz가 시작되고 사쿠라다 파밀리아의 점 구름이 표시됩니다.
    하단 선의 노란색 점은 카메라에서 촬영 위치입니다.





    내용


    q
    종료


    이상, Structure From Motion (SfM)으로 OpenCV (3.3.1) + SfM 모듈을 시도했습니다.

    좋은 웹페이지 즐겨찾기