HeatMap(热图)的原理和实现

article/2025/10/30 20:39:28

HeatMap(热图)的原理和实现

先来看两张图:

(1)10年世界杯决赛,冠军西班牙队中门将、后卫、中场及前锋的跑位热图

通过热图,我们可以很清楚的看出四个球员在比赛中跑动位置的差异。

(2)历史地震震源位置的热图

也可以很清楚的看出,哪个地方是地震的高发地区(频率最高)。

HeatMap简介

上面两张就是热图的典型应用,通过热图可以简单地聚合大量数据,并使用一种渐进的色带来优雅地表现,最终效果一般优于离散点的直接显示,可以很直观地展现空间数据的疏密程度或频率高低。但也由于很直观,热图在数据表现的准确性并不能保证。

生成原理

热图已经不是什么新鲜的概念了,很多领域都在使用。例如记录用户在Web页面内鼠标的点击位置,各种空间离散点数据的显示等等。

其生成的原理简单概括为四个步骤:

(1)为离散点设定一个半径,创建一个缓冲区;

(2)对每个离散点的缓冲区,使用渐进的灰度带(完整的灰度带是0~255)从内而外,由浅至深地填充;

(3)由于灰度值可以叠加(值越大颜色越亮,在灰度带中则显得越白。在实际中,可以选择ARGB模型中任一通道作为叠加灰度值),从而对于有缓冲区交叉的区域,可以叠加灰度值,因而缓冲区交叉的越多,灰度值越大,这块区域也就越“热”;

(4)以叠加后的灰度值为索引,从一条有256种颜色的色带中(例如彩虹色)映射颜色,并对图像重新着色,从而实现热点图。

可以通过几张图来展现这个过程:

(1)灰度带和彩虹色带

(2)单热点显示

单热点的显示,至少要确定它的中心灰度值、半径,当然还有xy和色带。中心灰度值默认设为50(太小显示效果不好)。根据半径的大小(一般是25,屏幕坐标),由中心(50)到边界(0)渐进地填充灰度。我使用黑色(任何颜色都可以)的Alpha通道来进行灰度值的累加,填充后中心位置的ARGB值是(50,0,0,0),边界处是(0,0,0,0),这样就能得到上图左边的灰度图了。最后根据灰度值映射色带得到彩虹带中对应位置的颜色。50的灰度值,只能映射到彩虹带的前1/5处,因而上图右边单热点的颜色以蓝色为主,略带青色。

每个单一热点有一个Weight,默认设为1,目前暂时没有用到(ArcGIS Flex的热图实现中,Weight用来在地图缩小时累加多个离散点聚合后中心灰度值的大小。我没去实现地图缩放的功能,但我觉得Weight会有别的用处,现在还没完全考虑好,以后有机会再说)。Weight不是类似通常二维空间数据中的第三维属性数据,热图只能表现离散点空间上的频率,而不能表现其属性在空间上的分布。例如地震震源的热图,并不能表示其震级大小的空间分布,而只能表现地震次数的多少。

(3)多热点叠加显示

叠加显示,点位置及权重是随机给的,半径是指定的。图中有422个点,半径是50。点越密集的的区域,叠加的灰度也就越多,映射后也显得比较“热”。

.Net实现方法

原理其实蛮简单的,但实现起来就要考虑一些比较琐碎的东西(做任何事情都一样的,看似简单,做起来结果处处是坑!)。我是用C#和GDI+实现的,网上也有很多实例代码,常见语言的版本都有,我也从中参考了不少,获益匪浅。

首先设计一个颜色辅助类ColorUtil:

上面是类中的部分代码,主要的三个函数,其中,

(1)GetGrayRamp是获取0~50的单热点的灰度带,该灰度带将用于填充单点的缓冲区;

(2)GetColorInRamp是根据灰度值去色带中映射颜色(表示色带的代码太长了,copy自Esri Flex API的源代码中);

(3)AdjustOpacity调整图片的透明度,使用了颜色矩阵。

另外还有一个是HeatMapMaker类:

其中,

(1)makeGrayMap先生成灰度图,使用了前面生成的灰度带、半径以及渐进画刷;

(2)MakeHeatMap生成热图,在灰度图的基础上,根据灰度去映射色带,并调整透明度,得到最终的热图。

