免费视频|新人指南|投诉删帖|广告合作|地信网APP下载

查看: 990|回复: 5
收起左侧

你想要卷积?FME解决方案:针对想要改变栅格世界的人

[复制链接]

665

主题

2万

铜板

34

好友

传奇会员

Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30

积分
20649

精华勋章爱心勋章地信专家组贡献勋章冰雪节勋章

发表于 2021-5-27 14:40 | 显示全部楼层 |阅读模式

原文链接:https://blog.safe.com/2018/07/fme-and-convolution-evangelist176/

卷积理论

FME 2018.1增加了卷积的能力。

卷积是对两个对象进行数学运算,以便创建第三个对象。在FME术语中,第一个对象是栅格要素,第二个对象是类似栅格的数字矩阵。该操作可以是许多常见的数学运算之一。

使用指定的运算符,利用矩阵处理栅格,返回具有新质量的栅格要素。

理解了?OK,这是一个用于轻微模糊影像的矩阵:

例如. 栅格#1(上图左) 加上矩阵,返回略微模糊的栅格#2(上图右)。

如果它有帮助,矩阵和操作的组合被称作“滤波”。所以你选择一个栅格文件,并对其应用滤波。一些人们还称之为“透镜”和“透镜处理”。

它实际做了什么?

如果你跟我一样,你会想知道到底发生了什么,因此我将深入了解一些细节。如果这不适合你,请跳到“FME中的卷积”部分。

还停留在这里?OK,所以发生的事情是滤波器遍历栅格中的每个单元,利用周围的值和矩阵的值,重新计算单元的新值。

举个例子,我们使用这个小方块的栅格数据,中心单元的红色波段值为218,使用模糊滤波:

通过数字滤波器将值218转换为200。为什么?好吧,如果我的数学正确,等式为:

例:在3×3中的每个单元乘以其对应的核并求和。然后除以核的总和16,得到中心单元的新值200。

基本上它是周围值的平均值,每个值通过核进行加权。因此,上述核给予中心单元最高权重(4),邻近单元中等权重(2),对角相邻单元给予低权重(1)。

对应用的栅格要素的每个波段、每个单元重复这个过程,产生期望的输出。计算只对原始值进行操作。当算法处理下一个单元(如上)时,它的邻近值为218,而不是200.

我相信“对应”的矩阵值是相反的(所以对于133*1,这里的“1”是矩阵右下角的值),但是这里的核矩阵是对称的,所以没有区别。

滤波类型

不同的滤波有不同的核以及不同的操作类型(一些为增加,一些为求平均值),所以会产生明显不同的效果。

我不知道为什么上述的过程产生模糊,但即使知道它通常如何工作也很重要。例如,它说明了模糊算法不是简单的降低分辨率(其他方法有可能是这样),而是通过操纵单元格颜色来创建模糊。

我注意到像上面的核,是一组正数,除数为这些值的总和。它们往往是模糊(平滑)滤波。但我也注意到具有负值的核:

这些核值加起来得到一个除数。它们通常用于锐化图像或检测图像边缘。我相信(我不是专家)如果数字大于或小于0,当FME使用该滤波时,图像变暗或明亮。

无论如何,我认为这是我关于滤波和核值理论的知识极限。 让我们来看看它是如何在FME中实现的......

FME中的卷积

FME中执行卷积的转换器是RasterConvolver。它的别名是RasterLensProcessor,对于快速添加,“nvo” 或 “rlp”是用于找到它的唯一代码。

RasterConvolver的参数对话框如下所示:

顶部下拉选项显示了一组不同的预置滤波器:

所以你可以使用它们中的任意一个对你的栅格数据进行处理,并产生一定的效果。例如,这有一个用于高程模型的线检测核。

选择一个固定滤波器会自动设置核、除数和操作字段。你只需要更改它们就可以创建自定义滤波器。说到哪…

自定义滤波器

我想创建一个自定义滤波器,例如模糊效果还不够,我希望一个更大的模糊。这很简单,我只需要编辑对话框中的值:

这里我只更改了权重,并设置匹配的除数,虽然我可以设置一个不同的核大小或操作。顺便说一下,我们允许的核大小通常为3×3, 5×5, 7×7, 9×9, 和11×11。不允许非正方形核。

这些变化导致的结果(从左到右)原始—高斯滤波—用户自定义滤波:

注意滤波使得底部文本逐渐不便阅读。放大后差异更明显:

但是矩阵中的数字意味着什么。我所做的就是通过减少中心权重和增加周围的权重,将权重从中心转移到周围的单元上。除数现在为21,因为权重增加到21。为了保存这些数字,我还可以设置Divisor(除数)为特定设置“Sum of Kernel Weights”:

我花了一些时间来研究和理解这个概念,我并不会觉得卷积就是这么简单。但是,很容易通过设置来进行试验,查看发生的情况,包括一些高级选项。

高级选项

RasterConvolver有一些高级控制选项。它们的影响不大,但是可能很重要,这是我在这里提到它们的原因。

动态核函数

我把它们称为动态核函数,因为我想不出来其他的称呼了。实际上就是你可以通过属性、用户参数或条件值来设置核权重。通过把kernel size设置为“Derived from Weights”实现:

现在我有一个文本字段而非网格来定义核值,可以有多种方法。这个参数接受空格分割的浮点数列表。只接受矩形核函数,但是你可以设置权重为0以避免使用某些单元格,并创建自定义形状。

边缘处理

关键的考虑是在图像边缘发生什么。如果每个新的单元格都使用它的邻近值进行计算,对于一侧没有邻近值的边缘单元格来说会发生什么?FME对此有相应的设置:

当单元格缺失时,FME给你选项:使用Nodata值或将边界值扩展到空的区域。结果的差异(对于一个5×5的高斯滤波)如下:

