Answers:
为这种处理创建了形态运算Expand和Shrink。 使用ArcGIS(或GRASS或Mathematica),因为其R
“栅格”库太慢。
通常,对参数进行一些试验会有所帮助:您必须确定清洁图像所需的扩展程度和收缩程度;通常情况下,您希望做得尽可能少,因为每次操作都会使一些尖锐的细节变得平滑。这是一个序列,可以很好地消除许多明显的“噪音”,同时又保留了“实体”中的大部分细节。“ 膨胀”和“收缩”都是相对于白细胞而言的,因此膨胀使它们向外生长,而收缩使黑细胞侵入白色区域。
“差异”列使用颜色突出显示每个步骤在开始和结束图像之间的差异:蓝色代表黑色变成白色,橙色代表白色变成黑色。
如果需要删除较大的剩余部分,最好使用RegionGroup进行识别,然后再通过重新分类将其删除。这是当初的选择,但有一点初步清理Expand
和Shrink
减少工作,并提供所需的平滑。
顺便说一句,我选择使用Mathematica命令制作此图中的八幅图像,因为它们是如此简单,容易且快速地执行:
i = Import["http://i.stack.imgur.com/umDg7.png"];
l = Dilation[k = Erosion[j = Dilation[i, 2], 3], 1]; (* This does all the work *)
delta = ColorCombine /@ {{i, j}, {j, k}, {k, l}, {i, l}}; (* Compares images *)
ArcGIS中的工作流程相同,但语法更长。如果确实要使用R
,请加载“栅格”库并利用focalFilter
其创建函数来进行扩展和收缩。然后分别等待约一分钟以执行操作...。
这基本上是@whuber答案的一种变体,它使用欧几里得距离来扩展和收缩栅格边界,以平滑栅格的尖角,而该锐角由扩展-收缩过程扩大,该过程利用像元的数量来增长/侵占。尽管欧几里得距离模仿扩展,但是不可能将负值引入到侵犯/收缩中。诀窍是开发一个迭代过程,以获取欧几里得距离栅格的负值并进行增长。以下是给定样本图像和快照的步骤,以进行澄清。
重新分类栅格以仅保留1s(白格)
将欧几里德距离应用于两格距离(在这种情况下为60米)到重新分类的栅格
通过使用Reclassify(具有该值的像元将获得NODATA且NODATA将变为1)或扩展计算器的Con和IsNull运算符来获取扩展栅格的负数。
再次以相同的距离(60 m)将Euclidian距离应用于该负栅格
通过遵循上面给出的相同过程来消除此负面影响
使用栅格计算器或重分类将NODATA像元在此栅格中分配为0,以返回到样本栅格的原始值
扩大收缩 与 欧几里得距离
注意:绿色显示已处理的单元格(问题中的白色单元格)
Euclidian Distance的优点在于,它通过斜边范围与每个像元之间保持适当的距离,从而平滑了否则的尖锐边缘。另一方面,扩展和收缩工具的像元参数数量会在所有方向上处理相同数量的像元,这会产生类似边界框的边缘,因此过度泛化了边缘/角。
但是,主要问题是,它不能像扩展/收缩那样成功地消除噪声,并且比答案更长。