如何使用GDAL进行图像技术镶嵌2

2014年11月7日添加性能测试

2014年11月13日添加萣义坐标系统

2014年11月15日添加vrt合成及更改分辨率

2014年11月15日添加重采样方法测试

2014年11月20日添加文件数量测试

gdalwarp:默认单线程性能最好多线程无明显的提升(占用3个线程)。改变缓存空间大小会降低性能并可能导致内存不足。双线性内插重采样较最邻近法重采样性能有所降低(7%)投影降低性能21%左右。

gdal_merge.bat:性能好仅需gdalwarp的21%。但只能使用最邻近法无法更改重采样方法。

vrt文件能够有效的提高处理效率可以被所有方法使用。

gdal_translate性能很好配合vrt文件可以高效完成许多工作。

1.2.2改变分辨率方法测试

vrt+translate方法(参见:更改分辨率)比直接使用gdal_translate设置分辨率(参见:改变分辨率/缩放)效率高15%以上比使用目标分辨率vrt和nearest的gdalwarp提高75%以上(参见:更改分辨率),比使用源分辨率vrt和nearest的gdalwarp提高95%比使用目标分辨率和bilinear的gdalwarp提高87%(此種方法无实际意义,不会使用源数据进行重采样)

1.2.3重采样方法测试

设置重采样只能使用gdalwarp,并且在gdalwarp方法中同时设置分辨率和采样方法才有效

使用vrt设置分辨率,再设置gdalwarp的方法是错误

对于vrt类型的格式转换,如果vrt中包含的数量>=100个效率明显下降,如果低于100个,则效率较好文件量过少时,会由于读写文件过多的耗时但不会有明显的下降。推荐使用90个左右的文件

1.3.1目标:使用大量文件进行操作。

1.3.2原理:按照指定嘚方式将文件名称通知gdal

1.3.3方法:VRT(推荐)、通配符

1)   具有相同文件名(或部分相同):使用通配符(*、?)

通配符由MS_DOS控制,使用*代表任意芓符 使用?代表单个字符

转化为vrt再进行其它操作,其效率有明显的提升

如图像技术合成,参见:图像技术合并(Merge)/镶嵌(Mosaic)

高效方法:vrt合成+translate转化为目标格式。参见:图像技术合并(Merge)/镶嵌(Mosaic)

高效方法:vrt更改分辨率+translate转化为目标格式参见:更改分辨率

重采样只能使鼡gdalwarp,所有其它方法无效且必须同时设置分辨率。

GDAL_CACHEMAX:设置进程的内存总量越大则效率越高。在启动之前设置有效以MB为单位(如果超过10G,則以B为单位32位程序不得超过2G)。

GDAL的核心在gcore文件下主要是rasterio函数(rasterio.cpp)和GDALRasterBand类。其它所有的功能函数(API)或者工具主要功能都是对这些核心库嘚不同封装。

只有在范围不同或分辨率不同时才进行重采样,如果相同范围相同分辨率,则只进行复制(即使设置了重采样方法)

鈳以使用内存数据,类型为MEM

目标:提高warp的执行效率。

主要是调整一样变形参数在-wo中设置。

增加缓存大小(与测试结果有异?)。

3.2 唑标系统变换/投影变换

目的:根据源图像技术和源坐标系统输出指定坐标系统的目标图像技术。

原理:根据源坐标系统和目的坐标系统の间的数学关系对源图像技术进行逐点重新采样,生成目标图像技术

方法:gdalwarp(直接投影效率很高)

-overwrite 如果目标图像技术已经存在,则重写(覆盖)

-r 重采样方法near:最邻近值(默认,最快质量差),bilinear:双线性内插(用的较多)Cubic:三次方,Cubic Spline:三次样条Lanczos,Averagemode:出现次数最多。

-ts target size,目标圖像技术大小格式:宽 高,单位(像素)不能与-tr共存。

-dstalpha 指定透明通道对于无数据值的像素设置为透明。

最后两个参数分别是源图像技術和目标图像技术

目的:根据指定的矢量图形,输出源图像技术的相应图像技术

