首页 > 解决方案 > 在深度学习中加载图像时如何快速连接图像的 4 个角?

问题描述

如图所示,连接 4 个角的最有效方法是什么?(在getitem () 中进行)

left_img = Image.open('image.jpg')
...
output = right_img

标签: deep-learningpytorchdatasetpython-imaging-library

解决方案


我就是这样做的。首先,我会暂时将图像转换为张量图像

from torchvision import transforms
tensor_image = transforms.ToTensor()(image)

现在假设您有一个 3 通道图像(尽管类似的原理适用于任意数量通道的任何矩阵,包括 1 通道灰度图像)。

您可以找到带有tensor_image[0]绿色通道的红色通道和带有tensor_image[1]的蓝色通道tensor_image[2]

您可以制作一个 for 循环遍历每个通道,例如

for i in tensor_image.size(0):
  curr_channel = tensor_image[i]

现在在每个通道的 for 循环中,您可以提取

  • 带有浮点数的第一个角像素(curr_channel[0][0])
  • 带有浮点数的最后一个顶角像素(curr_channel[0][-1])
  • 带有浮点数的底部第一个像素(curr_channel[-1][0])
  • 带有浮点数的底部和最后一个像素(curr_channel[-1][-1])

确保在下一个附加步骤之前将所有像素值转换为浮点值或双精度值

现在您有四个值对应于每个通道的角像素然后您可以创建一个列表,然后您可以new_image = [] 使用 Now 附加上述像素值, new_image.append([[curr_channel[0][0], curr_channel[0][-1]], [curr_channel[-1][0], curr_channel[-1][-1]]]) 在遍历每个通道后,您应该有一个包含三个(或 tensor_image. size(0)) 列表列表的数量。

下一步是通过运行将此列表列表转换为 torch.tensor

new_image = torch.tensor(new_image)

为了确保一切正常 new_image.size() 应该返回 torch.Size([3, 2, 2])

如果是这种情况,您现在有了想要的图像,但它是张量格式。将其转换回 PIL 的方法是运行

final_pil_image = transforms.ToPILImage()(new_image)

如果一切顺利,您应该有一个可以完成任务的 pil 图像。它使用的唯一代码是智能索引和一个 for 循环。但是,如果您看起来比我看的更多,那么您可以避免使用 for 循环并在没有循环的所有通道上执行操作。

萨塔克耆那教


推荐阅读