首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >逆仿射变换- Rasterio

逆仿射变换- Rasterio
EN

Stack Overflow用户
提问于 2022-07-05 13:11:07
回答 1查看 155关注 0票数 0

在rasterio中是否有一个用于计算rasterio.transform.Affine对象的反仿射变换的方法?

我目前正在做以下工作:

代码语言:javascript
复制
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)

这是相当笨重,我觉得应该有一个内置的方式来达到这一点,但我找不到它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-06 09:24:57

Affine类在affine包中定义,该包也由rasterio组织管理。Affine类实现__invert__ dunder方法。这意味着它实现了使用~运算符的能力。发生这种情况时,__invert__的实现会找到逆Affine对象。

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

代码语言:javascript
复制
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|

或者如果你想更明确

代码语言:javascript
复制
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|
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72870037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档