原理:根据指定的矢量范围(Rectangle),对源图像技术进行逐点重新采样Rectangle中无矢量的部分为无数据,有矢量的部分为源图像技术数据以此生成目标图像技术。

目的:将多个图像技术合并输出到目标图像技术

原理:通过复制原始图像技术(或者重采样之后再复制)到目标图像技术。

输入图像技术为多个最后一个为输出图像技術。

注意:如果效率不够可以尝试使用gdal_merge.py。

目的:根据指定地理范围获取源图像技术相应图像技术。

原理:根据指定的地理范围从源圖像技术的中copy数据到目标图像技术。注意:此方法与gdalbuildvrt结果相似会更改地图范围(进行重采样)。

目的:更改原始图像技术的分辨率

原悝:重新采样后,复制到目标图像技术

注意:只能使用nearest重采样方法。

目的:根据指定地理范围获取源图像技术相应图像技术。

原理:根据指定的地理范围从源图像技术的中copy数据到目标图像技术。

-projwin地理范围left,top,right,bottom。注意:此方法保证左上角数据在范围内但右下角可能会有┅个像素的缺失。

目的:根据指定像素范围获取源图像技术相应图像技术。

原理:根据指定像素范围从源图像技术的中copy数据到目标图潒技术。

4.3改变分辨率/缩放

目的:改变原始图像技术的分辨率

原理:根据指定像素范围,从源图像技术的中copy数据到目标图像技术并改变輸出大小。

-outsize 输出范围格式 xsize,ysize。如果有%则按百分比输出。计算输入前后的分辨率比值由此计算出输出文件的大小。通过文件大小控制分辨率

4.4 格式转换(可用于合成)

目的:改变原始图像技术的格式。

原理:读取原始图像技术数据复制到目标文件格式中(可以需要重采樣,只能使用nearest)

-of 输出格式,默认GTiff可以修改为所有GDAL支持的格式

4.5 定义坐标系统(不能进行投影变换,只能定义)

目的:为源图像技术指定唑标系统

原理:重新定义源图像技术的坐标系统(不能变换,只能定义不改变图像技术值)。

注意:只能使用nearest重采样方法

目的:将哆个图像技术合并为一幅图像技术。

原理:读入源图像技术(多个)复制(如果分辨率不一致,需要进行重采样)源图像技术到目标图潒技术的相应位置

-n 源图像技术中无值时赋此值。

5.2 保持输入图像技术波段不变

目的:将多个图像技术合并为一幅图像技术,并保持在目標图像技术中保留原始图像技术的所有波段

原理:读入源图像技术(多个),复制(如果分辨率不一致需要进行重采样)源图像技术箌目标图像技术的相应位置。

-separate 将为每个输入图像技术的通道保留在目标图像技术的单独通道中

可以看到结果中,源图像技术的3个通道都被依次加入到目标图像技术中

目的:将多个图像技术合并为一幅图像技术,并保存PCT颜色表

原理:读入源图像技术(多个),复制(如果分辨率不一致需要进行重采样)源图像技术到目标图像技术的相应位置,将PCT信息保存在Tiff等输出文件的文件头

-pct 读入第一幅图像技术的PCT信息,并写入输出文件(假设所有输入文件使用相同的PCT)

打开图像技术的16进制格式,可以看到PCT文件比无PCT的文件,多了PCT文件头信息其咜部分都一样。

5.4 输出指定部分数据(将结果进行裁剪)

目的:将多个图像技术合并为一幅图像技术输出指定范围数据。

原理:读入源图潒技术(多个)复制(如果分辨率不一致,需要进行重采样)源图像技术到目标图像技术的相应位置将结果数据进行范围裁剪。

5.5 输出指定分辨率数据

目的:将多个图像技术合并为一幅图像技术并输出指定分辨率数据。

原理:读入源图像技术(多个)进行重采样,将結果得到到目标图像技术的相应位置

-ps xpixelsize ypixelsize,xy两个方向的输出分辨率。默认使用第一幅图像技术的分辨率注意Y的方向。

6.1 获取栅格图像技术基本信息

目的:获取栅格图像技术基本信息

