我有一个像这样的光栅图像我想删除孤立的噪声点并平滑边缘(比如说白色的单点,我希望实体的边缘看起来平滑)。如何在ArcGIS或R中执行此操作?

像元大小为30 * 30。

#1 楼

为这种处理创建了形态运算Expand和Shrink。使用ArcGIS(或GRASS或Mathematica)是因为R的“栅格”库太慢。


通常可以对参数进行一些试验:您必须决定扩展多少需要缩小以清洁图像;通常情况下,您希望做得尽可能少,因为每次操作都会使一些尖锐的细节变得平滑。这是一个序列,可以很好地消除许多明显的“噪音”,同时又保留了“实体”中的大部分细节。 “膨胀”和“收缩”都是相对于白细胞而言的,因此膨胀导致它们向外生长,而收缩导致黑细胞侵入白色区域。



“差异”列使用颜色突出显示每个步骤的开始和结束图像之间的差异:蓝色代表黑色变成白色,橙色代表白色变成黑色。

如果需要删除较大的剩余部分,最好通过RegionGroup进行识别,然后再通过重新分类将其删除。最初是一个选择,但是使用ExpandShrink进行一些初步清洁会减少工作量并提供所需的平滑度。使用Mathematica命令,因为它们执行起来非常简单,容易和快速:如果您确实要使用R,请加载“栅格”库并利用focalFilter创建函数来进行扩展和收缩。然后分别等待大约一分钟以执行操作...。

评论


你好!如果您不介意,可以将您的联系信息发送给我吗?我想在研究中感谢您。谢谢! @whuber

–见过
2013年3月1日在2:19



您知道GRASS中的等效命令吗?

–理查德
13年3月14日在20:39

@Richard我敢肯定,GRASS中有很多创造性的方法可以执行这些操作,但是r.neighbors看起来很适合这项任务。

– hu
13年3月14日在20:57

#2 楼

使用Spatial Analyst Extension,您可以使用某些Generalization工具。他们中的一些人执行类似的任务,因此您可能需要尝试一些才能获得想要的结果。但是,我将看一看“多数过滤器”工具和“边界清理”工具。

这是有关这两个工具的概念的页面。

我不是确定如何在R中执行这些任务,但这是有关如何使用GRASS GIS执行多数过滤器的文章。

#3 楼

这基本上是@whuber答案的一种变体,它使用欧几里得距离来扩大和缩小栅格边界,以平滑栅格的尖角,而扩大/缩小过程则利用了栅格数量的增长/侵蚀,从而扩大了栅格的尖角。尽管欧几里得距离模仿扩展,但不可能将负值引入到侵犯/收缩中。诀窍是开发一个迭代过程,以获取欧几里德距离栅格的负数并进行增长。以下是给定样本图像和快照的步骤,以进行澄清。


重新分类栅格以仅保留1s(白格)
对两个像元距离应用欧氏距离(在这种情况下,距重新分类的栅格60米
通过使用Reclassify来获取扩展栅格的负数(具有值的
像元将获得NODATA且NODATA将变为1)
或Raster Calculator的Con和IsNull运算符
以相同的距离(60 m)再次向此负栅格应用欧几里得距离
按照给定的相同过程对此取负数以上
使用栅格计算器或重新分类将NODATA像元分配给该栅格中的0,
返回到样本栅格的原始值

展开收缩率与欧氏距离的关系



注意:绿色显示已处理的单元格(问题中的白色单元格)

欧几里得距离的优点是通过斜边范围与每个像元之间保持适当的距离,该距离可以平滑其他边缘。另一方面,扩展和收缩工具的像元参数数目在所有方向上处理相同数目的像元,这会产生类似边界框的边缘,因此过度概括了边/角。

但是,主要问题是,它不能像扩展/收缩那样成功地消除噪声,并且比答案要长一些。

评论


对于使用GRASS / QGIS进行此操作的任何人,您都可以使用r.grow并以正欧几里德距离增长,然后以负欧几里德距离增长

– srha
17-10-24在0:17