【问题标题】:copy segment from image tensor从图像张量复制片段
【发布时间】:2021-12-13 06:37:39
【问题描述】:

我有三个张量: A - (1, 3, 256, 256) B - (1, 3, 256, 256) - 这是一个白色图像张量 C - (256, 256) - 这是段张量

例如 C 看起来像:

tensor([[ 337,  337,  337,  ...,  340,  340,  340],
        [ 337,  337,  337,  ...,  340,  340,  340],
        [ 337,  337,  337,  ...,  340,  340,  340],
        ...,
        [1022, 1022, 1022,  ..., 1010, 1010, 1010],
        [1022, 1022, 1022,  ..., 1010, 1010, 1010],
        [1022, 1022, 1022,  ..., 1010, 1010, 1010]], device='cuda:0')

其中 37 可以表示建筑物等。

张量 C 给出了线段形状的位置。我想要的是根据从张量 A 到张量 B 的位置复制相同的片段。这会将片段复制到白色图像张量上。

这类似于屏蔽,我查看了 mask_select (https://pytorch.org/docs/stable/generated/torch.masked_select.html),但它只返回一维张量。

【问题讨论】:

    标签: python image pytorch tensor


    【解决方案1】:

    您不需要选择C中的像素,只需将它们屏蔽:

    select = 337  # which segment to select
    select_mask = (C == select)[None, None, ...]  # create binary mask and add singleton dimensions
    # this is the part where you select the right part of A
    B = B * (1 - select_mask) + A * select_mask
    

    【讨论】:

    • 我得到Subtraction, the -` 运算符,不支持布尔张量。如果您尝试反转掩码,请改用~logical_not() 运算符。` 与最后一行。我试图将其更改为B = B * (~select_mask) + A * select_mask,但结果是所有不是 337 的东西
    • 澄清一下,生成的 B 张量将包含不是 337 但我只需要 337 的所有内容。
    • nvm 我使用了错误的段进行测试。将1-select_mask 更改为~select_mask 后,它起作用了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-27
    • 2017-10-19
    • 2023-04-03
    相关资源
    最近更新 更多