python怎么画图片 wafer map_Python画attention map与原图叠加的热力图

为了关注得到的feature map中是否在ROI有比较大的值,常需要将attention map可视化,将其与输入图片叠加,可以非常直观的看到空间中的权重分布。为达到题图效果,可以使用opencv实现。

代码如下

import matplotlib as mpl

# we cannot use remote server's GUI, so set this

mpl.use('Agg')

import matplotlib.pyplot as plt

from matplotlib import cm as CM

from PIL import Image

import h5py

import numpy as np

import cv2

img_path = "/home/datamining/Datasets/CrowdCounting/shanghai/part_A_final/test_data/images/IMG_54.jpg"

img = cv2.imread(img_path)

# adaptive gaussian filter

adaptive = h5py.File(img_path.replace('.jpg','.h5').replace('images','ground_truth'),'r')

adaptive = np.asarray(adaptive['density'])

heatmap = adaptive/np.max(adaptive)

# must convert to type unit8

heatmap = np.uint8(255 * heatmap)

heatmap = cv2.applyColorMap(heatmap, cv2.COLORMAP_JET)

superimposed_img1 = heatmap*0.9+img

# fixed gaussian filter

fixed = h5py.File(img_path.replace('shanghai','shanghaitech_fixed').replace('.jpg','.h5').replace('images','ground_truth'),'r')

fixed = np.asarray(fixed['density'])

heatmap = fixed/np.max(fixed)

heatmap = np.uint8(255 * heatmap)

heatmap = cv2.applyColorMap(heatmap, cv2.COLORMAP_JET)

superimposed_img2 = heatmap*0.9+img

imgs = np.hstack([img, superimposed_img1,superimposed_img2])

cv2.imwrite('figs/superimposed_img.jpg', imgs)

使用opencv得到图片img,从h5文件中得到对该图中人头的标注热力图,此处可将其视为attention map,距离人头中心越近,值越大。

使用np.asarray将其转换为ndarray,除以最大值将其归一化,归一化不可缺少,否则可能图片中像素值过小,几乎全是蓝色的区域。再将归一化之后取值为[0,1]的ndarray乘255转化为np.unit8格式,因为下一步的输入必须是这个格式。

最重要的是cv2.applyColorMap(heatmap, cv2.COLORMAP_JET),将np.unit8格式的矩阵转化为colormap,第二个参数有很多种配色方案,上面这个是最常用的蓝红配色,值越小越接近蓝色,越大越接近红色。

此处也可以直接将读取的图片转为colormap,例如

img = cv2.imread(img_path)

heatmap = cv2.applyColorMap(img, cv2.COLORMAP_JET)

cv2.imwrite('figs/heatmap.jpg', heatmap)

将img和heatmap加权,权重取0.9感觉比较合适(如果取1会变成奇怪的黄色)。

将原图和叠加了attention map的图像使用np.hstack()并列显示,此处由于我有两个不同的attention map所以共有3张图片。吐槽一下cv2同时显示多张图片不如plt方便。

最后得到的并列图像如下图

如果只显示最右侧的那一张就是题图:

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Pythonwafer map会用到一些数据处理的知识和matplotlib库的使用。 1. 数据处理 首先要处理好wafer的数据,通常是一个csv文件,包含了每个chip的位置、测试结果等信息。需要将这些信息整理出来,并按照wafer上的行列位置进行排序,转化为一个二维数组。这个数组的值可以用颜色等表示不同的测试结果。针对不同的应用,数据处理的方法也会有所不同。 2. matplotlib绘 matplotlib是一个常用的Python库,包括了各种类型的表。对于wafer map,我们通常使用二维的散点和颜色映射来表示测试结果。 具体绘步骤如下: ① 导入库:要使用matplotlib和numpy库。 ② 读取数据:读入wafer map对应的csv文件。 ③ 数据处理:将数据转化为二维数组,并用不同的颜色表示不同的测试结果。 ④ 绘制表:使用matplotlib库来绘制二维散点和颜色映射,颜色和大小可以设置为不同的参数,例如测试结果和误差大小等。 ⑤ 添加标签:添加表的标题、坐标标签和例等。 3. 美化表 通过调整表的参数,可以让wafer map更美观易读。可以使用plt.axis()来调整表的缩放和显示范围。可以使用plt.colorbar()来添加颜色映射的标签。还可以调整颜色映射的范围、对数显示等。 总之,用Pythonwafer map是一个需要根据具体数据和应用进行处理和调整的过程,需要多多练习和实践。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值