12.arcgis 去除影像黑色边框(nodata)

目的:

加载进arcmap的tif数据发现有黑边。
想要去除黑边。
12.arcgis 去除影像黑色边框(nodata) - 图1

问题:

1、在属性中设置“将NoData显示为绿色”,发现对黑色区域无效。
2、使用“识别”功能发现黑色区域为“nodata”,而绿色区域没有数值,为空值。
12.arcgis 去除影像黑色边框(nodata) - 图212.arcgis 去除影像黑色边框(nodata) - 图312.arcgis 去除影像黑色边框(nodata) - 图4

原理:

需要知道没有数据与显示“NoData”不一样。
黑色区域,“识别”显示“NoData”,表示此处没有有效数据,使用“NoData”存储。
绿色区域,“识别”显示“为空值,表示此处没有数据。

解决办法:

1、使用裁剪工具(数据管理-栅格-栅格处理-裁剪)裁剪。

需要用来裁剪的栅格文件,或者矢量文件。
效果如下。
12.arcgis 去除影像黑色边框(nodata) - 图5

2、使用栅格计算器(空间分析-地图代数-栅格计算器),栅格图像乘1。(arcgis10.6测试可行)

12.arcgis 去除影像黑色边框(nodata) - 图6
效果与上图一致。

ArcGIS下的影像去除NaN值或NoData值的超级简单方法

更新:软件可能对版本有一定的要求,实测ArcMap10.6+和ArcGIS Pro都可以
ArcGIS下去除影像的Nodata像元有很多方法,但是去除NaN值,有时候已有的方法都不能有效的解决。至于啥时候会出先NaN值,比如,Google Earth Engine在:
updateMask()
之后,影像结果到本当你导出地时,就会出现NaN值。
解决这个问题的方法,在ENVI平台上,App store中有一个插件,安装后,可以利用:
nan2zero(b1)
函数来去除。
不过,在ArcGIS中,也有一个”投机取巧”的方法,可以解决包括NaN在内的nodata的像元的方法:raster calculator
我们知道,栅格计算,只对有pixel value的像元起作用,
所以,我们可以使用:
12.arcgis 去除影像黑色边框(nodata) - 图7
来自动过滤没有value的像元,这样输出的结果,既可以不改变原有像元的值,又可以起到过滤的作用。
实例:
12.arcgis 去除影像黑色边框(nodata) - 图8处理前12.arcgis 去除影像黑色边框(nodata) - 图9计算公式12.arcgis 去除影像黑色边框(nodata) - 图10处理后

为影像数据去除无效值

在使用栅格数据时,黑边和白边问题比较困扰我们,╮(╯-╰)╭ ,丑丑地如下所示:
12.arcgis 去除影像黑色边框(nodata) - 图11
那如何处理这些问题呢?方法不是唯一的,我把 ArcMap 中最常用的几种方式列举一下,帮你给数据“化妆”,或者更确切的说是“整容”:

Option 1 栅格计算器

在去黑边之前最先需要了解的是黑边的像元值是什么? 可以使用 Identify 工具 查查看。 例如这份数据是 0。
12.arcgis 去除影像黑色边框(nodata) - 图12
这时,你也许会想到设置图层背景值的色彩可以吧?
12.arcgis 去除影像黑色边框(nodata) - 图13
如果仅为了显示使用,是可以解决问题的,但传统意义上的去黑边,我们一般理解成栅格数据的处理,也就是从存储上修改特定值(本例中是 0)值为 Nodata。
单波段数据处理起来常常相对容易些,最常用的工具就是 栅格计算器/Raster Calculator 了。Raster Calculator 可以通过输入的Python语法的表达式,对当前数据框内的栅格图层进运算。它是个非常实用的栅格数据处理工具,如果你想 Dive In ,点 这里了解 Raster Calculator 的工作原理。
例如这个需求中仅需要一个简单表达式,使用到SetNull函数,如下所示:
12.arcgis 去除影像黑色边框(nodata) - 图14
其中,表达式是 SetNull(“RasterLayer” == 0 , “RasterLayer” )
这样执行工具之后,所有的 0 值变成了 Nodata,彻底去了黑边。

Option 2 影像分析窗口

多波段数据同样会受到黑边的困扰,而且现实情况往往没有单波段数据那么理想,仅通过一个表达式就可以搞定。例如,我们常用的影像底图数据,通常有三个波段,通过包含RGB三个波段的一组值来表示像元值,例如 (0,255,129)。我一般会根据需要处理的数据量的多少给出不同的处理方法建议:
同样第一步需要确认黑边值是什么?本例中是 (0,0,0)
12.arcgis 去除影像黑色边框(nodata) - 图15
ArcMap的 Windows 菜单中有 Image Analysis 。在 Image Analysis 窗口中的 Processing 部分可以对当前数据框中的图层赋予函数或函数链,从而对栅格数据实时处理。
12.arcgis 去除影像黑色边框(nodata) - 图16
在弹出的窗口中,在 fx行右键插入函数,例如这个需求中会使用到 Mask Function。
12.arcgis 去除影像黑色边框(nodata) - 图17
设置 Mask Function,(0,0,0) 组合是无效值。为什么选择 All 而不是 Any? 这个答案很显见,同时都为0的像元值才是无效值,否则不是,例如(1,255,0)是有效的。或者说各个波段的0值是and关系,而不是or。
12.arcgis 去除影像黑色边框(nodata) - 图18
这样带有函数的新栅格图层会自动加入 ArcMap 的 TOC,看起来万事大吉,然而这里需要说明下,这个图层需要Export到硬盘上的某个位置,它目前还是个临时数据,当layer被移除掉,这个结果就不复存在。
12.arcgis 去除影像黑色边框(nodata) - 图19
所以,最后重要的一步,导出数据。
12.arcgis 去除影像黑色边框(nodata) - 图20
这种方法,还适用于具有多种无效值的情况。例如,除了(0,0,0) 还包含 (255,255,255) :
12.arcgis 去除影像黑色边框(nodata) - 图21
我们需要做的仅是继续增加栅格函数。在 Function Template Editor 中函数们顺序相接,像个环环相接的链条,所以称为 ”函数链/ Function Chain“,咦,好像跑题了。请继续看如何设置无效值:
12.arcgis 去除影像黑色边框(nodata) - 图22
这样就实现了去掉两组无效值。

Option 3 镶嵌数据集

那么摆在你面前的数据不是一个,而是“很多”呢?凡事保证质量之后,重复工作多了之后就同时需要保证效率,那么这种方法适用于“很多”、“大量”……
ArcGIS 的镶嵌数据集是个理想与实用兼备的影像数据管理模型,我们用它来“处理”大量栅格数据也是个不错的选择。
在地理数据库中创建镶嵌数据集,并将数据添加到镶嵌数据集中,之后:
在”之后“之前的预备动作,此文中不赘述,但是你可以看这篇了解这些内容。
12.arcgis 去除影像黑色边框(nodata) - 图23
在镶嵌数据集中可以使用工具 Define Mosaic Dataset Nodata 工具,对数据的无效值进行定义。
12.arcgis 去除影像黑色边框(nodata) - 图24
从而批量去除了无效值。
镶嵌数据集本身也支持栅格函数,类似影像数据窗口中函数模板的设置,同样可以设置函数链来实现一些复杂的要求。
12.arcgis 去除影像黑色边框(nodata) - 图25
有关镶嵌数据集函数,也可以参考这篇。
常见的操作一般就这几种,总结下,单波段优先考虑栅格计算器;多波段可以使用影像分析窗口;如果数据量较大,建议使用镶嵌数据集。