Darkside(https対応しました) |
2022年6月9日(木) 21:46
倍率色収差の補正は、あちらを修正すればこちらが悪化するという感じで、微調整の泥沼に入りそうになる。正確なレンズデーターが無い中で完璧な補正を追求すると、手に負えなくなりそうだ。ここは、EOS
VR Utility より明らかに優れた画像が得られるなら良しとすべきだろう。
自作補正のパラメーターが理想のパラメーターからズレているのは当たり前なので、ギリギリまで追い込めば別の部分で過剰補正が発生するのがオチ。ぐっと我慢して補正量を手控えねばならない。
計算値を参考に、少しだけ手動でパラメーターを変更。公式以上なら、妥協しよう。
こうして、一応の成功を見た。
左が EOS VR Utility 出力で、右が自作ステッチ出力。倍率色収差が明らかに減少している上で、解像感も損なわれていない。
Jpeg 圧縮されたものしかステッチできない EOS VR Utility に対し、RAW 現像結果をステッチできる時点で、自作のアドバンテージは明白である。収差の影響がほぼ無い画面中央付近でも、自作の方が画質は上だ。
以下は、ステッチソフトの後半部分。現在まだ手抜きで、サブルーチンにしていない。
width = 8192 height = 5464 # ステッチ中心 LX = 2114 LY = 2707 RX = 1982 RY = 2721 # 収差補正中心 CLX = 1808 CLY = 2592 CRX = 2113 CRY = 2913 CX = LX - dfish / 2 CY = LY - dfish / 2 for i in range(len(xmapL)): xmapL[i] = xmap[i] + CX for i in range(len(ymapL)): ymapL[i] = ymap[i] + CY CX = RX - dfish / 2 CY = RY - dfish / 2 for i in range(len(xmapR)): xmapR[i] = xmap[i] + CX for i in range(len(ymapR)): ymapR[i] = ymap[i] + CY img = cv2.imread(args.infile) img_left = img[0:height, int(width/2):width] img_right = img[0:height, 0:int(width/2)] # 倍率色収差の補正 MAG_RED = 1.00055 MAG_BLUE = 1.0 WARP_FLAGS = cv2.INTER_LANCZOS4 # Lanczos 補間 im_bgr = cv2.split(img_left) # B=im_bgr[0] R=im_bgr[1] G=im_bgr[2] M = cv2.getRotationMatrix2D((CLX, CLY), 0, MAG_RED) img_red = cv2.warpAffine(im_bgr[1], M, (int(width/2), height), flags=WARP_FLAGS) M = cv2.getRotationMatrix2D((CLX, CLY), 0, MAG_BLUE) img_blue = cv2.warpAffine(im_bgr[0], M, (int(width/2), height), flags=WARP_FLAGS) im = cv2.merge((img_blue, img_red, im_bgr[2])) left = cv2.remap(im, xmapL, ymapL, WARP_FLAGS, cv2.BORDER_CONSTANT) im_bgr = cv2.split(img_right) # B=im_bgr[0] R=im_bgr[1] G=im_bgr[2] M = cv2.getRotationMatrix2D((CRX, CRY), 0, MAG_RED) img_red = cv2.warpAffine(im_bgr[1], M, (int(width/2), height), flags=WARP_FLAGS) M = cv2.getRotationMatrix2D((CRX, CRY), 0, MAG_BLUE) img_blue = cv2.warpAffine(im_bgr[0], M, (int(width/2), height), flags=WARP_FLAGS) im = cv2.merge((img_blue, img_red, im_bgr[2])) right = cv2.remap(im, xmapR, ymapR, WARP_FLAGS, cv2.BORDER_CONSTANT) om = cv2.hconcat([left, right]) cv2.imwrite(args.outfile, om)
こうなれば、次はこの処理を動画ステッチの方に組み込むのは当然だ。
written by higashino [Virtual Reality] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]
Generated by MySketch GE 1.4.1
Remodelling origin is MySketch 2.7.4