0

私は魚眼カメラで作業しており、さらに計算する前に歪みを逆にする必要があります。この質問では、これが起こっています魚眼歪みの修正

src = cv.LoadImage(src)
dst = cv.CreateImage(cv.GetSize(src), src.depth, src.nChannels)
mapx = cv.CreateImage(cv.GetSize(src), cv.IPL_DEPTH_32F, 1)
mapy = cv.CreateImage(cv.GetSize(src), cv.IPL_DEPTH_32F, 1)
cv.InitUndistortMap(intrinsics, dist_coeffs, mapx, mapy)
cv.Remap(src, dst, mapx, mapy, cv.CV_INTER_LINEAR + cv.CV_WARP_FILL_OUTLIERS,  cv.ScalarAll(0))

これに関する問題は、この方法でリマップ関数がすべてのポイントを通過し、そこから新しい画像を作成することです。フレームごとにこれを行うには時間がかかります。私が探している彼らの方法は、魚眼画像を通常の画像座標にポイントツーポイントで変換することです。

私たちが取っているアプローチは、入力フレームですべての計算を行い、結果の座標をワールド座標に変換するだけなので、画像のすべてのポイントを調べて、そこから新しいポイントを作成したくありません. (時間は私たちにとって本当に重要です)

行列 mapx と mapy には、ポイント ツー ポイントの変換がいくつかありますが、多くのポイントは完全に変換されていません。この行列を補間しようとしましたが、結果は探していたものではありませんでした。

cv.Remap よりも時間効率の良い他のアプローチであっても、助けていただければ幸いです。

ありがとう

4

1 に答える 1

3

あなたが望むのは だと思いますcv.UndistortPoints()

歪んだ画像でいくつかの点の特徴を検出したと仮定するとdistorted、次のようなことができるはずです。

cv.UndistortPoints(distorted, undistorted, intrinsics, dist_coeffs)

これにより、フレームごとに新しい歪みのない画像を生成することなく、歪みのないポイントで作業できます。

于 2013-07-31T16:03:51.260 に答える