python - 如何从图像转换中计算张量乘数?

标签 python numpy opencv image-processing computer-vision

首先,我假设人们熟悉 Python numpy.tensordot .在这里,我使用了一个简单的实例,如下所示(伪代码):

A.shape = (1, x, y)
B.shape = (x, y, z, t)
C = numpy.tensordot(A, B)
C.shape = (1, z, t)
现在假设上面的A和C是灰度图像(1 channel ),并且有一个将A变成C的图像转换。具体来说,假设人们熟悉Python中的OpenCV和函数cv2.warpAffinecv2.warpPerspective ,让我们(伪代码):
C = cv2.warpSomething(A, **kwargs)
我的问题是,假设上述等式成立,那么如何从变量(伪代码)计算 B(足够有效):
x, y, z, t, the_transformation (i.e. warpAffine or warpPerspective, M, flags, borderMode, borderValue)
如果一个人只能从 (warp, x, y, z, t, M) 生成 B,我也很满意,修复 flags=INTER_LINEAR、borderMode=BORDER_CONSTANT 和 borderValue=0。
提前致谢!

最佳答案

如果有N A 和 C 中的像素,则变换张量 B 有 N**2组件。对于 N在 1E+6 的数量级上,你真的不想存储 B 张量。如果它是一个非常小的数据集,你可以尝试这样的事情:

# assuming C and A are already initialized.
B = np.zeros(A.shape + C.shape)
A1 = np.zeros_like(A)
for i in range(A1.shape[0]):
   for j in range(A1.shape[1]):
       A1[i, j] = 1
       B[i, j, :, :] = affine_something(A1)
       A1[i, j] = 0
但这仍然非常缓慢且效率低下。

关于python - 如何从图像转换中计算张量乘数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62513236/

相关文章:

python - 保存时 Pandas 的身材正在被削减

python - 重新排列 numpy 数组

python - 让 haar 级联工作

python - 什么类型的项目会帮助我学习线程编程

Python 和 GTK3 : How to create a Liststore

python - 需要 NumPy ndarray 数据的缓冲区类

python - 如何在 2D numpy 数组中定位特定的 "region"值?

Android JNI:将 cv::Mat 转换为 jbyteArray

opencv - 谷歌本地客户端(NaCl、PNaCl)中的英特尔线程构建 block (TBB)

Python:快速和肮脏的数据类型(DTO)