斯潘8
斯潘4
下面是一个示例,它将外围遮罩外的所有黑色值更改为白色。然而,如果比较输入和输出数据,它不会改变蓝色的值。所以只有0,0,0设置为白色,剩下0,0255。
我找到了两种方法。
1。调色板方法:
为了做到这一点,我使用调色板而不是乐队,因为这是我知道的唯一方法,我们可以使用RasterCellValueReplacer只选择黑色,并排除带有一些0但不是全部0的其他单元格。第一,我用rasterpaletgenerator将RGB色带数据转换为调色板。然后我根据调色板或黑色的颜色查找值更改单元格值,反之,波段值=0。在这种情况下,黑色(0,0,0)表示为2,白色表示为255,所以我们用255替换所有2个。只有当我们使用相同的调色板时,这才有效,因为不同的调色板可能对黑色有不同的值。
可以为一个典型的图像生成一个颜色查找表,然后使用PaletteAdder而不是我在这里使用的PaletteGenerator来查找所有数据。只需将此波段应用于外围的调色板到波段转换,
我们尽量减少对周界内数据的更改。
如果只在外围应用,我使用周界多边形创建周界遮罩。我使用一个裁剪多边形在1的网格中裁剪一个孔,因为我使用裁剪边的输出而不是裁剪边的输出,0的掩码应用于多边形外部的数据,而不是其中的数据。所以你得到一个网格,1在周长内,0在裁剪边外。我用这个来选择我想要保留的数据,就像里面一样。然后我使用clippedoutside网格选择外部网格,在那里我将balck更改为白色。然后我把这两个网格结果加在一起,这样我就可以得到周长内的保留值,在外围由黑到白。必须将裁剪器设置为保留裁剪范围,以便下游光栅计算工作,因为这些需要统一的尺寸。
2。RasteExpressionEvaluator方法
另一个,更有效的方法是将0,0,0更改为255255255,而不更改0,0255之类的值。
您所需要的只是一个RasteExpressionEvaluator,其表达式设置为:
如果((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),XA〔0〕;如果((a[0]==a&&a[1]==b&&a[2]==c),YA〔1〕;如果((a[0]==a&&a[1]==b&&a[2]==c),ZA〔2〕
您甚至可以制作一个自定义的转换器来执行此操作,因为您可以使用语法a:attribute_name将用户定义的属性值插入表达式。
也,注意,由于不需要进行调色板转换,您不会得到任何数据更改。使用上面的调色板方法,255255255实际上变成了253253253。您也不必担心将相同的调色板应用到每个传入的瓷砖,如果颜色不匹配,可能会导致问题。
关于这个强大的变压器,参见FMepedia上的RastereExpressionEvaluator,网址:
http://www.fmepedia.com/index.php/rasterexpressionevaluator_condition_示例
?2019安全亚搏在线软件公司|合法的