热力图是数据可视化项目中,比较常用的显示方式。通过颜色变化程度,他可以直观反应出热点分布,区域聚集等数据信息。

屏幕快照 2017-02-10 下午3.45.52.png

项目概述

我们的项目任务是统计场馆中参观者的实时区域分布情况,通过热力图显示出来。我们考虑采用WPF作为数据显示部分。

实现原理

热力图实现过程就是通过简单的数学变化,将离散的点信息映射到最终图像上的过程。

实现过程如下:

为离散点信息创建一个Mask。Mask是一个圆形区域,半径为该点可以对最终热力图像产生影响的区域半径。中心点的权重为1,越向边缘辐射,权重越低,边缘部分的权重为0。Mask的渐变过程可以考虑多种形式,如线性变化,二次曲线等。

将所有离散点Mask进行叠加,产生一幅灰度图像。相邻Mask的重叠部分进行权重累加操作,最终灰度图中每个像素点的数值大小就是所有和其有关的Mask中的权重之和。 离散点密度越高的地方,灰度图种像素点数值越高,即图像越亮。

根据具体项目不同,可考虑将权重乘上一个固定系数。

将生成的灰度图映射到彩色图像上。

映射对于关系

灰度图

彩色图

0%

(0,0,0)(Black)

25%

(0,0,255)(Blue)

50%

(0,255,0)(Green)

75%

(255,255,0)(Yellow)

100%

(255,0, 0)(Red)

将灰度图百分百映射到彩色图的Alpha通道上,可以增加色彩的透明感觉。

pixels[i, j, 3] = (byte)(gray[i, j]*255);