这是西南角,所以查看左边和底部边缘。使用Nodata(左边的图像)似乎给出了更生硬的边界,边界线更清晰。扩展边界值给出了更柔和的边界。如果我想要进行边缘检测,我想我会首先尝试设置扩展值,否则栅格边框可能会被误解为边缘(我很可能是错的)。

Nodata 处理

说到Nodata,栅格中的Nodata值会发生什么取决于一组参数:Center Pixel和Neighbor Pixel:

Center Pixel处理的场景为:待处理的像素值为Nodata。它可以输出为Nodata或忽略Nodata。相似的邻近像素如果为Nodata,可以被忽略,或使用中心像素值替换。如果你知道有Nodata值,我怀疑你只会忽略Nodata,大概这就是它是默认设置值的原因。

最后,一个不受参数控制的高级选项是对栅格特定波段进行卷积的能力;例如我想对RGB图像中的红、绿波段进行卷积,而不对蓝波段进行操作。为了做到这个,我只需要在RasterConvolver前添加一个RasterSelector,以便定义待处理的波段。

为什么要卷积?

了解了这些,这个转换器的实际应用是什么?

首先它用于图像处理,例如模糊和锐化图像。你可能不觉得很有用,但是模糊(平滑)图像有助于隐藏噪声、产生细节。我们来看这个示例,我们希望定位海洋中船的位置,使用简单的高斯滤波:

虽然我们要找的船更加模糊,但是卷积去除了水面上的极端反射。当我搜索在整个图像搜索亮点来找船时(使用RasterExpressionEvaluator),区别在于:

没有卷积的图像具有上千个可能是船的亮点。卷积后的图像具有三个明显点。即使是船的尾迹也被清理干净了。

所以这样的核函数对于图像分类是有用的。除了在海上定位船舶外,它们还可以帮助你提取建筑区域,评估农业清单或模拟洪水影响。此外,一系列栅格图像可以显示随着时间的推移,船舶所在的位置,有助于追踪特定船舶的位置或它来自何处。甚至可以进行车辆监测和追踪!

从栅格图像中提取矢量几何图像是另外常见的需求。第一步通常是边缘检测,卷积对此也有用。RasterConvolver转换器又很多不同的边缘检测核。

我无法创建一个我非常满意的空间示例,但我确实发现它们也可以从先前的平滑例子中受益。该图像是各种非空间边缘检测的示例。

另外,如图所示,RasterConvolver不局限于图像。它也可以处理栅格DEM。例如,我找到一个生成坡度的核。我用它对我的数据进行处理,得到与RasterSlopeCalculator转换器(Percent Rise模式)相同的结果。为了清晰可见,转到Int8,它看起来如下所示:

好吧,我说“完全”。它在Data Inspector中看起来完全一样,但是数字略有不同。我认为这两个结果只是在不同的尺度上。我将使用RasterSlopeCalculator作为最终的答案,因为它告诉我数字的含义(坡度百分比),而我不确定卷积的数字是否真正代表什么。但是,它显示了在DEM数据集上使用RasterConvolver你可以做的事情。

顺便说一下,我的工作空间是这样的:

为什么有两个卷积?嗯,坡度/线检测在不同方向应用时会产生不同的结果。所以我用平行工作流将它应用到水平和竖直两个方向,然后使用RasterExpressionEvaluator将数据重新组合在一起以将其合并:

我发现这个表达式比我最开始使用的对两个栅格取平均值更好。你可以在我们的knowledgebase找到例子。

总结

Merriam-Webster告诉我,卷积来自同一个拉丁词(volvere,意为“滚动”)“convoluted”(意思是复杂的)。我相信这点!这个主题有点复杂和令人费劲! 但是,FME可以轻松选择预定义的卷积滤波器并尝试自定义滤波器。

我对于FME处理数据的速度印象很深。它只用了22秒对40个栅格瓦片(每个大小为1600 x 1000像素,具有3个波段)进行读取、卷积和写出。

我已经把我的两个示例放到我们的knowledgebase(边缘检测坡度计算)并将很快放上第三个示例,你可能想进一步探索。总的来说有很多用户对这个转换器有需求,所以它应该会很流行。赶快下载FME2018.1并试试使用它。

同时我也注意到FME新的2018.1版本还介绍了RasterStatisticsCalculator 转换器,用于计算每个栅格波段或调色板的最小、最大、平均值等。我相信你会发现这个转换器同样非常有用。


本文转载来自CSDN作者:fmechina   版权归作者所有

原文链接:https://blog.csdn.net/fmechina/article/details/84098769?spm=1001.2014.3001.5501

141

主题

982万

铜板

3万

好友

管理员

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

积分
621916
发表于 2021-5-27 15:14 | 显示全部楼层
回复

使用道具 举报

14

主题

4020

铜板

3

好友

高级工程师

Rank: 9Rank: 9Rank: 9

积分
643
发表于 2021-5-27 17:46 | 显示全部楼层
学习                    
回复 支持 反对

使用道具 举报

1

主题

114

铜板

0

好友

技术员

Rank: 3Rank: 3

积分
27
发表于 2021-6-28 17:19 | 显示全部楼层
:mg:mg
回复

使用道具 举报

0

主题

8266

铜板

4

好友

钻石会员

Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26

积分
13464
发表于 2021-7-2 10:25 | 显示全部楼层
:zt:zt:zt
回复

使用道具 举报

10

主题

5042

铜板

34

好友

教授级高工

数据与实体

Rank: 12Rank: 12Rank: 12

积分
1731
发表于 2021-7-6 09:32 | 显示全部楼层
作者很厉害,把基本原理和效果讲清楚了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

在线客服
快速回复 返回顶部 返回列表