7

この質問を使用して、画像の歪みのない座標系を考え出すことができました。さて、新しい座標系を画像に実装する方法がわからないので、歪みのない画像を作成できます。

R を使用しているため、Matlab、OpenCV、またはC++ を含まない回答を見つけるのに苦労しています。

引用された質問から私が使用している答えは、次の変換されたxy座標を与えてくれました:

1 -19.50255239, -19.50255239
2 -18.26735544, -18.26735544
3 -17.03391152, -17.03391152
4 -15.80221494, -15.80221494
5 -14.57225998, -14.57225998
6 -13.34404095, -13.34404095
...

512 x 512 画像の 512 ピクセルについても同様です。

これを元の 512 x 512 画像に適用する方法は、私が苦労していることです。Open CV page hereや特定の事前定義された shifts、またはlatitudinal /longitudinal shiftsなどのページでいくつかの言及を見てきましたが、 SpatialObjectsDataFrame sを使用しますが、xy 座標のユーザー定義リストから別のリストへは使用しません。

-ソース画像の座標を取得する例:

im_coords <- RSAGA::grid.to.xyz(as.matrix(as.raster(im)))

(注、実際には画像をラスタしたくありません。その時に見つけたものです)

-変換された座標を取得するために使用しているコード:

undistort <- function(X, Y, a, b, c, d = 1, imWidth = 512, imHeight = 512) {

    #radial barrel distortion
    normX <- X - (imWidth / 2)
    normY <- Y - (imHeight / 2)

    #rmax
    radius_u <- sqrt(imWidth^2 + imHeight^2)

    #normalize r so that its between 0 and 1
    r <- sqrt(normX^2 + normY^2) /  radius_u

    #Barrel distorition equation: where "r" is the destination radius and "Rsrc" is the source pixel to get the pixel color from
    Rsrc <- r * (a*r^3 + b*r^2 + c*r + d)

    theta <- ifelse(Rsrc == 0, 1, 1 / atan(Rsrc) * Rsrc)

    newX <- (imWidth / 2) + theta * normX
    newY <- (imHeight / 2) + theta * normY

    return(data.frame(X = newX, Y = newY))
}

これは、512x512 .png バレルの歪んだ画像のサンプルです: https://imgur.com/a/W9Qz70W

ここに画像の説明を入力

クリギングが役立つかどうか疑問に思っていますか? またはgdalwarpまたはproj4string ? これらを実装する方法がわからない。

更新: Rohit の提案を使用して、虹のグリッドを次のように歪めることができました。

ここに画像の説明を入力

これに:

ここに画像の説明を入力

バレル画像で試してみると、この奇妙な重ね合わせ画像が得られます。

ここに画像の説明を入力

わかりました、ここに見られるように、使用する係数にかかっていると思います:

ここに画像の説明を入力

4

1 に答える 1