SOARISTO工房 Logo
Electronics Archive

 前回の続きです。OpenCVの関数を使って、位相画像を生成してみます。 

 画像をfとすると、fの離散フーリエ変換(Discrete Fourier Transform)は、以下の式で表されます。

Discrete Fourier Transform Formula

 得られた空間周波数スペクトル(複素平面)を、その振幅の絶対値で除することにより正規化します。

Discrete Fourier Transform Formula

 この複素平面を逆離散フーリエ変換することにより、位相画像rを得ます。

Discrete Fourier Transform Formula

 複素平面における正規化により、振幅信号(情報)が1になり、位相信号(情報)が残ることになります。

 さっそく検証してみます。

OpenCV Phase Only Correlation lena

 まずは評価用の画像。

#画像処理の世界では最も有名(?)な女性、Lenaさんです。0xF9CB

OpenCV Phase Only Correlation lena

 空間周波数スペクトルの画像。
(ハン窓を掛けてから離散フーリエ変換(cvDFT())し、四象限を入れ替え(cvShiftDFT())てあります)

 またも、前回からだいぶ間が開いてしまいましたが、とある“構想”がありまして、それに向けたスタディーです。

Camera Lens Distortion

 物体を広角レンズで撮影すると、レンズの四隅にいくほど、物体が引っ張られたような「歪み」が生じます。この歪み(レンズ歪み)は、使用するレンズによって、それぞれ特性が微妙に異なります。

 レンズ歪みを補正するためには、Photoshopなどに組み込まれているフィルターを使う方法がありますが、これはあくまで簡易的なものであって、使用するレンズに合致したものではありません。

 OpenCV(Open Source Computer Vision Library)には、このレンズ歪みの特性(歪み係数)を推定して、画像を補正する関数が備わっています。

 最終的には、Jetson TK1上で実時間で動作させるとして、まずはWindows7上でテストすることにしました。

Sony αNEX-5R

 評価用となるカメラです。

 Sonyの「αNEX-5R」に、「フィッシュアイ」(VCL-ECU1)と「パンケーキ」(SEL16F28)を組み合わせています。

 前回の続きです。

nVIDIA Jetson TK1 CUDA smoke

〔CUDA Toolkitのインストール〕

 Jetson TK1上に作業用ディレクトリ(/cuda)を作成。

$ mkdir ./cuda
$ cd cuda/

 「Jetson TK1 support」より、最新のツールキットをダウンロードし、/cudaに保存。
(現時点では、CUDA 6.0 Toolkit for L4T Rel -19.2)

 ツールキットをインストール。

$ sudo dpkg -i cuda-repo-l4t-r19.2_6.0-42_armhf.deb
$ sudo apt-get update
$ sudo apt-get install cuda-toolkit-6-0

 ユーザ(ubuntu)をvideoグループに追加。

$ sudo usermod -a -G video $USER

 .bashrcの末尾にcuda-6.0のPATHを記述。

$ vim ~/.bashrc
# add CUDA bin & library paths.
export PATH=/usr/local/cuda-6.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-6.0/lib:$LD_LIBRARY_PATH

 PATHを反映させ、PATHが通っているかを確認。

$ source ~/.bashrc
$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2013 NVIDIA Corporation
Built on Sat_Mar_15_02:05:29_PDT_2014
Cuda compilation tools, release 6.0, V6.0.1

 カレントディレクトリに、サンプルプログラム(のソース)をインストール。

$ cuda-install-samples-6.0.sh .

 サンプルプログラムをmakeし、実行ファイルを生成。

$ cd NVIDIA_CUDA-6.0_Samples/
$ make

 正常に生成されていれば、各ディレクトリの下に実行ファイルが保存され、以下のサンプルプログラムなどが実行可能。

$ 1_Utilities/deviceQuery/deviceQuery

Drive Recorder Test Image
(テスト画像1-左)

Drive Recorder Test Image
(テスト画像1-右)

 前回の続きです。

nVIDIA Jetson TK1

〔ファイルシステムの準備〕

 ホストマシン(Ubuntu 14.04 LTS)上に作業用ディレクトリを作成し、「Linux For Tegra R19」より、最新のファイルシステムとドライバをダウンロード。
(現時点では、R19.3.0)

$ mkdir ~/Jetson
$ cd Jetson/
$ wget https://developer.nvidia.com/sites/default/files/akamai/mobile/files/L4T/Tegra_Linux_Sample-Root-Filesystem_R19.3.0_armhf.tbz2
$ wget https://developer.nvidia.com/sites/default/files/akamai/mobile/files/L4T/Tegra124_Linux_R19.3.0_armhf.tbz2

 ファイルシステムとドライバを展開。

$ sudo tar xpf Tegra124_Linux_R19.3.0_armhf.tbz2
$ cd Linux_for_Tegra/rootfs/
$ sudo tar xpf ../../Tegra_Linux_Sample-Root-Filesystem_R19.3.0_armhf.tbz2

 書き込み用ファイルを生成。

$ cd ../
$ sudo ./apply_binaries.sh

〔ファイルシステムの書き込み〕

 ホストマシンにJetson TK1をUSBケーブルで接続し、リカバリモードで起動。
(Force Recoveryボタンを押下しながら電源を入れ、Resetボタンを押下)

 Jetson TK1が認識されているか確認。

$ lsusb | grep -i nvidia
Bus 001 Device 002: ID 0955:7140 NVidia Corp.

 Jetson TK1の内蔵メモリ(eMMC)へ、確保可能な最大容量のパーティション(約14GB)で書き込み。
(内蔵メモリ(16GB)に対し、標準では8GBのパーティションが切られている)

$ sudo ./flash.sh -S 14580MiB jetson-tk1 mmcblk0p1

 書き込みが完了すると(約30分)、Jetson TK1が再起動する。