python热力图转灰度图_一种基于瓦砾化的热力图加速渲染方法与流程

一种热力图加速渲染方法,通过将画布划分为子区域,利用多服务器并行处理,提高灰度图生成和色彩化效率,解决点数多、画布大时的效率问题。
摘要由CSDN通过智能技术生成

c3f68f5232f76be94cdeefd56e698c17.gif

本发明属于热力图处理技术领域,特别涉及一种基于瓦砾化的热力图加速渲染方法。

背景技术:

在生成热力图的过程中,往往是先确定一个生成的画布;再确定一个统一半径的圆,从圆心向外的射线方向上使用灰色带透明的渐变填充,形成的圆按给定的点数和相应的坐标值在画布上重复的叠加。叠加后,点数较多的区域颜色较深,较少的区域,颜色较淡。

使用生成好的灰度图分别依次取每个像素点的透明度,按0~255的颜色深度作为索引,在已经提供好的色带上进行取对应深度索引的颜色值,并进行像素填充,填充完成后形成热力图。

现有技术从功能上实现了热力图的生成,但是,由于点数较多、画布较大的情况下,生成的速度是呈线性增长的,尤其是点数较多的情况下,由于灰度图的点必须一个一个的填充在画布上再进行叠加,工作方式呈串行,点数越多,效率越差;再则画布较大的情况下,色彩化是通过一个点、一个点的获取颜色深度来进行查找对应彩带值,渲染效率按画布的长宽呈几何增长。

技术实现要素:

本发明的目的是提供一种基于瓦砾化的热力图加速渲染方法,解决了在处理热力图时,灰度图生成速度慢的技术问题。

为实现上述目的,本发明采用以下技术方案:

一种基于瓦砾化的热力图加速渲染方法,包括如下步骤:

步骤1:连接主服务器和数个渲染服务器,所有渲染服务器均通过网线与主服务器通信;

步骤2:主服务器获取生成热力图所需要的图形数据,图形数据包括热力图中所有灰度点的原点的坐标和灰度点的大小;

步骤3:在主服务器中创建一个整体画布,设定该整体画布的长为A,宽为B;将该整体画布划分为N个子区域,每一个子区域实际的长为x,宽为y;创建子区域画布,由于灰度点的大小为实际值,设定灰度点的半径为R,则有子区域画布的长为:X1=x+2R,子区域画布的宽为:Y1=y+2R;即,子区域画布比子区域实际多出了一个区域,设定该区域为公共区域;

对每一个子区域均匹配编号,设定位于整体画布最上方的一行子区域为第一行子区域,从上至下依次对所有子区域所在行进行编号,位于整体画布最左边的一列子区域为第一列子区域,从左至右依次对所有子区域所在的列编号;

将所有子区域所在的行编号和列编号记录到字典中;

主服务器将所有子区域画布分配给所有渲染服务器,每一个渲染服务器处理多个子区域画布;

步骤4:在渲染服务器中完成一个子区域画布上的灰度点的绘制:设定整体画布最左上角的点为坐标原点,灰度点的原点在整体画布上的横坐标为X2,纵坐标为Y2,通过以下公式计算灰度点的原点在哪一个子区域画布上:

子区域画布的行编号=(0,1,2,3...(Y2÷y)),式中最大行数为大于或等于Y2÷y的整数值;

子区域画布的列编号=(0,1,2,3...(X2÷x)),式中最大列数为大于或等于X2÷x的整数值;

再通过以下公式计算灰度点的原点在该子区域画布的相对位置:

设定灰度点的原点在该子区域画布的相对位置,设所述相对位置的横坐标为X4,纵坐标为Y4,那么:

X4=X2-(子区域画布的行编号×x)-R;

Y4=Y2-(子区域画布的列编号×y)-R;

根据所述相对位置在该子区域画布上绘制灰度点;

步骤5:重复执行步骤4直到所有灰度点都绘制完毕;

步骤6:在主服务器中获取所有被渲染服务器绘制好的子区域画布,根据子区域画布的编号将所有子区域画布重新填充组合成新的整体画布,组合时,相邻两个子区域画布的公共区域重叠在一起;

步骤7:根据步骤3中子区域实际的大小将步骤6中得到的整体画布再次分割成N的裁切区域,每一个裁切区域的大小与子区域实际的大小相同,再根据步骤3的方法对所有裁切区域进行编号,主服务器将所有裁切区域分配给所有渲染服务器;

步骤8:渲染服务器对裁切区域进行颜色填充:首先读取裁切区域中所有灰度点的灰度值,灰度值的大小为0-255;然后根据灰度值在彩色色条中查找相应的颜色,并填充到灰度点上,实现色彩化;

步骤9:主服务器获取所有经过渲染服务器填充好颜色的裁切区域,并根据裁切区域的编号将其从新组合成整体的彩色热力图。

