iOS Vision Framework のVNHomographicImageRegistrationRequest
. 出来ますか?
これまでのところ、画像を修正していないように見える 3x3 ワープ マトリックスを取得しました。
ワープ マトリックスはどのように使用されるのですか (オンラインで例を見つけることができませんでした)。
さらに、画像の位置合わせは画像の修正とどう違うのですか (画像の修正は理解していますが、画像の位置合わせは理解していません)。
Xcodeプレイグラウンド:
import UIKit
import Foundation
import Vision
var li = UIImage(named: "left.png")
var ri = UIImage(named: "right.png")
let handler = VNSequenceRequestHandler()
let request = VNHomographicImageRegistrationRequest(targetedCGImage: li!.cgImage!, options: [:]) { (req, err) in
let observation = req.results?.first as! VNImageHomographicAlignmentObservation
print(observation.warpTransform)
}
try! handler.perform([request], on: ri!.cgImage!)
OpenCV 画像ワープ:
import numpy as np
import cv2
# read the pair of images
li = cv2.imread('left.png', 0)
ri = cv2.imread('right.png', 0)
# get the 3x3 warp matrix provided by Vision Framework
ios_vision_warp_mat = np.transpose(np.array([
[0.746783, -0.0139349, -0.000149109],
[-0.0426033, 0.861793, -2.39433e-05],
[133.91, 22.0962, 0.999471]
]))
# warp the image
warped = cv2.warpPerspective(ri, ios_vision_warp_mat, (ri.shape[1], ri.shape[0]))
combined = cv2.addWeighted(warped, 0.5, li, 0.5, 0.0)
cv2.imshow('Combined pair', combined)
cv2.imshow('Unrectified pair', np.concatenate([li, warped], axis=1))
cv2.waitKey(0)