Darkside(https対応しました)

2022年7月17日(日) 21:03

ディスクリートな位相限定相関法

 試験用画像として、拡大を考慮しないと収束しなかったフレームを使用。

 1フレーム差の2枚について、位相限定相関法を使ってみる。

 オリジナルは 4096×4096 で、中心付近の 2880×2880 を切り出して使う。

 かなりすったもんだの末に、何とか相関グラフ画像らしきものが得られた。見える絵にするため、値を1000倍している。

 左上隅を (0,0) とした場合に(3,0) にピークが来ていて、たぶん正しい。

 だがこの瞬間に、思い切り厄介な問題に気付く。
 まず、ズレ量をサブピクセルまで求めようとすれば、どのような計算が良いのか?
 次に、符号。ズレ量がマイナスの場合は、どのような画像になるのか?

 試しに2枚の画像を入れ替えたところ、右上隅にピークが出現した。なるほど、0〜127 が正で 128〜255 が負、みたいな感じか。

 しかし、サブピクセルの求め方は何とかしなければならない。

 プログラム自体は単純だが、このままでは実用にならない。

import numpy as np
import cv2
# ステッチ中心
LX = 2114
LY = 2023
# 判定範囲 w や h の 1/2
LD2 = 1440
img1 = cv2.imread('103093.png')
img2 = cv2.imread('103094.png')
img_p1 = img1[int(LY-LD2):int(LY+LD2),int(LX-LD2):int(LX+LD2)]
img_p2 = img2[int(LY-LD2):int(LY+LD2),int(LX-LD2):int(LX+LD2)]
img_g1 = np.asarray(cv2.cvtColor(img_p1, cv2.COLOR_BGR2GRAY), 'float')
img_g2 = np.asarray(cv2.cvtColor(img_p2, cv2.COLOR_BGR2GRAY), 'float')
img_f1 = np.fft.fft2(img_g1)
img_f2 = np.fft.fft2(img_g2).conjugate()
img_f = img_f1 * img_f2
img_n = img_f / np.abs(img_f)
img_p = np.fft.ifft2(img_n).real
print(img_p)
img_p = img_p * 1000
cv2.imwrite('out.png', img_p, [int(cv2.IMWRITE_PNG_COMP/RESSION), 1])

written by higashino [Virtual Reality] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

Comments

TrackBacks

Darkside(https対応しました)

Generated by MySketch GE 1.4.1

Remodelling origin is MySketch 2.7.4