所述彩色色条为计算机中应用的色条,其色彩的取值范围为0-255。

在执行步骤6时,设置各个子区域画布背景色为透明,对灰度图进行颜色叠加。

所述主服务器设置线程池,根据渲染服务器的处理排队情况分配任务。

本发明所述的一种基于瓦砾化的热力图加速渲染方法,解决了在处理热力图时,灰度图生成速度慢的技术问题,本发明采用多线程多服务器处理方式,同时处理多个子区域图像,灰度图生成速度明显加快,色彩化时间相对于原来有一定的提升,整体渲染时间有明显效果。

附图说明

图1为本发明的流程;

图2是本发明的将整体画布划分为N个子区域的示意图

图中:子区域画布1、公共区域2、灰度点3。

具体实施方式

如图1-图2所示的一种基于瓦砾化的热力图加速渲染方法,包括如下步骤:

步骤1:连接主服务器和数个渲染服务器,所有渲染服务器均通过网线与主服务器通信;

步骤2:主服务器获取生成热力图所需要的图形数据,图形数据包括热力图中所有灰度点3的原点的坐标和灰度点3的大小;

步骤3:在主服务器中创建一个整体画布,设定该整体画布的长为A,宽为B;将该整体画布划分为N个子区域,每一个子区域实际的长为x,宽为y;创建子区域画布1,由于灰度点3的大小为实际值,设定灰度点3的半径为R,则有子区域画布1的长为:X1=x+2R,子区域画布1的宽为:Y1=y+2R;即,子区域画布1比子区域实际多出了一个区域,设定该区域为公共区域2;

实际应用时,用户在主服务器中输入该整体画布的长A,宽B;再输入每一个子区域实际的长x,宽y;最后输入灰度点3的直径L;主服务器根据A÷x计算出列数,再根据B÷y计算出行数,那么N=列数×行数;

对每一个子区域均匹配编号,设定位于整体画布最上方的一行子区域为第一行子区域,从上至下依次对所有子区域所在行进行编号,位于整体画布最左边的一列子区域为第一列子区域,从左至右依次对所有子区域所在的列编号;

将所有子区域所在的行编号和列编号记录到字典中;

主服务器将所有子区域画布1分配给所有渲染服务器,每一个渲染服务器处理多个子区域画布1;

步骤4:在渲染服务器中完成一个子区域画布1上的灰度点3的绘制:设定整体画布最左上角的点为坐标原点,灰度点3的原点在整体画布上的横坐标为X2,纵坐标为Y2,通过以下公式计算灰度点3的原点在哪一个子区域画布1上:

子区域画布1的行编号=(0,1,2,3...(Y2÷y)),式中最大行数为大于或等于Y2÷y的整数值;

子区域画布1的列编号=(0,1,2,3...(X2÷x)),式中最大列数为大于或等于X2÷x的整数值;

再通过以下公式计算灰度点3的原点在该子区域画布1的相对位置:

设定灰度点3的原点在该子区域画布1的相对位置,设所述相对位置的横坐标为X4,纵坐标为Y4,那么:

X4=X2-(子区域画布1的行编号×x)-R;

Y4=Y2-(子区域画布1的列编号×y)-R;

根据所述相对位置在该子区域画布1上绘制灰度点3;

步骤5:重复执行步骤4直到所有灰度点3都绘制完毕;

步骤6:在主服务器中获取所有被渲染服务器绘制好的子区域画布1,根据子区域画布1的编号将所有子区域画布1重新填充组合成新的整体画布,组合时,相邻两个子区域画布1的公共区域2重叠在一起;

步骤7:根据步骤3中子区域实际的大小将步骤6中得到的整体画布再次分割成N的裁切区域,每一个裁切区域的大小与子区域实际的大小相同,再根据步骤3的方法对所有裁切区域进行编号,主服务器将所有裁切区域分配给所有渲染服务器;

步骤8:渲染服务器对裁切区域进行颜色填充:首先读取裁切区域中所有灰度点3的灰度值,灰度值的大小为0-255;然后根据灰度值在彩色色条中查找相应的颜色,并填充到灰度点3上,实现色彩化;

步骤9:主服务器获取所有经过渲染服务器填充好颜色的裁切区域,并根据裁切区域的编号将其从新组合成整体的彩色热力图。

所述彩色色条为计算机中应用的色条,其色彩的取值范围为0-255。

在执行步骤6时,设置各个子区域画布1背景色为透明,对灰度图进行颜色叠加。

所述主服务器设置线程池,根据渲染服务器的处理排队情况分配任务。

本发明所述的解决了在处理热力图时,灰度图生成速度慢的技术问题,本发明采用多线程多服务器处理方式,同时处理多个子区域图像,灰度图生成速度明显加快,色彩化时间相对于原来有一定的提升,整体渲染时间有明显效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值