在上篇博客中,使用GDAL提供的函数生成彩色渲染图,但是不是立体的。在之前有一篇翻译的博文中可以使用Mapnik进行立体渲染详见“http://blog.csdn.net/liminlu0314/article/details/8550781”。仔细研究了下Mapnik中的渲染方式,发现使用的是一个很著名的开源库——AGG。
AGG,全名:Anti-Grain Geometry,是一个开源的、高效的2D图形库,它的网站:http://www.antigrain.com/。  AGG是一个用标准的平台无关的C++写成的通用图形工具包。它可以应用在计算机程序中需要高质量的2D图形的许多方面。例如,AGG可以用于渲染2D地图。AGG只使用了C++和标准C的函数,如memcpy,sin,cos,sqrt等。基本的算法甚至没有使用C++ Standard Template Library。因此,AGG能够在大量的应用软件中使用,包括嵌入式系统中。另一方面,AGG允许对库的一部分进行替换,比如在它不能适应性能的要求时。如果需要,你也能够添加其他的颜色空间。因为AGG是基于C++的模板机制的。
关于AGG的介绍就这么多了,想多了解的可以搜相关的内容,或者参考下面的参考链接。通过查看Mapnik的源代码和AGG的源代码,写了一个简单的使用DEM进行立体渲染的函数。函数的核心如下:

static void CalcResult(DT_8U *piR, DT_8U *piG, DT_8U *piB, DT_8U *piP, double dOpacity = 0.6)
{DT_8U sP = *piP;DT_8U sA = 255;DT_8U cover = static_cast<DT_8U> (dOpacity * 255 + 0.5);if(cover < 255){sP = (sP * cover + 255) >> 8;sA = (sA * cover + 255) >> 8;}//这里千万不能直接代入到下面的公式,否则会出错,DT_8U是无符号整数DT_8U s1a = -sA;sP = sP + s1a;if(sP == 0)    //如果SP为0,将其设置为255sP = 255;*piR = (DT_8U)(( *piR*sP ) >> 8);*piG = (DT_8U)(( *piG*sP ) >> 8);*piB = (DT_8U)(( *piB*sP ) >> 8);
}

上面的函数的前三个参数,就是使用DEM直接进行颜色渲染的RGB值,第四个参数是计算山体阴影的灰度值,第五个参数就是一个透明度的选项。有了上面的函数就可以结合之前的博客中的彩色渲染和山体阴影得到一个具有立体效果的彩色图像。具体效果如下图所示。

图1 原始DEM数据

图2 使用颜色表1,透明度为60%

图3 使用颜色表1,透明度为90%

图4 使用颜色表2,透明度为60%

颜色表1

0 110 220 110
900 240 250 160
1300 230 220 170
1900 220 220 220
2500 250 250 250

颜色表2

100% 255 0   0   255
45.5%   255 255 0   255
20.5%   0   255 0   255
6.7%    0   250 255 255
3.5%    0   128 255 255
1.7%    0   64  255 255
0%  0   10  255 255
nv  0   0   0   0

上面的处理效果没有GlobeMapper 的效果好,和Erdas的效果没进行比较过(主要是现在的电脑没装)。希望对大家有用,关于立体渲染,关键就是上面的渲染函数,即dst(RGB) = F(R,G,B ,P)。

参考资料:
http://www.antigrain.com/
http://en.wikipedia.org/wiki/Anti-Grain_Geometry
http://www.cnblogs.com/Kane_zzt/archive/2008/08/19/1271793.html
http://blog.csdn.net/liminlu0314/article/details/8688486
http://blog.csdn.net/liminlu0314/article/details/8550781