还有一些别的代码,特别是用到了.net 4.5中新的异步功能,可能有所疏漏。话说ms的东西真是简单,有时简单到让人用起来没底气。

我把代码放到了GitHub上(https://github.com/hmfly/HeatMap),欢迎有兴趣的同学fork,或直接戳这里下载。指出错误或继续改进。当然我自己也会继续改进。虽然有点重复造轮子的感觉,而且我自己也并不喜欢造轮子,但我觉得对有兴趣的东西,了解其原理、实现方法,也是蛮有意思的事情。况且哪有这么多创新的东西,真正有创新也是在你充分了解了前人工作的基础上,加上一点点自己的想法,最终体现在一个点上的微创新吧。

下面是测试界面,可以控制点数、半径、透明度及色带:

测试程序也包含在源代码中。

最后,感谢以下链接及链接的主人:

  • C#–GDI+的LinearGradientBrush类 – 孤独的猫 – 博客园
  • http://www.cnblogs.com/djcsch2001/archive/2011/05/11/2043650.html
  • ArcGIS – ArcGIS Viewer for Flex HeatMapWidget
  • http://www.arcgis.com/home/item.html?id=43daf0ffb1d34e31ad752da1340aeb40
  • gheat – heatmaps for Google Maps – Google Project Hosting
  • http://code.google.com/p/gheat/
  • Netherlands-Spain – The matches of the 2014 FIFA World Cup Brazil™ – FIFA.com
  • http://www.fifa.com/Live/Competitions/worldcup/matchday=25/day=1/match=300061509/index.html
  • IDV User Experience: Heatmap Themes in Visual Fusion
  • http://uxblog.idvsolutions.com/2010/12/heatmap-themes-in-visual-fusion.html
  • Heat map – Wikipedia, the free encyclopedia
  • http://en.wikipedia.org/wiki/Heat_map
  • 浅谈Heatmap | 火丁笔记
  • http://huoding.com/2011/01/04/39
  • How to make heat maps in Flex
  • http://michaelvandaniker.com/blog/2008/07/06/how-to-make-heat-maps-in-flex/
  • Creating Heat Maps with .NET 2.0 (C#)
  • http://dylanvester.com/post/Creating-Heat-Maps-with-NET-20-(C-Sharp).aspx
  • 热点图简介 Heat Map Hotspot Map_青梅猪马_百度空间
  • http://hi.baidu.com/liongg/item/02ac97e06f21cdf12a09a49e
  • C#热图生成(一)——with .NET 2.0 – Gildor Wang – 博客园
  • http://www.cnblogs.com/Gildor/archive/2010/05/13/1734649.html
  • HeatmapTool.com | Demo
  • http://www.heatmaptool.com/demo.php
  • ArcGIS Viewer for Flex
  • http://serverapps101.esri.com/webapis/flex-viewer/flexviewer30/index.html?config=heatmap-config.xml
  • ArcGIS API for Silverlight – Interactive Samples – HeatMapLayerSimple
  • http://resources.arcgis.com/en/help/silverlight-api/samples/start.htm#HeatMapLayerSimple

分类: XGY

好文要顶 关注我 收藏该文  

h2z
关注 - 0
粉丝 - 171

+加关注

0

0

« 上一篇:Map与object的区别
» 下一篇:浅谈Heatmap

posted @ 2017-09-05 14:27 h2z 阅读(14761) 评论(0) 编辑 收藏

刷新评论刷新页面返回顶部

注册用户登录后才能发表评论,请 登录 或 注册,访问网站首页。

【推荐】超50万C++/C#源码: 大型实时仿真组态图形源码
【培训】IT职业生涯指南,Java程序员薪资翻3倍的秘密
【培训】架构师开发十年,就只剩下这套架构体系了
【推荐】专业便捷的企业级代码托管服务 - Gitee 码云

相关博文:
· 热力图实现-heatmap.js 代码示例
· 异步javascript的原理和实现
· Leaflet+heatmap实现离线地图加载和热力图应用
· 浅谈Heatmap
· GeoServer发布Heatmap

最新新闻
· 抄袭微信红包界面? 腾讯把“吹牛”告了
· 韩国政府:年内5G覆盖93%人口 建设23万座基站
· Netflix在亚洲多国推出移动版会员 便宜一半
· 宁波舟山港首次在作业中应用5G网络
· 女子在昏迷 27 年后醒来
» 更多新闻...

公告

昵称:h2z
园龄:3年8个月
粉丝:171
关注:0

+加关注

<2019年4月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

搜索

 

 

常用链接

  • 我的随笔
  • 我的评论
  • 我的参与
  • 最新评论
  • 我的标签

我的标签

  • Linux(17)
  • delphi(10)
  • Kali(6)
  • Nmap(5)
  • PHP(5)
  • PHPStorm(5)
  • Proxmark3(4)
  • Burp Suite(4)
  • Docker(4)
  • VMware(4)
  • 更多

随笔分类

  • C#(4)
  • Chrome(11)
  • dcm4che(16)
  • dcmtk(20)
  • delphi 笔记(140)
  • DICOM(12)
  • Direct2D(6)
  • EXCEL(4)
  • IOS(6)
  • Linux(19)
  • MacBook(2)
  • Meteor教程(22)
  • nodejs(6)
  • PACS(15)
  • phpMyAdmin(1)
  • QT(64)
  • RouterOS(6)
  • TuShare(1)
  • VMware(1)
  • VUE(23)
  • WEB(105)
  • WebUI(36)
  • weiphp(1)
  • Win系统(4)
  • XGY(53)
  • 安卓
  • 路由器(18)
  • 汽车(4)
  • 软件工程(8)
  • 深度学习(1)
  • 数据库(5)
  • 网络(49)
  • 网络安全(231)
  • 系统装机(15)
  • 硬件相关(30)
  • 油猴插件(2)

随笔档案

  • 2019年4月 (6)
  • 2019年3月 (16)
  • 2019年2月 (13)
  • 2019年1月 (20)
  • 2018年12月 (17)
  • 2018年11月 (20)
  • 2018年10月 (24)
  • 2018年9月 (35)
  • 2018年8月 (30)
  • 2018年7月 (8)
  • 2018年6月 (26)
  • 2018年5月 (10)
  • 2018年4月 (11)
  • 2018年3月 (37)
  • 2018年2月 (12)
  • 2018年1月 (20)
  • 2017年12月 (17)
  • 2017年11月 (17)
  • 2017年10月 (14)
  • 2017年9月 (27)
  • 2017年8月 (90)
  • 2017年7月 (32)
  • 2017年6月 (17)
  • 2017年5月 (15)
  • 2017年4月 (25)
  • 2017年3月 (46)
  • 2017年2月 (2)
  • 2017年1月 (27)
  • 2016年12月 (20)
  • 2016年11月 (16)
  • 2016年10月 (2)
  • 2016年9月 (5)
  • 2016年8月 (22)
  • 2016年7月 (9)
  • 2016年6月 (5)
  • 2016年5月 (24)
  • 2016年4月 (27)
  • 2016年3月 (43)
  • 2016年2月 (13)
  • 2016年1月 (21)
  • 2015年12月 (11)
  • 2015年11月 (26)
  • 2015年10月 (11)
  • 2015年9月 (11)
  • 2015年8月 (21)

路由器

最新评论

  • 1. Re:深入浅出的讲解傅里叶变换(真正的通俗易懂)
  • 当然,这些粉色的点只标注了波峰距离频率轴的距离,并不是相位。
    您好,这里没有理解相位是什么意思?能解释一下什么是相位吗?
  • --需要瘦下来的Vector
  • 2. Re:技术研究 | 我所了解的物联网设备渗透手段(硬件篇)
  • 你博客里关于网络安全的文章是原创还是转的?
    因为我在其他平台看到好多类似的文章
  • --恶霸超人强
  • 3. Re:delphi 接口Interface
  • 这是把接口介绍最为细腻清楚的文章之一
  • --USEGEAR
  • 4. Re:技术讨论 | 简谈渗透测试各阶段我常用的那些“神器”
  • 博主好,感谢分享,文章写得挺好的。不过我来晚了,工具的百度云链接失效了。
  • --hanhanren
  • 5. Re:使用CEF类库处理HTTP请求
  • 这个种写法好像会出现相同的url的话会出现问题,导致每次下载的图片都是第一次的那个图片。
  • --青山与绿水

阅读排行榜

  • 1. 深入浅出的讲解傅里叶变换(真正的通俗易懂)(98577)
  • 2. Linux中文乱码问题终极解决方法(75106)
  • 3. git-svn:通过git来管理svn代码(22090)
  • 4. vue2.0动态添加组件(16354)
  • 5. HeatMap(热图)的原理和实现(14760)

评论排行榜

  • 1. 深入浅出的讲解傅里叶变换(真正的通俗易懂)(8)
  • 2. 大众车机天宝187A Hack笔记(5)
  • 3. windows环境按照dcm4chee(3)
  • 4. Ubuntu 16.04 安装 VMware-Workstation-12(3)
  • 5. 技术研究 | 我所了解的物联网设备渗透手段(硬件篇)(2)

推荐排行榜

  • 1. 深入浅出的讲解傅里叶变换(真正的通俗易懂)(36)
  • 2. 八百元八核的服务器?二手服务器搭建指南(5)
  • 3. UML类图符号 各种关系说明以及举例(3)
  • 4. 大众车机天宝187A Hack笔记(2)
  • 5. 遇到Elements in iteration expect to have 'v-bind:key' directives.' 这个错误(2)

Copyright ©2019 h2z


http://chatgpt.dhexx.cn/article/H0MZ2AYY.shtml

相关文章

人体姿态估计-生成heatmap的方法

人体姿态估计-生成heatmap的方法 参考Simple BaseLine生成HeatMap的方法&#xff0c;这里整理进行显示&#xff0c;方便可视化&#xff1a; Simple BaseLine生成HeatMap的方法&#xff1a;human-pose-estimation.pytorch/JointsDataset.py at master microsoft/human-pose-es…

seaborn可视化——一文搞懂heatmap参数

文章目录 datacmaplinewidths、linecolorsquareaxannot指定为True指定为同形状数组 vmax、vminannot_kwsmaskxticklabels、yticklabels设置为auto指定整数指定为True centerrobustfmtcbar 数据使用的是seborn内置数据 官网链接&#xff1a;https://seaborn.pydata.org/generate…

BagNet特征heatmap可视化

BagNet地址&#xff1a;https://github.com/wielandbrendel/bag-of-local-features-models BagNet是ResNet的变体&#xff0c;显著的区别是将3x3卷积变为1x1卷积来达到构造整体网络具有某个最终的感受野(receptive field)目的。在这里主要讲解对于一张来源于ImageNet的尺寸为22…

关键点检测——heatmap热力图法

一、数据集格式 二、解析xml文件&#xff0c;生成data_center.txt from PIL import Image import math,os from xml.etree import ElementTree as ETdef keep_image_size_open(path, size(256, 256)):img Image.open(path)temp max(img.size)mask Image.new(RGB, (temp, te…

Learn OpenCV之Heatmap

本文是利用热图&#xff08;Heatmap&#xff09;分析视频序列的标定。 注意&#xff0c;这里目的不是标定而是分析标定好的数据&#xff0c;或者也可以是检测的结果数据 文章结构是这样的&#xff0c;先详细的解释一下热图分析有什么用&#xff0c;根据一些具体的应用实例给出…

python heatmap画法

任务描述 将一个归一化的分数以热图的形式显示出来&#xff0c;分数高的地方颜色深&#xff0c;分数小的地方颜色浅 注意&#xff1a;使用单一颜色无法实现这种渐变过程 原理 将单通道的0-1之间的score值映射到三通道的颜色空间 原料 一个单通道的score矩阵颜色空间列表&a…

python heatmap总结

基础使用 import seaborn as sns; sns.set_theme(color_codesTrue) iris sns.load_dataset("iris") species iris.pop("species") g sns.clustermap(iris)取消行列分类树 import seaborn as sns; sns.set_theme(color_codesTrue) import matplotlib.p…

seaborn绘制heatmap

【seaborn.heatmap整理】 用处&#xff1a;将数据绘制为颜色方格&#xff08;编码矩阵&#xff09;。 引用形式&#xff1a; seaborn.heatmap(data, vminNone, vmaxNone, cmapNone, centerNone, robustFalse, annotNone, fmt’.2g’, annot_kwsNone, linewidths0, linecolor‘…

Heatmap

前言 目前所说的模型可视化或者模型可解释说到是对某一类别具有可解释性&#xff0c;直接画出来特征图并不能说明模型学到了某种特征&#xff0c;对一个深层的卷积神经网络而言&#xff0c;通过多次卷积和池化以后&#xff0c;它的最后一层卷积层包含了最丰富的空间和语义信息…

R | 可视化 | 热图(Heatmap)

1 基础绘制 R绘制热图时&#xff0c;数据需要输入一个矩阵&#xff0c;可以用as.matrix()把它转换成矩阵。这里利用R自带的数据集绘制热图。 > # 数据 > data <- as.matrix(mtcars) > > # 绘制热图 > heatmap(data) OUTPUT: 热图的每一列是一个变量&…

科研作图-heatmap(一)

1.简介 在科研中有很多地方为了可解释给审稿人提供了热图,便于知道深度学习中到底是哪部分在起作用,或者是在机器学习中分析不同的特征之间是否存在相关性?存在多大的相关性;或者是直观的展示场景热力图…总之,用处很多,我正好现在也需要用,就先总结下:绘制HeatMap的库有很多,…

「C#」生成HeatMap(热度图)的实现

1、什么是Heatmap 其实不用多言&#xff0c;需要这个的人自然知道这是什么。基于一系列点生成的热度图&#xff0c;放张图感受一下&#xff1a; ma...大概就是这种样子。 2、生成&#xff08;计算&#xff09;原理 实现方式实际上是在每个点上叠加高斯矩阵。高斯矩阵就是在二…

关键点检测的heatmap介绍

开始学关键点检测的时候&#xff0c;到处找找不到heatmap的解释。现在大概有些懂了&#xff0c;干脆自己写一个。部分转载。 关键点定位任务两种做法&#xff1a;heatmap和fully connected回归&#xff08;Heapmap-based和Regression-Based&#xff09; heatmap得到一张类似热…

python绘制热度图(heatmap)

1、简单的代码 from matplotlib import pyplot as plt import seaborn as sns import numpy as np import pandas as pd#练习的数据&#xff1a; datanp.arange(25).reshape(5,5) datapd.DataFrame(data)#绘制热度图&#xff1a; plotsns.heatmap(data)plt.show() 查看效果&a…

热图(Heatmap)绘制(matplotlib与seaborn)

热图是数据统计中经常使用的一种数据表示方法&#xff0c;它能够直观地反映数据特征&#xff0c;查看数据总体情况&#xff0c;在诸多领域具有广泛应用。 一&#xff1a;matplotlib绘制方法 1.基础绘制 热图用以表示的是矩阵数据&#xff0c;例如相关阵、协差阵等方阵&#…

‘0’ 和 '\0'

48是0对应的ascii值。

KEIL/MDK编译优化optimization选项注意事项

KEIL编译器C语言编译选项优化等级说明 -Onum Specifies the level of optimization to be used when compiling source files. Syntax -Onum Where num is one of the following: 0 Minimum optimization. Turns off most optimizations. When debugging is enabled, this opt…

0,'\0','0'

#include <iostream> using namespace std; int main(void) { cout<<__FILE__<<\t<<__LINE__<<endl;cout<<"内 容:\t"<<"0"<<\t<<"\\\0\"<<\t<<"\0\"<<…

Odoo

狭路相逢 勇者胜 Odoo 是用于经营公司的最好的管理软件。 数百万用户使用我们的集成应用可以更好地开展工作 现在开始。免费的。 重新定义可扩展性 一个需求&#xff0c;一个应用程式。整合从来没有那么顺畅 促进销售量 客户关系管理POS销售 整合您的服务 项目工时表帮助…

0 、 '0' 、 0 、 ’\0’ 区别

转载自&#xff1a;https://blog.csdn.net/qnavy123/article/details/93901631 ① ‘0’ 代表 字符0 &#xff0c;对应ASCII码值为 0x30 (也就是十进制 48) ② ‘\0’ 代表 空字符(转义字符)【输出为空】 &#xff0c;对应ASCII码值为 0x00(也就是十进制 0)&#xff0c; …