pytorch 使用mask裁剪Tensor

jdg4fx2g  于 2023-06-29  发布在  其他
关注(0)|答案(1)|浏览(214)

我有一个关于裁剪/整形的问题。假设我们已经知道一个范围,例如,(500,500),我有一个(496,504)的图像,如果我想使用遮罩来填充丢失的像素并裁剪额外的像素,以便将图像重塑为(500,500)。有没有办法用面具来做这件事?
是否有一种优雅的方式将此范围Tensor应用于图像Tensor并进行相应的裁剪?(比如面具?)我还尝试使用reduce函数构建一个蒙版来过滤掉超出范围的像素。

  1. mask = reduce(torch.logical_and, (img_tensor[:,:, ?,:] >= range[1],
  2. img_tensor[:,:, ?,:] < range[3],
  3. img_tensor[:,:, :,?] >= range[0],
  4. img_tensor[:,:, :,?] < range[2]))

问题是我不知道该怎么说“?“,以便将该维度处的值与范围值进行比较。任何帮助将不胜感激。

jw5wzhpr

jw5wzhpr1#

使用虚拟值(例如:0)。找到这个Tensor和原始Tensor之间的最小维度,并使用这些值来选择要替换的新Tensor的值:

  1. masked = torch.zeros([3,500,500])
  2. d1 = min(img_tensor.shape[1],masked.shape[1])
  3. d2 = min(img_tensor.shape[2],masked.shape[2])
  4. masked[:,:d1,:d2] = img_tensor[:,:d1,:d2]

相关问题