参考代码(C# .net)

void getGrayMap()

{

for (int i = 0; i < height; i++)

for (int j = 0; j < width; j++)

{

gray[i, j] = 0.0f;

}

foreach (Point p in pointList)

{

int _X = (int)p.X;

int _Y = (int)p.Y;

int _startX = (_X >= radius) ? 0 : radius - _X;

int _endX = (_X < width - radius) ? radius * 2 + 1 : radius + width - _X - 1;

int _startY = (_Y >= radius) ? 0 : radius - _Y;

int _endY = (_Y < height - radius) ? radius * 2 + 1 : radius + height - _Y - 1;

for (int i = _startX; i < _endX; i++)

for (int j = _startY; j < _endY; j++)

{

gray[_Y - radius + j, _X - radius + i] += mask[j, i];

}

}

}

void getColorMap()

{

Color c1; //= new Color();

Color c2;// = new Color();

float procent = 0.0f ;

for (int i=0; i

for (int j=0; j

{

if (gray[i, j] >= 1.0f)

{

gray[i, j] = 1.0f;

c1 = colorMap[2];

c2 = colorMap[3];

procent = 1.0f;

}

else if (gray[i, j] >= 0.75f)

{

c1 = colorMap[2];

c2 = colorMap[3];

procent = (gray[i, j] - 0.75f) / 0.25f;

}

else if (gray[i, j] >= 0.5f)

{

c1 = colorMap[1];

c2 = colorMap[2];

procent = (gray[i, j] - 0.5f) / 0.25f;

}

else if (gray[i, j] >= 0.25f)

{

c1 = colorMap[0];

c2 = colorMap[1];

procent = (gray[i, j] - 0.25f) / 0.25f;

}

else

{

c2 = colorMap[0];

c1 = colorMap[4];

procent = (gray[i, j]) / 0.25f;

}

pixels[i, j, 0] = (byte)(c2.B * procent + c1.B * (1.0f - procent));

pixels[i, j, 1] = (byte)(c2.G * procent + c1.G * (1.0f - procent));

pixels[i, j, 2] = (byte)(c2.R * procent + c1.R * (1.0f - procent));

pixels[i, j, 3] = (byte)(gray[i, j]*255);

}

}

显示效果

屏幕快照 2017-02-10 下午3.43.54.png

python热力图转灰度图_热力图(HeatMap)实现相关推荐

  1. 灰度图转热力图_热力图(HeatMap)实现

    热力图是数据可视化项目中,比较常用的显示方式.通过颜色变化程度,他可以直观反应出热点分布,区域聚集等数据信息. 屏幕快照 2017-02-10 下午3.45.52.png 项目概述 我们的项目任务是统 ...

  2. python热力图转灰度图_ThingJS之3D热力图,一个不那么“技术”的实现方式

    物联网通过配置热力图,可查看该场景中设备的分布或显示设备属性功能分布.ThingJS推出3D热力图,一个不那么"技术"的实现方式! 热力图是地理位置可视化的一种表现方式,能够使得比 ...

  3. 灰度图转热力图_二值图像、灰度图像、彩色图像

    二值图像 二值图像(Binary Image),按名字来理解只有两个值,0和1,0代表黑,1代表白,或者说0表示背景,而1表示前景.其保存也相对简单,每个像素只需要1Bit就可以完整存储信息.如果把每 ...

  4. opencv小工具-绘制resnet50热力图和灰度图-伪彩色映射

    在图像处理,尤其是医学图像处理的过程中,我们经常会遇到将灰度图映射成彩色图的情形,如将灰度图根据灰度的高低映射成彩虹色图.这个过程我们通常将之称为伪彩映射,伪彩映射的关键在于找到合适的彩色映射表,即c ...

  5. python用numpy和pil处理图像成灰度图_「火炉炼AI」机器学习047-图像的直方图均衡化操作...

    [火炉炼AI]机器学习047-图像的直方图均衡化操作 [火炉炼AI]机器学习047-图像的直方图均衡化操作 (本文所使用的Python库和版本号: Python 3.6, Numpy 1.14, sc ...

  6. #Python #字符画 #灰度图 使用Python绘制字符画及其原理

    由于最近身体状况不太好所以更新会有点慢,请大家多多包涵.同时也提醒大家注意保重身体! 前提:默认大家已经正确安装了 Python,且正确将Python配置到了系统Path . 目录 1.字符画的概况 ...

  7. cv2 inrange灰度图_基于openCV,PIL的深色多背景复杂验证码图像转灰度二值化,并去噪降噪处理分析...

    title: [python]基于openCV,PIL的深色多背景复杂验证码图像转灰度二值化,并去噪降噪处理分析 type: categories copyright: true categories ...

  8. python画矩阵热图_如何用python的matplotlib绘制热图

    python使用matplotlib绘制热图 python常用的绘图库就是matplotlib,今天在给公司绘图时,偶然间发现matplotlib可以绘制热图,并且十分简洁,拿出来跟大家分享一下.(由 ...

  9. python opencv实现灰度图的符号化(仿qgis单波段伪彩色)

    一.前言: 博主在使用qgis对图像进行处理的时候,发现qgis里面图层的符号化可以讲灰度图进行单波段伪彩色的操作,很方便对图像进行观察,后期需要大批量处理图像,所以用python实现了这个功能. 二 ...

  10. 如何二值图转化为灰度图_木工真空吸附雕刻机如何用精雕5.21把精雕图模型转为灰度图...

    随着数控雕刻机的普及,用户们对雕刻图纸的需求量越来越大.目前中国主流的雕刻图纸制作软件是北京精雕,也就是常说的精雕图.因不同的需要,很多人习惯使用灰度图来进行雕刻.本文无锡酬信雕刻机厂家小编以精雕5. ...

最新文章

  1. win10 error LNK1112: 模块计算机类型“X86”与目标计算机类型“x64”冲突
  2. 如何用 OpenCV、Python 和深度学习实现面部识别?
  3. bootloader烧写
  4. sublime text3安装python插件和flake8_让你的代码符合PEP8标准——sublime text 2 安装及使用 Python Flake8 Lint 插件...
  5. ADO.NET数据绑定 DataTabele
  6. [置顶] Oracle 11.2.0.3.0 Active Data Guard 遇 ORA-10458、ORA-01152、ORA-01110 错误
  7. 技巧分享 PDF如何删除数字签名
  8. 电脑e盘里的文件误删了 如何恢复教程分享
  9. PAT 乙级A1025 适合当算法入门练习题做
  10. 黑客编程入门书籍推荐——《WINDOWS黑客编程技术详解》
  11. 如何删除pdf中计算机属性,从 PDF 中删除敏感内容
  12. 厉害!不到30行代码,自制成语接龙小游戏
  13. 不支持:http://javax.xml.XMLConstants/property/accessExternalStylesheet
  14. 如何专注?一个番茄钟就够了!
  15. 马云:关于P2P,不要你觉得,我要我觉得。---------王艾老哥
  16. 手机蓝牙c语言开发,蓝牙协议栈的研究及其C语言实现
  17. 兔老大的系统设计(二)定时系统(延时队列)
  18. kij是不是c语言语句,C语言第一二三章习题.doc
  19. 数字集成电路设计-13-常用模块集锦
  20. oracle的product删除不了,Linux下删除Oracle实例

热门文章

  1. java 读取图片_用java读取图片的三种方式
  2. 大一计算机课总结400字,第一学月总结400字以上
  3. 2015年终总结和2016年的计划
  4. 拆分单元格怎么弄?合并起来了怎么办?
  5. python父亲节礼物_盘点父亲节礼物,爸爸们的礼物也要用心挑选~
  6. 嵌入式系统开发-麦子学院(14)- uboot详解(1)
  7. Qt QPushButton水晶按钮样式例子
  8. 情商 智商 逆商,哪个最重要?
  9. FPGA信号处理系列文章——定点数据截位处理
  10. 谷歌浏览器部分iframe页面无法打开,跨域问题