Darkside(https対応しました) |
2022年7月17日(日) 21:03
試験用画像として、拡大を考慮しないと収束しなかったフレームを使用。
オリジナルは 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)]
Generated by MySketch GE 1.4.1
Remodelling origin is MySketch 2.7.4