变化检测的结果可视化

最近在学习变化检测,发现不少论文是得到2通道的特征图,利用交叉熵等作为损失函数,这就导致了网络输出结果不少想要得到的差异图,需要经过一定的处理。通过几天时间的琢磨,我终于成功的将结果可视化,现将部分代码进行分享。

一、2通道特征图转化为差异图

#### 数据预处理
A_imgs = Image.open(imgpathA)
B_imgs = Image.open(imgpathB)

# 将图片转为灰度图
A_imgs = A_imgs.convert('L')
B_imgs = B_imgs.convert('L')

# 调整图片大小
# A_imgs = A_imgs.resize((256, 256), Image.BICUBIC)
# B_imgs = B_imgs.resize((256, 256), Image.BICUBIC)

# 将图片转为Tensor
loader = transforms.Compose([transforms.ToTensor()])
tensorA = loader(A_imgs).to(torch.float)
tensorB = loader(B_imgs).to(torch.float)

# CXHXW --> BXCXHXW 添加batchsize层
tensorA = torch.unsqueeze(tensorA, dim=0)
tensorB = torch.unsqueeze(tensorB, dim=0)

# 载入模型权重参数
checkpoint_name_matching = 
checkpoint_matching = torch.load(checkpoint_name_matching)['net']

# 加载模型
net = Unet()
net_state = net.state_dict()
net.load_state_dict(checkpoint_matching)

pred = net(tensorA, tensorB)
# pred = F.softmax(pred, dim=1)  # 网络最后输出没有添加softmax时使用

print(pred.shape)


# 进行预测,
pred = torch.argmax(pred, 1, keepdim=True)
pred *= 255
print(pred.shape)

# 将预测图片进行保存
img = pred[0].detach().numpy()

img = np.squeeze(img, 0)
img = Image.fromarray(np.uint8(img))
img.save(img_path)

展示一下输入和输出(以下分别为输入的两张不同时刻的图片,label,模型输出的差异图)
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

二、将2通道图片进行分离,根据每个通道的概率值绘制热力图

代码参考:OpenCV-Python教程:颜色图(applyColorMap)[只需几行代码生成22种风格各异的彩色图]
以下为代码展示

#### 绘制热力图
# 通道分离
pred *= 255
img = pred[0].detach().numpy()
img0 = img[0]
img1 = img[1]
print(img0.shape)

# 保存两个通道的图片
img0 = Image.fromarray(np.uint8(img0))
img0.save('img0.jpg')
img1 = Image.fromarray(np.uint8(img1))
img1.save('img1.jpg')


# 绘制热力图
img_gray = cv2.imread('img1.jpg',cv2.IMREAD_GRAYSCALE)
for i in range(22):
    print(i)
    dst = cv2.applyColorMap(img_gray*255,i) 
    cv2.imwrite("map-"+str(i)+".png",dst)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值