ComputerVisionまとめの部屋

役に立った情報や調査結果をまとめています

浮動小数点の比較①

浮動小数点の比較に関する投稿 2012年版ブルース・ドーソン著 ソース:https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/ この記事は、私が何年も前に書いた「浮動小数点数の比較」に関する記事をより慎重に検…

人工知能と産業・社会

〜第4次産業革命をどう勝ち抜くか〜 まとめこれまでの人工知能ブームと、近年話題になっている人工知能はどう違うのか。その応用性や社会に与える影響を、政治家の視点でわかりやすく説明、予測を行っている。人工知能の背景や将来を知る入門書として良い本…

特徴点を用いた物体認識

OpenCVでは、特徴点抽出・特徴記述・特徴点マッチングについてさまざまなアルゴリズムが実装されているが、共通のインターフェイスが用意されている(OpenCV3.0)。 共通インターフェイスを使えば、異なるアルゴリズムであっても同じ書き方でアプリケーショ…

NEON

ARMの標準SIMD命令セットAdvanced SIMD(single instruction multiple data:1命令で複数のデータの演算を行うコンピュータの並列化の形態のこと。パック演算、ベクトル演算とも表現する)の通称。 ARMレジスタの演算処理は1命令で1演算の逐次的処理を行うが…

ORB(Oriented FAST and Rotated BRIEF)

ORBによる特徴量検出方法は、BRIEFと同じくバイナリコードを用いた高速な特徴点検出が可能であり、BRIEFにはない回転不変性を導入したものである。 ORBは、BRIEFと同じく画像を多段階に縮小したピラミッド画像に対してFASTによる特徴点検出方法を用いており…

BRISK(Binary Robust Invariant Scalable Keypoints)

以前の日記で、スケール・回転不変な特徴点検出方法としてSIFTやSURFについて述べた。SIFTの課題を解決したのがSURFであり、DoG画像生成や勾配ヒストグラム生成の計算コストが高い問題を、SURFでは積分画像を利用することにより10倍の高速化を実現した。 し…

Cascaded FAST

以前の日記で、FASTではコーナー検出のために観測する画素を「決定木」の手法を用いて学習させていくと述べた。これを異なるサイズを組み合わせる方法に発展させたものが、Cascaded FASTと呼ばれる。 異なる周囲長を参照する3種類の決定木をカスケード状に並…

ハミング距離

ハミング距離とは、桁数が同じ2つの2進数を比較して、異なっている桁の個数として定義される。例えば、1111111と1010101とのハミング距離は3である。 別の言い方をすれば、ハミング距離はある文字列を別の文字列に変形する際に必要な置換回数を計測したもの…

決定木

決定木とは、木構造をした決定を行うためのグラフのこと。 節点と枝、端点の葉への経路によって表される。 決定木は「質問」を繰り返すことでそのデータがどのグループに属するかを決定するものであり、よい決定木とは、答えによってデータがよく分類される…

FAST(Features from Accelerated Segment Test)

画像中のコーナーを高速に検出する方法として提案された。 注目画素pの周辺の円周上の決まった16画素を観測し、輝度がしきい値以上のピクセルが連続してn個以上になる点を特徴点とする。ここで全ての画素を調べるのには時間がかかるので、円周上の画素から観…

SURF(Speeded Up Robust Features)

SIFTによる特徴量抽出アプローチの改良版。精度はSIFTに劣るが高速マッチングが可能。 スケール・回転不変な特徴点検出方法として、SIFTやSURFがある。SIFTはDoG画像生成や勾配ヒストグラム生成の計算コストが高く、SURFは積分画像を利用することにより10倍…

SIFT(Scale-Invariant Feature Transform)

SIFTは、スケール不変性・回転不変性・ノイズおよび照明変化への不変性をもつ特徴点および特徴量検出方法である。 LoGオペレータ SIFTを説明するために、まずLoGオペレータを紹介する。前回のHarrisコーナー検出法は、コーナー部分のみしか注目しないため、…

Harrisコーナー検出

1次微分から分散共分散を求め固有値の最小値λminを計算するコーナー検出法では、固有値を計算するときのルート計算が計算コストが高い。この問題を解消するために見出されたのがHarrisオペレータである。 Harrisオペレータの計算は行列Mのdet(行列式)とtr…

エッジ検出

画像上に垂直方向(y方向)のエッジがあると考えた場合、x方向に1次微分(勾配)がエッジ上で大きくなる。一方、エッジ上でy方向に変化はないためy方向の1次微分は小さい。 これを画像に対して(-1, 0, 1)というフィルタをかけることで表すことができる。こ…

コーナー検出とは

画像内における「エッジ」は一方向にのみ輝度勾配が大きい点の集合と考えられるが、「コーナー」はそのエッジが交差する部分、すなわち二方向に輝度勾配が大きい部分と考えられる。例えばチェスボードのような直行する白黒の模様を考えると、x方向の勾配とy…

CString から char* への変換 

文字型にはいつも悩まされています。プログラミングの都合上、色んな表現の仕方があるみたいです。それらの違いや特徴を理解した上で、合理的な(ただ動けばいいというのではない)プログラミングをする必要があります。 文字列を引数に取る関数の引数の種類…

LTPSTRとは

文字型と言ってもいろいろある。 世界中にはいろんな言語があり、アルファベットだけで表されるものではない。そうするとchar型の配列を使用した文字列だけと1文字=2^3=8ビット=1バイト=256通りの文字しか表わすことができない。 そのため日本語などでは、…

文字型の定義

文字型の定義、変換が理解しにくいのでまとめ。 C言語はメモリを意識してプログラミングする必要がある。 整数型の定義は分かりやすい。int型で定義すれば、変数には32ビット=4バイト、数字にすると-2,147,483,648~2,147,483,647の値を入れられる。その範…

_T("")マクロとは

プログラムの中で_T("")マクロが頻繁に使われている。 _T("")マクロは、ユニコードとマルチバイトの差異を解消するためのマクロ。 _T("文字列")としたときのの実際の動きを考えると、ユニコード設定ならL"文字列"として展開し、マルチバイト設定なら従来どお…

シングルクオーテーションとダブルクオーテーションの使い分け

文字のときは「’」(シングルクオーテーション)文字列のときは「”」(ダブルクオーテーション)を使う サイズの違い ダブルクオーテーションの場合、最後にNULL(\0)がつくので、”a”のデータサイズは「2バイト」となる。なのでchar data[1] = "a" とするの…