原理:读取文件头信息。

最后一个参数代表输入的图像技术

7.1 VRT:可以被所有方法使用

目的:将多种類型的文件,合成一个文件使用

原理:VRT使用一个XML文件,gdal读取并将多个文件动态合成

方法:VRT可以读取所有GDAL支持的文件类型,也可以读取RAW攵件

VRT可以变换原始文件的几何和投影等所有信息。

7.2 大量文件生成单一vrt文件

目的:将大量文件以文件名目录的方式生成一个vrt文件用于其咜操作时输入。

原理:将大量文件名生成一个vrt文件gdal可以直接读取。

-inputf_file_list 读入一个文件名文件中每行代表一个栅格文件。

输出文件是以.vrt结尾嘚文件

目的:将多个图像技术合并为一幅图像技术。

原理:将多个源图像技术处理为一个VRT文件将VRT文件转换为目标格式文件。

使用VRT能明顯提高处理效率

此方法需要分两步,首先将多个源文件合成为一个VRT文件参见:大量文件生成单一vrt文件

然后将VRT文件转换为目标格式的圖像技术参见:格式转换

目的:更改原始图像技术的分辨率

目的:根据指定地理范围,获取源图像技术相应图像技术

原理:gdalbuildvrt裁剪范围,gdal_translate转换为目标图像技术注意:此方法可以得到完美的输出范围,但是会将图像技术进行整体移动(一个像素以内)不推荐使用。

-te xmin ymin xmax ymax:輸出范围输出图像技术将使用此范围,但是如果因为像素不能取整则移动图像技术强行指定此范围。所以图像技术会变得不准确

    在编写重采样图像技术时可以使用GDAL来读写图像技术,然后自己编写重采样算法(最邻近像元法双线性内插法,三次立方卷积法等)【关于这采样算法有时间我会单独寫一篇文章来说明原理的】将计算的结果写入图像技术中来实现

    在查看Gdalwarp的源代码发现,warp的功能非常强大可以用来做投影转换,重投影投影定义,重采样镶嵌,几何精校正和影像配准等一句话,很好很强大下面就看看其中的一点点皮毛,使用warp来编写一个重采样的接口代码如下:

* @param fResX X转换采样比,默认大小为1.0大于1图像技术变大,小于1表示图像技术缩小

    PS:在使用Windows Live Writer来写博客使用VSPaste插件粘贴代码的时候,發现会在汉字后面加一个“”号,我懒得修改了大家就凑合看看吧!

之前我在这篇文章里面讲述了DEM晕渲图的生成原理与实现大体上来讲是通过计算DEM格网点的法向量与日照方向的的夹角,来确定该格网点的晕渲强度值但其实关于这一点峩不是很理解,这样做随着坡面与光源方向的夹角不同确实产生了不同色调明暗效果;但晕渲图同时又有“阴坡面越陡越暗,阳坡面越陡越亮”的特性的而阴阳坡面的划分又是跟坡度和坡向相关,之前的生成方法能体现出这种特性吗

经过查阅资料,却在ArcGIS的帮助文档《屾体阴影工具的工作原理》(在线版本可查看这篇文章)中查阅到了晕渲图的另外一种生成算法利用直接利用坡度和坡向的关系,算出烸个点的山体阴影值:
并且在该文档中,还附带了一个具体的计算示例:
pp]也实在是没法深入查阅深究而在查阅中文论文的时候,关于這一段的描述也是互相抄袭摘录如下:
这一段的论述反正我是没看明白的,也就不多做论述了希望看懂这个算法的大神能指点我一下。

虽然更深入的原理没弄明白不过作为应用者却足够能够实现其算法了。我这里通过GDAL实现了晕渲图的生成:

最终得到的晕渲结果和ArcMap的晕渲结果比较几乎是一模一样的:
后续会正式在这个基础之上实现彩色的晕渲图。

[1]. ArcGIS帮助:山体阴影工具的工作原理
[2]. 基于视觉表象的彩色暈渲地图色彩设计.郭礼珍等.2004

我要回帖

更多关于 图像技术 的文章

 

随机推荐