热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python特征相关性热力图怎么画_Python画attentionmap与原图叠加的热力图

为了关注得到的featuremap中是否在ROI有比较大的值,常需要将attentionmap可视化,将其与输入图片叠加,可以非常直观的看
9a3525a0adcc4f3d8abc860fe4440756.png

为了关注得到的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 cv2img_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方便。

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

587e3cd0037a517864f8e9f72142f24d.png

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

cc19616436ef3dfc6b9d47221b0e158b.png



推荐阅读
  • 如何使用Python从工程图图像中提取底部的方法?
    本文介绍了使用Python从工程图图像中提取底部的方法。首先将输入图片转换为灰度图像,并进行高斯模糊和阈值处理。然后通过填充潜在的轮廓以及使用轮廓逼近和矩形核进行过滤,去除非矩形轮廓。最后通过查找轮廓并使用轮廓近似、宽高比和轮廓区域进行过滤,隔离所需的底部轮廓,并使用Numpy切片提取底部模板部分。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • python3 logging
    python3logginghttps:docs.python.org3.5librarylogging.html,先3.5是因为我当前的python版本是3.5之所 ... [详细]
  • 【Python 爬虫】破解按照顺序点击验证码(非自动化浏览器)
    #请求到验证码base64编码json_img_datajson_raw.get(Vimage)#获取到验证码编码 #保存验证码图片到本地defbase64_to_img(bstr ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • Java 11相对于Java 8,OptaPlanner性能提升有多大?
    本文通过基准测试比较了Java 11和Java 8对OptaPlanner的性能提升。测试结果表明,在相同的硬件环境下,Java 11相对于Java 8在垃圾回收方面表现更好,从而提升了OptaPlanner的性能。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • Python使用Pillow包生成验证码图片的方法
    本文介绍了使用Python中的Pillow包生成验证码图片的方法。通过随机生成数字和符号,并添加干扰象素,生成一幅验证码图片。需要配置好Python环境,并安装Pillow库。代码实现包括导入Pillow包和随机模块,定义随机生成字母、数字和字体颜色的函数。 ... [详细]
  • Netty源代码分析服务器端启动ServerBootstrap初始化
    本文主要分析了Netty源代码中服务器端启动的过程,包括ServerBootstrap的初始化和相关参数的设置。通过分析NioEventLoopGroup、NioServerSocketChannel、ChannelOption.SO_BACKLOG等关键组件和选项的作用,深入理解Netty服务器端的启动过程。同时,还介绍了LoggingHandler的作用和使用方法,帮助读者更好地理解Netty源代码。 ... [详细]
author-avatar
琼frock_882
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有