如何使用numpy.einsum融合两个帧?

目标

我想使用numpy.einsum将两个框架融合在一起。我真正想要使用einsum的原因是因为我希望能够了解它的工作原理和应用方式。

问题

  • 我有两个框架,一个“红色”框架和一个“绿色”框架。
  • 我还有两个遮罩,一个遮罩的“左上象限”设置为true,另一个遮罩的“右下”象限设置为true。

现在,将“红色”框架与“左上”遮罩相乘,将“绿色”框架与“右下”遮罩相乘,然后将要累加的结果相加即可创建一个新框架。然后,新框架的左上角为红色,右下角为绿色,其余部分(右上角,左下角)为黑色。

示例

在这里,我提供了一个示例,该示例可以在不使用einsum的情况下完全满足我的要求。

import matplotlib.pyplot as plt
import numpy as np

height = 2
width = 2

# A "red" RGB frame
r_frame = np.stack([
    np.full(shape=(height,width),fill_value=255),np.zeros(shape=(height,width)),width))
],axis=-1).astype(int)

# A "green" RGB frame
g_frame = np.stack([
    np.zeros(shape=(height,np.full(shape=(height,fill_value=255,dtype=int),axis=-1).astype(int)

# Left-top mask
lt_mask = np.zeros(shape=(height,dtype=int)
lt_mask[:height//2,:width//2] = 1

# Right-bottom mask
rb_mask = np.zeros(shape=(height,dtype=int)
rb_mask[height//2:,width//2:] = 1

# Frame with a "red" left-top,a "green" right-bottom and the rest "black"
frame = r_frame * lt_mask[:,:,np.newaxis] + g_frame * rb_mask[:,np.newaxis]

plt.imshow(frame)
plt.show()

结果如下所示:

如何使用numpy.einsum融合两个帧?

卡住

我陷入了下一步。我设法将单个框架与单个蒙版相乘,但是我无法对结果求和。

# The same frame,now using einsum in two steps
frame = np.einsum('ijk,ij->ijk',r_frame,lt_mask) + np.einsum('ijk,g_frame,rb_mask)

plt.imshow(frame)
plt.show()

# The same frame,now using einsum in one step
# ???
zjyhm101x 回答:如何使用numpy.einsum融合两个帧?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3064215.html

大家都在问