span8
span4
下面是一个将所有黑色值更改为白色的示例。但是,如果您比较输入和输出数据,它不会改变蓝色的值。因此,只有0,0,0被设置为白色,0,0,255保持原样。
我找到了两种方法。
一。调色板方法:
为了做到这一点,我使用调色板而不是带,因为这是我所知道的唯一方法,我们可以使用RasterCellValueReplacer只选择黑色和排除其他细胞与一些0,但不是所有。首先,我将RGB颜色带状数据转换为带有光栅色板生成器的调色板。然后我根据调色板或颜色查找值为黑色更改单元格值,而不是为band value = 0更改单元格值。在这种情况下,黑色(0,0,0)用2表示,白色用255表示,所以我们用255代替所有的2。这只有在我们使用相同的调色板时才有效,因为不同的调色板可能会有不同的黑色值。
可以为一个典型的图像生成一个颜色查找表,然后使用PaletteAdder(而不是我在这里使用的PaletteGenerator)对所有数据使用它。通过只将这个波段应用到调色板到外围的波段转换,
我们尽量减少对周边数据的更改。
为了只在周长外应用这个,我使用周长多边形来创建一个周长蒙版。我用一个裁剪多边形在一个1的网格上剪一个洞。Because I use the output from ClippedInside rather than ClippedOutside, the mask of 0's applies to data outside of the polygon rather than the data in it.所以你得到了一个周长内为1,边界外为0的网格。我使用它来选择我想要保留的数据。然后使用ClippedOutside网格选择将balck更改为白色的外部网格。然后我把两个网格结果加在一起,这样我就得到了周长内的保留值,而周长外则是黑到白。必须将裁剪器设置为保留剪切区段,以便下游栅格计算能够工作,因为这些计算需要统一的大小。
2.RasterExpressionEvaluator方法
另一种更有效的方法是将0,0,0改为255,255,255,而不改变0,0,255这样的值。
您只需要一个RasterExpressionEvaluator,它的表达式设置为:
如果((a[0]+a[1]+a[2])=0,255,a[0]);如果((a[0]+a[1]+a[2])=0,255,a[1]);如果((A[0]+A[1]+A[2])=0,255,A[2])
粗略翻译,这意味着如果r+g+b=0,则将单元格设置为255,否则保持原样。
您也可以很容易地使用这个表达式将任意颜色a、b、c更改为另一个任意颜色x、y、z。
这看起来像:
如果((A[0]==A&&A[1]==B&&A[2]==C),X,A[0]);如果((A[0]==A&&A[1]==B&&A[2]==C)、Y、A[1]);如果((A[0]==A&&A[1]==B&&A[2]==C)、Z、A[2])
您甚至可以制作一个自定义转换程序来执行此操作,因为您可以使用语法a:attribute_name将用户定义的属性值插入到表达式中。
另外,请注意,因为不需要进行调色板转换,所以不会得到任何数据更改。使用上面的调色板方法,255255255实际上变成了253253253。你也不必担心将相同的调色板应用到每个传入的平铺,如果颜色不匹配,可能会导致问题。
有关此功能强大的转换器的详细信息,请参阅fmepedia上的rasterexpressionevaluator:
http://www.fmepedia.com/index.php/rasterexpressionevaluator“条件”示例
©2019安全亚搏在线软件公司法律