C++编程技术
文章平均质量分 89
箜_Kong
2008年毕业于中国矿业大学地理信息系统专业。长期从事遥感图像处理算法和软件的编写工作。对于遥感图像的常用处理软件有很深入的了解。同时对GDAL有着较深入的理解。长期承接各种遥感图像处理算法程序的编写。
展开
-
GDAL分块处理简单的流程
GDAL分块处理流程使用GDAL库在编写图像处理算法时,为了提高处理的效率,经常会进行分块处理,下面的代码是使用GDAL分块处理的一个简单示例:图像分块代码影像分块代码,只有输入输出图像路径,对原始图像经过一定的处理,将结果写入输出图像。此处原始图像和结果图像的大小完全一致。具体流程参考下面的代码以及里面的注释部分。#include "gdal_priv.h"bool ImageProcess(co原创 2017-06-29 11:05:48 · 7688 阅读 · 17 评论 -
GDAL读取S-57海图数据中文属性值乱码问题解决(续)
上篇博文中的代码使用了函数wcstombs来进行处理,今天发现GDAL库里面提供了宽字节转单字节的函数,名字叫CPLRecodeFromWChar(这个函数需要libiconv库的支持,也就是在编译GDAL的时候需要把libiconv库一起编译)。本以为C#语言也可以使用,结果很悲剧的发现,C#的提供的接口中没有相关的函数,看来使用C#的同学有点悲剧了。需要说明的是,需要先用函数CPLRecode原创 2013-04-25 19:23:01 · 6277 阅读 · 13 评论 -
mtl库在GCC编译器下的使用
最近一直在改造算法库,将其移植到Linux平台下。使用GCC编译器是发现MTL库中出现一大堆的问题。使用的MTL库下载地址为:http://osl.iu.edu/research/mtl/download.php3。在上面的网页中,需要下载下面三个压缩包,其中第一个是MTL库的源代码,第二个是在Visual Studio平台下编译的补丁包,第三个是gcc编译器的补丁包。http://osl.iu.原创 2013-03-26 20:20:34 · 2907 阅读 · 2 评论 -
关于Boost库的split函数在不同的编译器下的使用
之前在写算法的时候使用VS2008,最近需要往CentOS上部署,需要把代码使用gcc编译。由于在代码中使用了大量的boost库,按理说是应该没有问题的。但是今天出现了一个很奇怪的问题,boost的split函数编译不过去。比如下面的代码片段。 vector vStr; split(vStr, vPicFiles[i].filename(), is_any_of("_.")); 上面的代码使原创 2013-03-25 21:04:20 · 3611 阅读 · 0 评论 -
使用DEM生成彩色的立体图像
在上篇博客中,使用GDAL提供的函数生成彩色渲染图,但是不是立体的。在之前有一篇翻译的博文中可以使用Mapnik进行立体渲染详见“http://blog.csdn.net/liminlu0314/article/details/8550781”。仔细研究了下Mapnik中的渲染方式,发现使用的是一个很著名的开源库——AGG。 AGG,全名:Anti-Grain Geometry,是一个开源的、高效原创 2013-03-20 20:22:59 · 6560 阅读 · 0 评论 -
使用GDAL对DEM进行彩色渲染
在之前的博客中,我们已经看到了gdal对dem数据的强大的处理功能,其中除了坡度坡向等,还有一个比较厉害的,就是使用DEM生成一个彩色的图像。之前关于这方面也翻译了几篇博客,详见《使用GDAL对DEM渲染处理流程》、《使用阿富汗和巴基斯坦地区的SRTM数据生成山体阴影和彩色地形图》和《使用gdaldem创建彩色地形图和坡度阴影——thematicmapping.org译文(三)》,不过这些都是使用原创 2013-03-18 19:40:35 · 11186 阅读 · 1 评论 -
使用GDAL获取HDF等数据集中的图像
使用GDAL读取HDF,NetCDF等数据集中的数据时,一般需要两个步骤,第一,获取数据集中的子数据集;第二,通过第一步获取的子数据集读取图像数据。一般的HDF图像中会有很多个子数据集,比如常用的MODIS数据,使用Envi打开会弹出下面的对话框来让用户选择需要打开的子数据集(如图1)。图1 Envi打开Modis数据 从图1中可以看出,Envi是把所有的子数据集的波段都进行了列举,不过这点和GD原创 2013-01-07 20:42:30 · 16222 阅读 · 27 评论 -
使用GDAL对HDF数据进行geoloc校正
在上一篇博客中,大概说了下怎么使用gdal提供的gdalwarp工具来进行校正处理。其实质与envi的glt校正应该是一样的。我把gdalwarp的代码封装了一下,写了一个类来进行geoloc处理。希望对大家有用。 先是头文件,函数的注释很详细,就不多说了。后面的源文件就是从gdalwarp.cpp中摘录出来的,有兴趣的可以看gdalwarp.cpp ,下面的代码只是把这个文件中没有用到的代码删除原创 2013-03-02 17:15:02 · 7184 阅读 · 18 评论 -
使用RasterIO快速显示图像
这篇算是RasterIO的一个演示程序吧,源代码可以去资源中心去下载。在之前有一篇博客中(地址为:http://blog.csdn.net/liminlu0314/article/details/7072224),GDALRasterIO函数的使用中,有很多人留言,之后又在文章后面更新了一些例子代码。但是还是有很多人不是很清楚,就写个显示的小程序进行说明下吧。 首先简单的介绍下,我的原创 2012-05-29 19:47:08 · 11680 阅读 · 73 评论 -
GDAL对空间数据的管理
使用GDAL可以很方便的对空间数据进行管理(这里的管理主要是指复制、移动和删除)。有人可能会说这个功能不用GDAL也能很方便的实现,其实不然。很多的空间数据不是由一个单一的文件组成,而是由一些列文件共同组成,相信大家都对Erdas的img格式比较熟悉吧,这种图像格式,对于小图像来说一般常用就只有两个,那就是img和rrd格式,如果对于一个超级大的img格式,那么一个数据可能就会有四个文件组成,后缀原创 2013-02-21 19:16:59 · 4966 阅读 · 12 评论 -
GDAL栅格矢量化
GDAL提供了栅格矢量化等很给力的算法,但是好多算法都是通过Python脚本来提供的,对于没有安装Python环境的用户来说,这些非常有用的功能得到了很大程度的限制。GDAL工具中使用Python提供的就有栅格矢量化的功能,通过实验测试,将分类图进行矢量化后,能够很好的和原图进行匹配,而且也没有错误的多边形,下面就对GDAL中该功能做一个简单的说明。 GDAL栅格矢量化Python脚本分析,其位原创 2011-02-23 21:12:00 · 18740 阅读 · 57 评论 -
GDAL使用DEM数据计算山体阴影(Hillshade)
零、 前言 说起Hillshade,其实就是模拟太阳光照射地形所引起的明暗对比,然后来对地形图进行渲染,使之看起来具有立体效果的一种方式,常用于地图的渲染,如表1所示,具体的可以参考文献[1],表1中的图均来自参考文献[1]。表1 DEM、山体阴影以及应用对比 DEM图像(使用颜色渲染) 从左图的DEM图像中计算的山体阴影图 Paper Map Withou原创 2013-01-17 23:11:14 · 10393 阅读 · 4 评论 -
GDAL使用DEM数据计算地形指数
零、 前言 本文是接上文《GDAL使用DEM数据计算坡度坡向》,还是一篇关于DEM计算地形指数的一篇文章。这里所要计算的地形指数主要包括以下三个指数:地形耐用指数(Terrain Ruggedness Index,TPI)、地形位置指数(Topographic Position Index,TRI)和粗糙度(roughness)。 上面三个地形指数都是在一个3×3的窗口中计算的,3×原创 2013-01-15 22:54:26 · 16352 阅读 · 4 评论 -
基于GDAL的一个通用的3×3模板函数
在进行遥感图像处理时,经常会用到很多的模板算子,比如平滑锐化等,拉普拉斯算子,索伯尔算子等等。其实这些算法都一样,用一个模板窗口在图像上移动,然后把计算的结果写入图像中。 在查看GDAL源代码的时候,有个gdaldem的工具,里面有一个类似3×3的模板函数,我改造了一下,可以支持任意的3×3的模板运算。/*** @brief 3*3模板计算处理函数* @param hSrcBand原创 2012-12-18 21:40:30 · 8128 阅读 · 16 评论 -
GDAL读取S-57海图数据中文属性值乱码问题解决
使用GDAL读取S-57海图数据时,对于属性表中的中文属性值读出来是乱码。如图1所示。图1 S57海图数据中文乱码字段 通过调试代码发现,S-57文件中的中文是按照宽字节存储在文件中,而GDAL在读取时统一按照单字节来读取,这样就直接导致了中文属性值的乱码。比如这里有个字段属性值为“北京市”,读出来显示为“S琋^”,对应的十六进制为“0x17 0x53 0xac 0x4e 0x02 0x5e原创 2013-04-24 21:40:18 · 5479 阅读 · 5 评论 -
GDAL读取jpg文件中GPS坐标信息
在目前很多相机都支持在拍照的时候保留GPS信息,这些信息一般都是存储在jpg图像的exif信息中。下面内容主要说明如何使用GDAL库来读取jpg图像中的GPS信息并解析经纬度坐标。 首先,还是最常用的工具,gdalinfo,来查看这个GPS信息到底在什么地方。下面是使用gdalinfo输出的信息,图1为截图。Driver: JPEG/JPEG JFIFFiles: C:\Users\LiMinl原创 2013-04-26 21:18:44 · 7027 阅读 · 0 评论 -
GDAL打开mdb文件失败解决方法(二)
上一篇http://blog.csdn.net/liminlu0314/article/details/53433014博文中说到,可以通过配置项来解决mdb文件打开失败的问题。该问题主要是在64位的程序中会出现。仔细查看gdal的代码,发现在源码中已经针对这个问题进行了修改,但是测试发现修改的不彻底。 具体的bug信息参考http://trac.osgeo.org/gdal/ticket/559原创 2017-02-17 13:30:41 · 6568 阅读 · 0 评论 -
编写PhotoShop支持遥感图像数据
最近发现PS提供了自己的SDK,翻阅发现可以写一些插件使PS能够打开自己的图像格式,于是就参照里面的sample写了一个小的插件,能够使PS打开常用的遥感图像,比如erdas的img格式,pci的pix格式和envi的hdr以及spot的dim格式等。不多说了,截图如下:打开PCI的pix格式的图像打开erdas的img格式的图像理论上支持GDAL所支持的所有的图像格式,GDA原创 2010-12-03 09:15:00 · 7713 阅读 · 59 评论 -
编译GDAL支持OpenCL使用GPU加速
前言GDAL库中提供的gdalwarp支持各种高性能的图像重采样算法,图像重采样算法广泛应用于图像校正,重投影,裁切,镶嵌等算法中,而且对于这些算法来说,计算坐标变换的运算量是相当少的,绝大部分运算量都在图像的重采样算法中,尤其是三次卷积采样以及更高级的重采样算法来说,运算量会成倍的增加,所以提升这些算法的处理效率优先是提高重采样的效率。由于GPU的多核心使得目前对于GPU的并行处理非常热,同时也能原创 2015-11-30 21:29:38 · 7638 阅读 · 6 评论 -
GDAL库扩展Landsat系列MTL文件格式支持
Landsat系列卫星提供的数据,一般都是每个波段一个tif文件,然后外加一个MTL.txt的元数据文件,使用gdal可以直接打开每个波段的tif文件,但是有时候想在打开tif数据的同时能够自动读取MTL文件里面的元数据信息,这个时候就只能自己再解析这个文件了。比较麻烦,下面就是针对这种情况,直接在gdal库里面扩展一种支持landsat的mtl的格式,直接打开mtl文件的同时自动打开tif数据以原创 2015-09-23 19:22:10 · 9555 阅读 · 2 评论 -
ceres-solver库使用示例
上一篇博客大致说明了下ceres-solver库的编译,然后形成了一个二次开发的库,下面就是用这个二次开发库来写一个简单(其实不太简单)的DEMO来演示ceres-solver库的强大。我们以求解一个非线性的方程(椭球方程)的系数为例子。下面是椭球方程的公式。 我们要求解的就是。为了演示,我通过程序生成了一个单位球上面的一系列坐标,也就是上面的abc均为1,偏移量均为0。为了验证ceres-sol原创 2013-11-13 19:16:04 · 9279 阅读 · 4 评论 -
GDAL使用DEM数据计算坡度坡向
零、 前言 之前写过一个3×3的通用模板算子函数的博客《基于GDAL的一个通用的3×3模板函数》,网址:http://blog.csdn.net/liminlu0314/article/details/8316156。当时说是要基于这个函数写一个计算坡度坡向的函数。由于这段时间一直忙于别的事情,这件事情就拖着了,今天给大家补上。一、 简介 坡度(slope)是地表单元陡原创 2013-01-13 22:59:20 · 34735 阅读 · 42 评论 -
使用GDAL将12bit量化图像转为16bit或者8bit
很多遥感卫星数据使用的量化级别都要比8bit高,长江的WorldView用的是12bit的量化,对于一些图像处理软件,是不能直接处理12bit量化的图像,所以需要将12bit的数据转为16bit数据或者8bit数据来进行处理。 下面写了一个简单的函数来进行处理,具体原理很简单,就是使用GDAL将12bit的数据读进来,然后再使用线性拉伸为8bit存出去,或者直接保存为16bit数据。注意原创 2012-02-23 12:56:07 · 10519 阅读 · 18 评论 -
使用OGR2OGR将S57数据转为shp格式
S57海图数据中包含了大量的图层,在目前ArcMap软件作为必备的GIS软件之一,所以还是shp格式处理起来可能比较方便(这里的方便仅仅是对于某些人觉得shp最常见,用的最广泛而言,其实我本人觉得shp不好的地方就是一个数据要多个文件组成,有点不爽)。所以可能需要把S57的数据转为shp数据。下面使用gdal提供的ogr2ogr工具来进行转换,希望对大家有用。 首先我们使用ogrinfo查看s57原创 2013-04-26 21:50:55 · 9849 阅读 · 19 评论 -
关于GDAL计算图像坐标的几个问题
使用GDAL处理地理图像时,不可避免的会遇到一个问题,图像的地理坐标问题,因为有了这个地理坐标,地理图像才和普通图像有了最本质的区别,那么在使用GDAL时,如果处理与地理坐标相关的信息呢?下面进行简单的说明。1:如何使用行列号计算图像的地理坐标?或者如何通过地理坐标来定位在图像的某个位置?2:如何获取图像的四至范围?或者如果通过指定的地理范围计算图像的所在区域? 要解决上面三个问题,首先需要知道和原创 2013-05-13 20:52:07 · 9637 阅读 · 26 评论 -
基于GDAL实现的PCA变换(主成分分析)
主成分分析(Principal Component Analysis,PCA), 将多个变量通过线性变换以选出较少个数重要变量的一种多元统计分析方法。又称主分量分析。在实际课题中,为了全面分析问题,往往提出很多与此有关的变量(或因素),因为每个变量都在不同程度上反映这个课题的某些信息。主成分分析首先是由K.皮尔森对非随机变量引入的,尔后H.霍特林将此方法推广到随机向量的情形。信息的大小通常用离差平原创 2013-05-21 20:28:25 · 8828 阅读 · 7 评论 -
使用MTL库求解矩阵特征值和特征向量
关于矩阵的特征值和特征向量求解,大部分的数学运算库都进行了提供,下面是使用MTL库的接口进行封装。#include #include #include #include #include /*! 对角阵 */typedef mtl::matrix , mtl::dense::type DiagMatrix;/*! 对称阵 */typedef mtl::matrix , mtl::原创 2013-05-21 20:10:05 · 4354 阅读 · 5 评论 -
如何使用GDAL进行AOI裁剪
在工作中,会经常使用一个行政区的矢量图去裁剪一个遥感影像图,得到该行政区的影像图,一般的商业遥感软件都具有这个功能。今天就是用GDAL来实现这一个很实用的功能。首先用到的是GDAL中的gdalwarp,又是warp,呵呵,上一篇就是使用warp进行重采样的。 首先需要用到gdal源码目录里面的app文件夹下的gdalwarp.cpp文件中的几个函数,大概行数是1651行,直到文件结尾,代码原创 2011-01-13 21:53:00 · 18579 阅读 · 126 评论 -
GDAL源码剖析(七)之GDAL RasterIO使用说明(续)
之前写了一篇 《GDAL RasterIO使用说明》http://blog.csdn.net/liminlu0314/article/details/7072224,很多人对于RasterIO这个函数的用法还是有很多的不明白,可能之前的那篇文章没有写的很清楚,下面再对这个函数进行说明。 在进入主题之前,我们先了解一下图像的基本存储方式。所谓的图像,先用单波段图像说明,图像就是一个很大原创 2012-12-16 14:37:14 · 12811 阅读 · 53 评论 -
使用GDAL下载并转换SRTM的DEM数据(二)
之前写了一篇使用GDAL下载SRTM的数据,只是大概说明了下怎么下载,文章后面说要写代码实现一下,最近太慢,一直拖着,这事肯定不会忘记的,呵呵。今天就把上次剩下的尾巴处理一下。之前的博客地址:http://blog.csdn.net/liminlu0314/article/details/8068715。 在上篇博客中大概分析了一下,首先要通过代码构造一个VRT文件。函数代码如下:int Crea原创 2012-12-08 13:22:12 · 5138 阅读 · 2 评论 -
代码的核心定义文件
之前的博客里面的很多代码,有一些自己定义的数据类型,很多人很迷糊,下面把我的代码定义的公用部分贴出来,方便大家查看代码。/***************************************************************************** Time: 2009-09-21* Project: 遥感平台* Purpose: 核心库文件* Autho原创 2012-11-26 20:58:03 · 4154 阅读 · 2 评论 -
GDAL算法进度条使用说明
在调用GDAL算法的时候,希望能够显示其处理进度信息,其实在GDAL的算法API中,一般最后两个参数就是进度信息的指针。下面分别实现两种进度条信息,一种是在控制台中的进度条,一种是基于QT界面的进度条(你可以参考写一个MFC的)。 对于GDAL来说,本身就实现了一个基于控制台的进度条函数,名字叫GDALTermProgress,其函数说明参考这里 ,调用这个进度函数后,会在控制台中显示一原创 2012-02-20 21:08:40 · 14981 阅读 · 13 评论 -
如何使用GDAL重采样图像
在编写重采样图像时,可以使用GDAL来读写图像,然后自己编写重采样算法(最邻近像元法,双线性内插法,三次立方卷积法等)【关于这采样算法有时间我会单独写一篇文章来说明原理的】将计算的结果写入图像中来实现。 在GDAL的算法中,已经提供了五种重采样算法,其定义如下(位置gdalwarper.h 的46行):/*! Warp Resampling Algorithm */typedef原创 2011-01-11 23:11:00 · 26095 阅读 · 77 评论 -
使用GDAL的MEM内存文件保存临时文件
在使用GDAL编写算法的时候,经常会将计算的中间结果存在一个临时的图像文件中,然后使用完再将其删除,如果临时文件就一个的话,创建一个也无所谓,但是当一个复杂的算法中可能会出现很多个临时文件的时候(我在编写Hariss角点自动匹配算法的时候有4个临时文件),这种情况下总觉得临时文件很不爽,此外第一个不爽的地方;第二个图像太大的时候,临时文件也会占用很大的空间,假如空间不足或者给定的临时文件路径不可写原创 2011-12-30 21:51:30 · 8607 阅读 · 15 评论 -
GDAL源码剖析(六)之GDAL开发及其调试
写在开头:最近工作太忙,没时间更新,今天抽空更新一篇,上篇博客是四,这篇是六,中间还有一篇第五篇,主要将GDAL中的Python工具集,尽快给大家更新。一、简单的调用关于GDAL的使用,网上的资料都很多,主要还是要熟悉GDAL的组织结构,类以及类的函数等,熟悉了,使用GDAL就不在话下了。最常用的就是动态库的GDAL,当然你也可以使用静态库,这里只是简单的介绍使用动态GDAL库来做开发。原创 2011-12-14 21:58:55 · 22652 阅读 · 77 评论 -
GDAL更新至1.8.1后,通过属性查询矢量出错问题的解决方式
在将GDAL更新至1.8.1之后,发现之前写的代码有些不能用了,前几天发现不能打开带有汉字的路径文件,并将其修改,详细参见我的CSDN博客,今天又发现在使用OGR_L_SetAttributeFilter的时候,之前可以进行过滤,现在err一直返回5,并且提示“语法错误”,代码如原创 2011-07-19 21:23:21 · 3988 阅读 · 9 评论 -
关于GDAL180中文路径不能打开的问题分析与解决
GDAL1.8.0发布很久了,一直没有将自己的工程中的版本更新到1.80。今天将其更新到1.80发现含有中文路径的文件都不能打开了,影像和矢量文件都是。仔细对比了GDAL1.72和GDAL1.80的代码,终于发现了问题的所在之处,详细代码在GDAL_HOME\port\cpl_v原创 2011-07-16 09:29:00 · 14492 阅读 · 27 评论 -
关于MFC下使用MTL库编译错误的问题
在使用Matrix Template Library(MTL)库进行矩阵运算还是很给力的,但是遇到了一个比较悲剧的问题就是,在控制台程序中一切完美,而在MFC下使用该库会编译不过去,(编译环境VS2005SP1,VS2008下貌似没有这个问题)。 在MFC下编译,提示下面错误 1: 1>------ 已启动生成: 项目: TestUI, 配置: Debug Win32 ------ 2: 1>正在编译... 3: 1>stdafx.c原创 2011-03-12 15:20:00 · 2801 阅读 · 2 评论 -
OpenCV2.2的编译及其使用
1:OpenCV的下载地址 http://www.opencv.org.cn/index.php/Download 或者下载链接为 http://www.opencv.org.cn/download/OpenCV-2.2.0-win.zip 2:在编译之前需要使用CMake来生成VS2005等工程文件,然后参考网页 http://www.opencv.org.cn/index.php/VC_2008_Express%E4%B8%8B%E5%AE%89%E8%A3%85OpenCV2.0/原创 2011-02-18 15:49:00 · 3730 阅读 · 1 评论 -
关于遥感图像的控制点片匹配算法的一点想法(一)
在遥感图像的几何纠正过程中,可能会用到控制点库的点片自动匹配。关于控制点片匹配的算法有很多种,从最基本的分类可以分为基于像元的点片匹配和基于特征的点片匹配,由于基于特征的算法难度较大,一般使用的都是基于像元的。 首先简单说明一下,点片匹配在数字图像处理中交模板匹配(Match Template),模板匹配是数字图像处理的重要组成部分之一。把不同传感器或同一传感器在不同时间、不同成像条件下对同一景物获取的两幅或多幅图像在空间上对准,或根据已知模式到另一幅图中寻找相应模式的处理方法就叫做模板匹配。原创 2011-02-19 01:40:00 · 7880 阅读 · 3 评论