使用DEM生成彩色的立体图像相关推荐

  1. 使用GDAL对DEM进行彩色渲染

    在之前的博客中,我们已经看到了gdal对dem数据的强大的处理功能,其中除了坡度坡向等,还有一个比较厉害的,就是使用DEM生成一个彩色的图像.之前关于这方面也翻译了几篇博客,详见<使用GDAL对 ...

  2. OpenCV中的立体图像创建深度图

    OpenCV中的立体图像创建深度图 1. 效果图 2. 源码 参考 这篇博客将介绍如何从立体图像创建深度图. 1. 效果图 原图 VS 视差图效果如下: 可以看到结果受到高度噪音的污染.通过调整 nu ...

  3. 无需用户输入,Adobe提出自动生成高质量合成图像新方法

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 没有用户输入,也能生成高质量的合成图像吗? 编辑:迈威AI研习社 ...

  4. 无需用户输入!Adobe提出自动生成高质量合成图像新方法

    点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要15分钟 Follow小博主,每天更新前沿干货 本文转载自:机器之心  |  作者:He Zhang等 编辑:小舟.杜伟 没有用户输入,也能生 ...

  5. python 立体图像_OpenCV-Python 立体图像的深度图 | 五十二

    目标 在本节中, 我们将学习根据立体图像创建深度图. 基础 在上一节中,我们看到了对极约束和其他相关术语等基本概念.我们还看到,如果我们有两个场景相同的图像,则可以通过直观的方式从中获取深度信息.下面 ...

  6. opencv threshold_OpenCV-Python 立体图像的深度图 | 五十二

    目标 在本节中, 我们将学习根据立体图像创建深度图. 基础 在上一节中,我们看到了对极约束和其他相关术语等基本概念.我们还看到,如果我们有两个场景相同的图像,则可以通过直观的方式从中获取深度信息.下面 ...

  7. 科技最前沿!Adobe提出自动生成高质量合成图像新方法

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:机器之心 AI博士笔记系列推荐 周志华<机器学习> ...

  8. [Python]使用QRCode生成彩色二维码

    一. 安装QRCode模块 QRCode模块依赖于Pillow模块,在安装QRCode模块前需要先安装Pillow模块.可使用如下命令安装: pip install Pillow QRCode模块安装 ...

  9. 制作立体图像(上):红蓝眼镜原理

    立体眼镜分为色差式.偏光式等几种 其中色差式还可以再分为红-蓝.红-绿.红-青等,是最简单,但也是效果最差的一种 这里仅介绍常见的红蓝立体图像 这种方式仅需要一块红蓝眼镜,淘宝上买个很便宜的就可以了, ...

最新文章

  1. “纹身贴皮电路“:未来在皮肤上画个电路就能监测身体健康状况
  2. python3 json.dump乱码问题
  3. csdn和博客园对比
  4. .NET环境下创建Activex (转)
  5. java面试-Java并发编程(九)——批量获取多条线程的执行结果
  6. 穷人的语义处理工具箱之一:语义版Jaccard
  7. 【kafka】InvalidReplicationFactorException: Replication factor: 1 larger than available brokers: 0
  8. Docker 简易搭建 ElasticSearch 集群教程
  9. 拼多多这是得罪华为了?
  10. C语言中callback回调函数,C++回调函数(callback)的使用
  11. 《杂记》- 之- 使用windows终端命令查看文件的MD5
  12. 我的第一个小程序(Discuz! + 微信小程序)
  13. Python视频制作 MoviePy框架afx音频效果示例
  14. 5G商用价值到底在哪里,可以赋予哪些能力?
  15. 用缓动动画实现鼠标跟随
  16. 用popart构建常染色体单倍型网络(Autosomal haplotypes network construction with popart)...
  17. ChatGPT有效提问技巧
  18. 手机文件由百度网盘自动备份的设置
  19. adb通过无线wifi连接安卓手机
  20. 记调剂有感-一首小诗

热门文章

  1. 深度学习aps_配置一台配置深度学习主机
  2. 详解Base64编码和解码
  3. 令人发懵的“扇区”、“簇”、“块”、“页”
  4. 三维异面直线的距离和垂足求解
  5. 赵丽颖:没有什么配不配,你的努力发光了,你就是值得的!
  6. Http的使用——GET
  7. [原创]找工作(四格漫画)
  8. Redis缓存穿透解决方案
  9. 性能测试 理论初探(三),什么是性能测试分类?性能测试有哪些?性能测试分类 性能测试场景分析 负载测试、压力测试、容量测试等
  10. 向前欧拉公式 matlab_史上最完美的数学公式,你知道是什么吗