FME中的栅格数据操作之九——RasterInterpretationCoercer示例

时间:2024-03-30 19:16:54

原文发布时间:2010-04-27

者:毛毛虫

前面具体讲了RasterInterpretationCoercer转换器的各个参数,这两天找到了具体使用该转换器时,如何选择转换选项,以及RGBA to RGB的类型转换,这里跟大家共享下。

在实际应用中经常遇到这样的问题:一个raster格式的数据在FME Viewer打开是黑色的,是什么原因,如何解决呢?如下一个栅格数据:

            FME中的栅格数据操作之九——RasterInterpretationCoercer示例

我们看到,在信息栏中,影像包含了3个16bit的字段,定义了一个RGB48类型。这样,每个波段可取的值在0到65535之间,而实际值却不超过几百,0是黑色的,65535是白色的,所以整个图看起来是黑色的。也就是说,这把一个8bit的值存储到了16bit的波段中,要解决这个问题,可以根据实际的值来修改类型说明,也可以调整值来匹配当前的数据类型。

解决方法一:RasterExpressionEvaluator

一个可能的解决方法是RasterExpressionEvaluator,应用下面对波段列表和表达式:

RED16;GREEN16;BLUE16

A[0]*200;A[1]*200;A[2]*200

不过,这需要了解这个转换器,并有一些经验来找到一个合适的乘数。

解决方法二:RasterInterpretationCoercer

可以使用'Scale by data value'选项,可以把栅格的类型从RGB48转换到RGB24,可以得到较好的清晰影像。

FME中的栅格数据操作之九——RasterInterpretationCoercer示例

下面让我们看一下如何设置RasterInterpretationCoercer转换器选项达到想要的效果。该转换器具体参数如下:

FME中的栅格数据操作之九——RasterInterpretationCoercer示例

下面是一个DEM数据(给出了三个单元格的值),根据这个数据对比分析下各个选项。

FME中的栅格数据操作之九——RasterInterpretationCoercer示例

使用转换器ContourGenerator,设置如下:

FME中的栅格数据操作之九——RasterInterpretationCoercer示例

DEM数据产生的等高线图如下:

FME中的栅格数据操作之九——RasterInterpretationCoercer示例

用该DEM数据生成RGB24彩色影像的效果如下:

FME中的栅格数据操作之九——RasterInterpretationCoercer示例

下面对每个选项进行分析下:

1.Cast

设置如下:

FME中的栅格数据操作之九——RasterInterpretationCoercer示例

转换后的效果

FME中的栅格数据操作之九——RasterInterpretationCoercer示例

跟原来的DEM数据对比上图所示三个点的值,对于小于最大值(此处是255)的单元格,保留了原来的值,而对于高于最大值(255)的值,降至哦,然后再次重复逐渐增加。新的高程值妈祖下列公式:

elevation % range_for_the_bit_depth = cast_elevation,例如,如果原来的高程值是500,则新的高程值为500 % 256 = 244。

转换后,跟上述ContourGenerator转换器相同的设置后得到的等高线图为:

FME中的栅格数据操作之九——RasterInterpretationCoercer示例

此时生成RGB24彩色影像的效果如下:

FME中的栅格数据操作之九——RasterInterpretationCoercer示例

2、Bounded Cast

该转换器的设置如下:

FME中的栅格数据操作之九——RasterInterpretationCoercer示例

转换后的效果如下:

FME中的栅格数据操作之九——RasterInterpretationCoercer示例

由于"Cast"选项不能有个较好的对整个数据集的转换,"Bounded Cast"是对"Cast"的改进,这个选项把所有低于最小值(此处是0)的值设置为0,把所有高于最大值(此处是255)的值设置为255,其它值保持不变。

转换后,跟上述ContourGenerator转换器相同的设置后得到的等高线图为:

FME中的栅格数据操作之九——RasterInterpretationCoercer示例

