栅格影像入门——设置NoData并添加Alpha波段以删除黑色边框

本文介绍了如何通过设置NoData值和添加Alpha波段来消除栅格影像的黑色边框。内容包括设置NoData可能带来的问题,使用Clipper转换器进行裁剪,以及结合Alpha波段以确保在重新投影时避免黑色边框的出现。

介绍

本文的目的是说明使用NoDataAlpha波段的一些方法,目的是删除图像周围的黑色边框。示出了设置NoData,设置/添加Alpha波段和/或裁剪的组合。可以设置/添加NoDataAlpha波段的不同方式以及每个用例的最佳方法。请注意,选择用于写入的格式也会在NoDataAlpha中起作用。每种格式列出了是否支持NoData值或Alpha波段。

来源数据

https://knowledge.safe.com/storage/attachments/13186-original.png

带有黑色边框的原始GeoTIFF文件

说明

选项#1:设置NoData

当前为黑色的边框值可以使用RasterBandNoDataSetter转换器将NoData值设置为,这将导致背景变为透明。如果这样做,就有可能在图像(有效数据范围)中存在一个像素,对于所有波段(匹配背景),该像素实际上设置为0。将0设置为NoData会将具有此值的单元格设置为透明,这对于有效数据来说通常是不受欢迎的。

请注意,对于数字数据,使用NoData更有意义,因为您可能会选择图像中不存在的值。

https://knowledge.safe.com/storage/attachments/13189-nodatablack.png

没有设置NoData的原始文件=图像中的黑色像素(即:所有3个波段都设置为0

https://knowledge.safe.com/storage/attachments/13188-nodatawhite.png

NoData设置为0 =当像素(0,0,0)应该是有效像素时变为透明

选项#2:剪裁黑色边框

可以通过创建裁剪要素或使用现有矢量要素使用Clipper转换器剪切黑色边框来删除黑色边框。如果没有在线下进行任何额外的处理,这很有效。如果要处理文件(即:重新投影),结果很可能会再次出现黑色背景,因为透明度问题仍未得到解决。此方法可用于不支持Alpha(透明度)或NoData的格式。如果需要重投影,则首先使用CsmapReprojector转换器进行重新投影,并根据重新投影的图像(而不是原始图像)建立裁剪要素是有意义的,因为边界经常会改变。

https://knowledge.safe.com/storage/attachments/13190-borderremoved.png

栅格被剪裁以去除黑色边框

https://knowledge.safe.com/storage/attachments/13191-borderremovedreprojected.png

栅格被剪裁以移除黑色边框,但随后重新投影,黑色边框出现在剪切边界内

选项#3:设置Alpha波段并剪切黑色边框

此方法不仅会剪切黑色边框,还会添加Alpha透明度带,以便任何进一步处理(如重新投影)不会再次引入黑色边框。如果输出格式支持Alpha并且在以后的处理中将进一步操作数据,这是使用的最佳方法。

https://knowledge.safe.com/storage/attachments/13192-clippednodata.png

剪辑和Alpha波段添加,重新投影后黑色边框不会返回

 

ArcGIS Engine 是 Esri 公司提供的一套用于构建定制 GIS 应用程序的软件开发工具包(SDK)。通过 ArcGIS Engine,开发人员可以在自己的应用程序中实现地图显示、编辑、空间分析等功能。要添加栅格影像计算其归一化植被指数(NDVI),可以按照以下步骤进行: 1. 添加栅格影像:首先,你需要使用 ArcGIS Engine 提供的 API 来加载栅格影像数据。这通常通过调用加载栅格数据的方法来完成,比如使用 `IRasterDataset` 接口的 `Open` 方法。 2. 计算 NDVI:NDVI 是通过近红外波段(NIR)红光波段(Red)的反射值来计算的。其计算公式为:NDVI = (NIR - Red) / (NIR + Red)。在 ArcGIS Engine 中,你需要读取这两个波段栅格数据,然后根据 NDVI 公式进行计算。这可能需要访问栅格波段数据,执行像素值的运算,创建一个新的栅格数据集来存储计算结果。 3. 显示结果:计算完成后,可以将结果栅格影像加载到地图上显示。 以下是使用 ArcGIS Engine 计算 NDVI 的基本代码框架示例(假设使用的是 ArcObjects 的某种编程语言,比如 C#): ```csharp // 加载栅格数据 IRasterDataset rasterDataset = (IRasterDataset)AoInitialize.GetAOFactory(AoInitializeersive.AoFactoryType.AoFactoryEsriGeodatabase); IRasterLayer rasterLayer = new RasterLayerClass(); rasterLayer.Create(rasterDataset.PathName, ""); // 获取栅格数据的波段 IRasterProps rasterProps = rasterDataset.RasterStorage; IRasterBandCollection bandCollection = (IRasterBandCollection)rasterProps; IRasterBand redBand = bandCollection.get_Band(0); // 假设红色波段是第一个波段 IRasterBand nirBand = bandCollection.get_Band(1); // 假设近红外波段是第二个波段 // 计算 NDVI IRaster redRaster = redBand.Raster; IRaster nirRaster = nirBand.Raster; IRaster resultRaster = ... // 这里需要创建一个新的栅格数据集,进行像素计算 // 显示计算结果 IRasterLayer resultRasterLayer = new RasterLayerClass(); resultRasterLayer.Create(resultRaster); // 将结果栅格图层添加到地图中 IMap map = ... // 获取或创建地图对象 IMapServer mapServer = ... // 获取或创建地图服务器对象 mapServer.AddLayer(map, resultRasterLayer, 0, 0); ``` 请注意,上述代码仅为示例框架,实际实现时需要进行适当的错误处理资源管理,例如使用 `try...catch` 语句来捕获异常,确保在完成栅格数据操作后正确释放资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值