逆仿射变换-Rasterio

发布于 2025-02-13 07:05:20 字数 675 浏览 0 评论 0原文

Rasterio中是否有构建来计算rasterio.transform.fransform.affine对象的逆仿射变换?

我目前正在做以下操作:

from rasterio.transform import Affine
import numpy as np

transform = Affine(29.976, 0, 5.12e5, 0, -29.976, 6.94e6)

matrix_form_transform = np.vstack(
    [
        np.array(transform.column_vectors).T,
        np.array([0,0,1])
    ]
)

matrix_form_inverse_transform = np.linalg.inv(matrix_form_transform)

inverse_transform = Affine(*matrix_form_inverse_transform[:2, :].ravel())

print(inverse_transform * transform)
# Affine(1.0, 0.0, 0.0,
#        -0.0, 1.0, 0.0)

这很笨拙,我觉得应该有一种内在的方法来解决这个问题,但我找不到它。

Is there a build in way in rasterio to compute the inverse affine transform of an rasterio.transform.Affine object?

I'm currently doing the following:

from rasterio.transform import Affine
import numpy as np

transform = Affine(29.976, 0, 5.12e5, 0, -29.976, 6.94e6)

matrix_form_transform = np.vstack(
    [
        np.array(transform.column_vectors).T,
        np.array([0,0,1])
    ]
)

matrix_form_inverse_transform = np.linalg.inv(matrix_form_transform)

inverse_transform = Affine(*matrix_form_inverse_transform[:2, :].ravel())

print(inverse_transform * transform)
# Affine(1.0, 0.0, 0.0,
#        -0.0, 1.0, 0.0)

This is quite clunky and I feel like there should be a builtin way to get to this but I can't find it.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

陪我终i 2025-02-20 07:05:20

affine类在affine软件包中定义,该软件包也由rasterio组织管理。 affine类实现__ invert __ dunder方法。这意味着它实现了使用操作员的能力。碰巧的是,__ iNvert __的实现找到了逆affine对象。

您可以执行以下操作之一:

from rasterio.transform import Affine

transform = Affine(29.976, 0, 5.12e5, 0, -29.976, 6.94e6)
print(~transform * transform)
# | 1.00, 0.00, 0.00|
# | 0.00, 1.00, 0.00|
# | 0.00, 0.00, 1.00|

或者如果您想更加明确

from rasterio.transform import Affine

transform = Affine(29.976, 0, 5.12e5, 0, -29.976, 6.94e6)
print(transform.__invert__() * transform)
# | 1.00, 0.00, 0.00|
# | 0.00, 1.00, 0.00|
# | 0.00, 0.00, 1.00|

The Affine class is defined in the affine package which is also managed by the rasterio organization. The Affine class implements the __invert__ dunder method. This means that it implements the ability to use the ~ operator. As it happens the implementation for __invert__ finds the inverse Affine object.

You can do one of the following:

from rasterio.transform import Affine

transform = Affine(29.976, 0, 5.12e5, 0, -29.976, 6.94e6)
print(~transform * transform)
# | 1.00, 0.00, 0.00|
# | 0.00, 1.00, 0.00|
# | 0.00, 0.00, 1.00|

or if you want to be more explicit

from rasterio.transform import Affine

transform = Affine(29.976, 0, 5.12e5, 0, -29.976, 6.94e6)
print(transform.__invert__() * transform)
# | 1.00, 0.00, 0.00|
# | 0.00, 1.00, 0.00|
# | 0.00, 0.00, 1.00|
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文