piecewiseAffineTransformation 后跟踪点的位置
Tracking position of points after piecewiseAffineTransformation
我在 Skimage 上关注 this example website.The 代码对原始图像进行分段仿射变换,生成的图像如下图所示。
我试图通过访问变换矩阵索引来跟踪图像上某些特定点在变换前后的移动方式。检查我的代码 here
我定义了find_map_index()
来查找变换矩阵中点的索引
我还定义了find_linspace_index()
将指定的点放在最近的网格点上。
我能够生成一张看起来像我想要的图像,如下所示。蓝点是原始位置,绿色星星是结果位置。
我的问题是为什么我必须使用 tform.inverse
out = warp(image, tform.inverse, output_shape=(rows + 100, cols))
而不是 tform
?
out = warp(image, tform, output_shape=(rows + 100, cols))
此外,如何在不调整大小以适应原始图像大小的情况下获得未剪切的图像,网站示例就是这种情况?转换似乎在图像边界上映射了原始大小之外的点。
非常感谢。
要回答问题的第一部分 - 您需要使用逆变换,因为原始变换是从输入图像到输出图像的正向映射。
在创建变形图像时,您处于输出图像的 space 中,对于输出图像中的每个像素,您想要在输入图像中找到相应的位置,然后使用逆变换找到这个。参见 skimage documentation for warp
这种方法可确保输出图像中的每个像素都有一个值。
===========================
对于您的问题的第二部分,即裁剪,正如上面提到的文档所示,当输出图像中的点来自输入图像的图像范围之外时,您有多种选择。下面用 numpy.pad
中的相应定义对此进行了详细说明
- 常量 - 具有常量值的垫
- edge - 填充数组的边值
- 对称 - 具有沿阵列边缘镜像的向量反射的焊盘
- reflect - 带有向量反射的垫子沿每个轴镜像在向量的第一个和最后一个值上
- wrap - 用向量沿轴的环绕填充。第一个值用于填充结尾,结束值用于填充开头
但是,由于您所指的特定示例是分段仿射变换,因此也可以构造为使两个图像边界周围的区域固定 - 即该区域中的变换是单位矩阵,因此该区域中的点不会扭曲。但是,我不确定示例中是否属于这种情况。
我在 Skimage 上关注 this example website.The 代码对原始图像进行分段仿射变换,生成的图像如下图所示。
我试图通过访问变换矩阵索引来跟踪图像上某些特定点在变换前后的移动方式。检查我的代码 here
我定义了find_map_index()
来查找变换矩阵中点的索引
我还定义了find_linspace_index()
将指定的点放在最近的网格点上。
我能够生成一张看起来像我想要的图像,如下所示。蓝点是原始位置,绿色星星是结果位置。
我的问题是为什么我必须使用 tform.inverse
out = warp(image, tform.inverse, output_shape=(rows + 100, cols))
而不是 tform
?
out = warp(image, tform, output_shape=(rows + 100, cols))
此外,如何在不调整大小以适应原始图像大小的情况下获得未剪切的图像,网站示例就是这种情况?转换似乎在图像边界上映射了原始大小之外的点。
非常感谢。
要回答问题的第一部分 - 您需要使用逆变换,因为原始变换是从输入图像到输出图像的正向映射。
在创建变形图像时,您处于输出图像的 space 中,对于输出图像中的每个像素,您想要在输入图像中找到相应的位置,然后使用逆变换找到这个。参见 skimage documentation for warp
这种方法可确保输出图像中的每个像素都有一个值。
===========================
对于您的问题的第二部分,即裁剪,正如上面提到的文档所示,当输出图像中的点来自输入图像的图像范围之外时,您有多种选择。下面用 numpy.pad
中的相应定义对此进行了详细说明- 常量 - 具有常量值的垫
- edge - 填充数组的边值
- 对称 - 具有沿阵列边缘镜像的向量反射的焊盘
- reflect - 带有向量反射的垫子沿每个轴镜像在向量的第一个和最后一个值上
- wrap - 用向量沿轴的环绕填充。第一个值用于填充结尾,结束值用于填充开头
但是,由于您所指的特定示例是分段仿射变换,因此也可以构造为使两个图像边界周围的区域固定 - 即该区域中的变换是单位矩阵,因此该区域中的点不会扭曲。但是,我不确定示例中是否属于这种情况。