从上面的示例,可以看到"Cast" 和 "Bounded Cast"选项的局限,只要值不超过选择的目标数据类型的范围,就会得到较好的结果,也就是说,如果所有数据的值不超过最大值,选择这个选项的效果较好。

此时生成RGB24彩色影像的效果如下:

FME中的栅格数据操作之九——RasterInterpretationCoercer示例

3、Scale by Data Value

设置如下:

FME中的栅格数据操作之九——RasterInterpretationCoercer示例

转换后的效果如下:

FME中的栅格数据操作之九——RasterInterpretationCoercer示例

源数据的最大最小值的范围被缩放到目标数据所能获得数据的整个范围。使用一个RasterBandMinMaxExtractor转换器分别找出转换前后的最大最小值,本例中,原DEM数据的值的范围是-44.5875871777955到575,得到的数据的范围是1到255。这个选项不能保持源栅格数据原来的表现,但是对于生成彩色影像比较有用。

转换后,跟上述ContourGenerator转换器相同的设置后得到的等高线图为:

FME中的栅格数据操作之九——RasterInterpretationCoercer示例

 此时生成RGB24彩色影像的效果如下:

FME中的栅格数据操作之九——RasterInterpretationCoercer示例

4、Scale by Data Type

转换器设置为:

FME中的栅格数据操作之九——RasterInterpretationCoercer示例

转换后生成的图为:

FME中的栅格数据操作之九——RasterInterpretationCoercer示例

 发现所有的数据都为nodata值,使用转换器RasterNodataRemover后,生成的图为:

FME中的栅格数据操作之九——RasterInterpretationCoercer示例

 这个"Scale by Data Type"选项给了一个值权威128的灰色栅格。这是因为源数据的整个范围的值被缩放到目标数据类型的整个范围,而数据类型(源数据类型为Real64,数据范围为~-1.78e+308 d到~1.78e+308,而实际值的范围是-45到575,所有目标数据的值被挤到接近128的位置。换句话说,如果源数据的实际值能更均匀的分布在整个范围,这个选项可以保留原来的视觉表现。

总结:

前两个选项"Cast" 和 "Bounded Cast",在目标数据范围对于所有的值足够大的情况下,保持原始数据的效果更好。这两个选项对于Numeric to Numeric的转换非常有用。

后两种方法"Scale by Data Value" 和 "Scale by Data Type"用来保持可视表达,有利于Numeric to Color和Color to Color的转换。


下面再说一下转换器RasterInterpretationCoercer的另一个设置:RGBA to RGB option

"RGBA to RGB"选项告诉这个转换器如果我们想转换一个RGBA影像(一个包含R、G、B三个彩色波段和一个用来设置透明度的alpha波段共四个波段的影像)为一个RGB彩色影像,也就是说如何移除alpha波段。

有一个png图片,为了便于查看,在Arcmap中打开如下:

FME中的栅格数据操作之九——RasterInterpretationCoercer示例

 可以看到,该幅图有四个波段,在RasterInterpretationCoercer转换器中设置应用alpha波段,

FME中的栅格数据操作之九——RasterInterpretationCoercer示例

结果如下:

FME中的栅格数据操作之九——RasterInterpretationCoercer示例

 使用"Apply the Alpha Band"选项,虽然影像仍是RGB24类型,但我们仍能看到逐渐消失的效果(不过全部透明的部分所有像素的值变为255)。

在RasterInterpretationCoercer转换器中设置删除alpha波段,

FME中的栅格数据操作之九——RasterInterpretationCoercer示例

结果如下:

FME中的栅格数据操作之九——RasterInterpretationCoercer示例

 "Drop Alpha Band"选项移除了alpha波段,显示了透明部分。

注意其他波段(Red、Green和Blue)在这两种情况下的不同,应用alpha选项更改了三个波段的值(由于alpha的影响),删除alpha选项保留原波段值不变(没有alpha的影响)。