画像処理

画像座標系からカメラ座標系への変換

画像座標点をカメラ座標点に変換することを考えてみます。 タイトル詐欺で申し訳ないですが、結論から言うと画像座標点をカメラ座標点への変換はできません。できるのはカメラ座標系原点からカメラ座標点方向へのベクトルを計算することだけです。まぁ、2次...
Android

The Android Gradle plugin supports only Kotlin Gradle plugin version 1.2.51 and higher ~Kotlin Gradle pluginのバージョンが古いと怒られた話~

エラー久しぶりにAndroid Studioを起動して、促されるままに諸々バージョンアップしたら、↓↓のように怒られて作ってたアプリのbuildが失敗するようになってしまいました。そのうちまた出会いそうな予感がするので、対応メモを残しておこ...
プログラミング

Ceres Solverのビルド on Windows10 + Visual Studio 2017

Ceres SolverはGoogle謹製の非線形最小二乗問題のソルバーライブラリです。 とても便利に使わせてもらってるのですが、毎回ビルドに躓くので、ビルド手順をメモっておきます。今回はCXSparseもSuiteSparseもすべて使っ...
プログラミング

OpenCVのfindEssentialMatでの内部パラメータの用途

5-point algorithm (5点アルゴリズム)を使いたくて、OpenCVに確か実装されてたよなーって思って調べてみると、なぜか関数の入力に内部パラメータが必要とされていました。OpenCVの5-point algorithmはこの...
開発環境

個人的おすすめVisual Studio拡張機能

WindowsでC/C++の開発をするときはVisual Studio 2017を使っているのですが、OS再インストールしたりPC新調するたびにどんな拡張機能入れてたか忘れて地味に困るので、記事に残しておくことにしました。 ログの出力に色を...
画像処理

SfMのOSS:Bundlerを動かしてみる in Windows 10 (動きませんでした)

最初に結論を述べておくと、Windows 10でBundlerは動きませんでした。ごめんなさい。 動かないまま力尽きたものの、結構頑張って動かそうとしたので、その軌跡をまとめました。 SfMのOSSであるBundlerは、Linu...
プログラミング

C言語のフレキシブル配列メンバ(flexible array member)、通称struct hack

PHPの内部実装がC言語なのは周知の事実かと思いますが、最近仕事でPHP7の内部実装をみる機会がありました。 そこで学んだC言語のflexible array member、通称struct hackというテクニックがなかなか面白かったので...
プログラミング

JavaのListIteratorのnext()とprevious()が同じ値を指す話

最近ListIteratorでハマったのでちょっと忘れないようメモです。ハマったのはこんなシチュエーションです。import java.util.LinkedList;import java.util.ListIterator;public...
画像処理

Bundlerのアルゴリズムを追ってみる 特徴点マッチング編 その3

前回や前々回は、2枚の画像ペアから特徴点の誤対応を除去する方法について説明しました。 この記事では、2枚といわずすべての画像を使って誤対応を除去する方法について説明します。 特徴点追跡による誤対応の除去 まず、各画像間の各特徴点マッチング...
画像処理

Bundlerのアルゴリズムを追ってみる 特徴点マッチング編 その2

前回は、Bundlerで使われている特徴点マッチングと、特徴点空間上の距離を使った誤対応の除去について説明しました。 この記事では、特徴点空間上の距離を使った誤対応除去の次に行う、エピポーラ幾何を使った誤対応の除去について説明します。 エ...
画像処理

Bundlerのアルゴリズムを追ってみる 特徴点マッチング編 その1

Structure from Motion(SfM)のオープンソース、Bundlerのアルゴリズムを追ってみます。 今回は、特徴点マッチングと、特徴点空間上の距離を使った誤対応の除去について解説してみます。 特徴点マッチング Bundle...
開発環境

Bash on Windows + cmderで快適なCUI環境の構築

Windows 10でBash on Windows(BoW)が導入されてから、なんだかんだでターミナル上で開発することが増えてきました。なので、自分流快適なCUIの開発環境構築をメモします。今回は、cmderというWindows用のターミ...
画像処理

Bundlerのアルゴリズムを追ってみる 概要編

Structure from Motionで多分一番有名なOSSである、Bundlerの処理を追ってみます。 何回かに記事を分けて解説していくつもりなので、途中で力尽きたらごめんなさい。。。 Bundlerの公式サイトはこちらです。 B...
画像処理

バンドル調整とは

SfMとかSLAMの3D系の研究を始めると、必ず出てくるのがバンドル調整(Bundle Adjustment)です。ぶっちゃけただの非線形の最小二乗法なんですけど、今回はこのバンドル調整について解説します。 バンドル調整、またはバンドル調...
画像処理

透視投影変換を展開してみる

以前、透視投影変換について解説しました。 変換式はこんなのでしたよね。 で、この式の\(s\)って邪魔じゃないですか? こいつがあるせいで、上の式の右辺を計算した後、最後に\(s\)で割るっていう、2段階手順が必要になっちゃうん...
画像処理

透視投影変換とは

3次元系の画像処理の勉強では、透視投影カメラモデルの理解は必須です。 そんなわけで今回は透視投影カメラモデルについて解説してみたいと思います。 (といっても、過去の記事でほぼ解説してしまった気がするので、この記事は簡単にまとめたものなります...
画像処理

内部パラメータ(焦点距離)の単位の話 ~pixelとmmの変換~

さて、今回は内部パラメータの単位について解説してみたいと思います。皆さんご存知の通り、透視投影変換は世界座標 ↓ カメラ座標 ↓ 画像座標の順で、世界座標を画像座標に変換していて、現実世界の3次元物体が画像上のどこに投影されるのかを示したも...
画像処理

カメラ内部パラメータとは

前回は外部パラメータの意味を解説しました。なので今回は、外部パラメータと双璧をなす?内部パラメータの意味を解説してみたいと思います。内部パラメータとは内部パラメータとは、一言でいうと「カメラ座標を画像座標へ変換する行列」のことです。式で表す...
画像処理

カメラ外部パラメータとは

外部パラメータとはなんぞや?という話ですが、一言でいうと「世界座標をカメラ座標に変換する行列」のことです。式で表すとこうですね。待て待て、それだけ言われてもわからない。という人の為に、もう少し詳しく解説してみたいと思います。外部パラメータの...