Tsai Camera Calibration Software -ソースのコンパイル-


概要

ここでは、Tsai Camera Calibration Software (http://www.cs.cmu.edu/afs/cs.cmu.edu/user/rgw/www/TsaiCode.html) で公開されているソースコードのコンパイルを行った際の手順を記載する。

動作環境

以下のような構成での動作を想定している。異なる場合は適宜読み替えること。

Windows XP Professional
Minimalist GNU for Windows
Visual Studio 2005 Academic Edition (Minimalist GNU for Windowsがあれば不必要)

手順

Minimalist GNU for Windows の入手・設定

http://sourceforge.net/projects/mingw/から、必要なファイルを入手する。 "GCC"・"GNU Binutils"・"GNU Make"・"MinGW Runtime"・"MinGW API for MS-Windows"あたりをインストールすれば良いだろう。

今回導入したファイルは以下の通りである(これらすべてが必要なわけではない)。
gcc-core-4.4.0-mingw32-bin.tar.gz
gcc-c++-4.4.0-mingw32-bin.tar.gz
gmp-4.2.4-mingw32-dll.tar.gz
mpfr-2.4.1-mingw32-dll.tar.gz
pthreads-w32-2.8.0-mingw32-dll.tar.gz
binutils-2.19.1-mingw32-bin.tar.gz
make-3.81-20090914-mingw32-bin.tar.gz
mingwrt-3.16-mingw32-dev.tar.gz
w32api-3.13-mingw32-dev.tar.gz
これらすべてを同一のディレクトリに展開し環境変数を設定する。環境変数の設定については以下を参考にすると良いかもしれない。

@ echo off
set GCC_EXEC_PREFIX=C:\mingw

set PATH=%PATH%;%GCC_EXEC_PREFIX%\bin
set PATH=%PATH%;%GCC_EXEC_PREFIX%\libexec\gcc\mingw32\4.4.0
set C_INCLUDE_PATH=%C_INCLUDE_PATH%;%GCC_EXEC_PREFIX%\include
set C_INCLUDE_PATH=%C_INCLUDE_PATH%;%GCC_EXEC_PREFIX%\lib\gcc\mingw32\4.4.0\include
set CPLUS_INCLUDE_PATH=%CPLUS_INCLUDE_PATH%;%GCC_EXEC_PREFIX%\include
set CPLUS_INCLUDE_PATH=%CPLUS_INCLUDE_PATH%;%GCC_EXEC_PREFIX%\lib\gcc\mingw32\4.4.0\include
set CPLUS_INCLUDE_PATH=%CPLUS_INCLUDE_PATH%;%GCC_EXEC_PREFIX%\lib\gcc\mingw32\4.4.0\include\c++
set LIBRARY_PATH=%LIBRARY_PATH%;%GCC_EXEC_PREFIX%\lib
set LIBRARY_PATH=%LIBRARY_PATH%;%GCC_EXEC_PREFIX%\lib\gcc\mingw32\4.4.0

Tsai Camera Calibration Software の入手

Tsai Camera Calibration Software (http://www.cs.cmu.edu/afs/cs.cmu.edu/user/rgw/www/TsaiCode.html にて ソースファイル"Tsai-method-v3.0b3.tar.Z"("tsai30b3.zip")を入手し、任意の場所に展開する。 また minpack ディレクトリに含まれているファイルは展開するべきではない。一緒に展開したのであれば削除しておくこと。

C/C++ Minpack の入手

C/C++ Minpack (http://devernay.free.fr/hacks/cminpack.html) にて、 "cminpack-1.0.2.tar.gz"をダウンロードし、Tsai Camera Calibration Softwareの展開先のminpackディレクトリ(空ディレクトリであること)に以下のファイルを展開する。
dpmpar_.c, enorm_.c, f2c.h, fdjac2_.c, lmdif_.c, lmpar_.c, minpack.h, qrfac_.c, qrsolv_.c

Makefile の作成

makefile.unxmakefileにコピーし、それを修正して正常にコンパイルできるようにする。以下のようにすればよい。

#
# Makefile
#
# compiler flags:  -O          - optimize code for execution speed
#

CC = gcc
CLIBS = -L. -lmnpak -lm
CFLAGS = -O
CALOBS = cal_main.o ecalmain.o cal_tran.o cal_eval.o cal_util.o matrix.o
MINPACKOBS = dpmpar_.o enorm_.o fdjac2_.o lmdif_.o lmpar_.o qrfac_.o qrsolv_.o
MINPACKLIB = libmnpak.a
SRCDIR = .

#########################################

ccal:		$(SRCDIR)/ccal.c $(CALOBS) $(MINPACKLIB)
	$(CC) $(CFLAGS) $(SRCDIR)/ccal.c $(CALOBS) $(CLIBS) -o ccal

ccal_fo:	$(SRCDIR)/ccal_fo.c $(CALOBS) $(MINPACKLIB)
	$(CC) $(CFLAGS) $(SRCDIR)/ccal_fo.c $(CALOBS) $(CLIBS) -o ccal_fo

nccal:		$(SRCDIR)/nccal.c $(CALOBS) $(MINPACKLIB)
	$(CC) $(CFLAGS) $(SRCDIR)/nccal.c $(CALOBS) $(CLIBS) -o nccal

nccal_fo:	$(SRCDIR)/nccal_fo.c $(CALOBS) $(MINPACKLIB)
	$(CC) $(CFLAGS) $(SRCDIR)/nccal_fo.c $(CALOBS) $(CLIBS) -o nccal_fo

ecal:		$(SRCDIR)/ecal.c $(CALOBS) $(MINPACKLIB)
	$(CC) $(CFLAGS) $(SRCDIR)/ecal.c $(CALOBS) $(CLIBS) -o ecal

xfd2xfu:	$(SRCDIR)/xfd2xfu.c $(CALOBS) $(MINPACKLIB)
	$(CC) $(CFLAGS) $(SRCDIR)/xfd2xfu.c $(CALOBS) $(CLIBS) -o xfd2xfu

wc2ic:		$(SRCDIR)/wc2ic.c $(CALOBS) $(MINPACKLIB)
	$(CC) $(CFLAGS) $(SRCDIR)/wc2ic.c $(CALOBS) $(CLIBS) -o wc2ic

ic2wc:		$(SRCDIR)/ic2wc.c $(CALOBS) $(MINPACKLIB)
	$(CC) $(CFLAGS) $(SRCDIR)/ic2wc.c $(CALOBS) $(CLIBS) -o ic2wc

csyn:		$(SRCDIR)/csyn.c gasdev.o $(CALOBS) $(MINPACKLIB)
	$(CC) $(CFLAGS) $(SRCDIR)/csyn.c gasdev.o $(CALOBS) $(CLIBS) -o csyn

ncsyn:		$(SRCDIR)/ncsyn.c gasdev.o $(CALOBS) $(MINPACKLIB)
	$(CC) $(CFLAGS) $(SRCDIR)/ncsyn.c gasdev.o $(CALOBS) $(CLIBS) -o ncsyn

#########################################

cal_main.o:	$(SRCDIR)/cal_main.h $(SRCDIR)/cal_main.c
	$(CC) $(CFLAGS) -c $(SRCDIR)/cal_main.c

ecalmain.o:	$(SRCDIR)/cal_main.h $(SRCDIR)/ecalmain.c
	$(CC) $(CFLAGS) -c $(SRCDIR)/ecalmain.c

cal_tran.o:	$(SRCDIR)/cal_main.h $(SRCDIR)/cal_tran.c
	$(CC) $(CFLAGS) -c $(SRCDIR)/cal_tran.c

cal_eval.o:	$(SRCDIR)/cal_main.h $(SRCDIR)/cal_eval.c
	$(CC) $(CFLAGS) -c $(SRCDIR)/cal_eval.c

cal_util.o:	$(SRCDIR)/cal_main.h $(SRCDIR)/cal_util.c
	$(CC) $(CFLAGS) -c $(SRCDIR)/cal_util.c

matrix.o:	$(SRCDIR)/matrix/matrix.h $(SRCDIR)/matrix/matrix.c
	$(CC) $(CFLAGS) -c $(SRCDIR)/matrix/matrix.c

gasdev.o:	$(SRCDIR)/gasdev.c
	$(CC) $(CFLAGS) -c $(SRCDIR)/gasdev.c

$(MINPACKLIB):   $(SRCDIR)/minpack/f2c.h \
                 $(SRCDIR)/minpack/dpmpar_.c \
                 $(SRCDIR)/minpack/enorm_.c \
                 $(SRCDIR)/minpack/fdjac2_.c \
                 $(SRCDIR)/minpack/lmdif_.c \
                 $(SRCDIR)/minpack/lmpar_.c \
                 $(SRCDIR)/minpack/qrfac_.c \
                 $(SRCDIR)/minpack/qrsolv_.c
	$(CC) $(CFLAGS) -c $(SRCDIR)/minpack/*.c
	ar rvc $(MINPACKLIB) $(MINPACKOBS)
	ranlib $(MINPACKLIB)
	del $(MINPACKOBS)

#########################################

all:	ccal \
	ccal_fo \
	nccal \
	nccal_fo \
	ecal \
	xfd2xfu \
	wc2ic \
	ic2wc \
	csyn \
	ncsyn

clean:
	del -f \
	*.a \
	*.o \
	ccal \
	ccal_fo \
	nccal \
	nccal_fo \
	ecal \
	xfd2xfu \
	wc2ic \
	ic2wc \
	csyn \
	ncsyn

lint:
	lint -Imatrix -Iminpack $(SRCDIR)/*.c $(SRCDIR)/matrix/*.c $(SRCDIR)/minpack/*.c

コンパイル

コマンドプロンプト上で、Makefileのあるディレクトリに移動し、mingw32-make allとうてばよい。
inserted by FC2 system