Archive
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
前回の位相画像を用いた相関方法をやります。


参考サイトはこちら

計算の仕方は位相画像のように行いますが、
相関を計算する際に画像Gの方を複素共役とります。


fを画像その1、gを画像その2としてます。
Tex2Img_1345873619.png

Tex2Img_1346229170.png

POC

そして、Rを逆フーリエ変換すれば求められます。
他の相関方法よりもするどいピークが出るようです。



【ソース】

今回も、楽だったのでOctaveで書いてます(;´∀`)


function [py px maxval CPOC] = POC(A, At)
	B=fft2(A);
	Bt=conj(fft2(At));

	FFTR = B.*Bt;
	FFTRN = (FFTR./abs(FFTR));

	CPOC = real(ifft2(FFTRN));
	[py,px maxval] = max2d(CPOC);
	py = py - 1;
	px = px - 1;
	%printf("move (%d,%d)\n", px-1, py-1);
ちなみに、max2dは自前の関数です。
以下のように最大値とどの場所にあるかを示すようなっています。


function [py,px maxintensity] = max2d(data)
% search max value and (x,y) in 2D matrix
	[mm,x] = max(data);
	[mx,y] = max(mm);

	maxintensity = mx;
	py = x(y);
	px = y;



【テスト結果】

画像はnashruddin.com - Phase Correlation in OpenCVさんから拝借したもので、行いました。


結果は以下のようになるようです。

相関値:0.6344
移動距離:(6,15)


【入力画像】
1.jpg 2.jpg



【位相限定相関のグラフ】
graph.png

上の、位相限定相関のグラフのピークの場所の値と座標を取得します。
私が計算した結果は、

相関値:0.62530
移動距離:(6,15)

となり相関値が若干違いましたが、正解でした。
ノイズにも強い手法らしいので。便利そうです。

スポンサーサイト
以前ブロックマッチングなどのアルゴリズムを調べているときに、
位相限定相関法(Phase Only Correlation)なる方法を見つけました。
その中でまずはこちらのサイトにある位相画像というものの実装を
位相画像 « Rest Term

アルゴリズム

  1. 画像fに対してフーリエ変換を適用して


    Tex2Img_1345873619.png


  2. それを絶対値で割る(とりあえずRとしました)


    Tex2Img_1345911493.png


  3. 逆フーリエ変換を行い実数領域に戻す



・・・よく考えたら、この場合は絶対値で割るということは正規化を行っているので、
振幅成分が1になり、位相の成分のみが残っているということなのですね(;´∀`)

個人的に画像と複素数の扱いが一番楽だなと思っているOctaveで実装を行いました(;´∀`)

f = imread("Lenna.bmp");
f = rgb2gray(f);

F = fft2(f);
R = (F./abs((F)));
POC = real(ifft2(R));


【元画像】

Lenna




【位相画像】

位相画像


境界部分だけが残る感じなのですかね。


そして、これを利用して位相限定相関法(Phase Only Correlation)を行うのですが、
それはまた次回へ。。。

ボロノイ図というものがあるのですが、それを画像に適用してみるという。

ボロノイ図
ある距離空間上の任意の位置に配置された複数個の点(母点)に対して、同一距離空間上の他の点がどの母点に近いかによって領域分けされた図のことである。特に二次元ユークリッド平面の場合、領域の境界線は、各々の母点の二等分線の一部になる。



それを連続ではなく離散へと考えたものが離散ボロノイ図らしいです。
今回は、以下のようにしました。
  1. 画像中の任意の点(母点)を決める
  2. 各画素を操作し、どの母点に最も近いか判定する
  3. 最も近いと判断された母点の画素値をその画素の画素値とする



【元画像】
Mandrill_ORG



【離散ボロノイ図(母点:250点)】
Mandrill_Voronoi250



【離散ボロノイ図(母点:250点 母点表示あり)】
Mandrill_Voronoi250dot



【離散ボロノイ図(母点:50点)】
Mandrill_Voronoi50



現在のプログラムでは突貫で作ったため、全探索しているので母点の数が多くなるほど・画像が大きくなるほど時間がかかります。。。
高速化を考えていますが、放置中・・・です・・・



以前から、blogを始めようと思ってはいたのですが


blogのタイトルをどうしようか。
ユーザー名をどうしようか。
どこのblogを使おうか


と悩んでいたら。。。
長い間がたってしまいましたがようやく始めました(汗

記録を残せていけたらと考えています。

プログラムの手始めはHello Worldなので、記念にHello World置いときますね。
#include <stdio.h>
#include <stdlib.h>
 
int main (int argc, char **argv) 
{
  printf("Hello, World!\n") ;
  return EXIT_SUCCESS ;
}


ちなみに、ソースコードのハイライトは以下を参考に記載いたしました。
fc2ブログでソースコードを綺麗に表示する。(SyntaxHighLighter 3.0)
SyntaxHighlighter


FC2カウンター
プロフィール

Author:詠み人知らず
プログラム好きな名もなき凡人がお送りしています。(得意とは言っていない
最近の興味はPython、C#、Matlab(Octave)、画像処理、AR(拡張現実)、統計などなど・・・

気分で思いついたことを書くため話題に一貫性がないかもしれません。

カレンダー
08 | 2012/08 | 09
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 -
最新記事
タグクラウドとサーチ

カテゴリ
最新コメント
最新トラックバック
月別アーカイブ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。