span8
span4
下面是一个将所有黑色值更改为白色的示例。但是,如果您比较输入和输出数据,它不会改变蓝色的值。因此,只有0,0,0被设置为白色,0,0,255保持原样。
我找到了两种方法。
1。调色板的方法:
为了做到这一点,我使用调色板而不是带,因为这是我所知道的唯一方法,我们可以使用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,否则保留原样。
你可以很容易地用这句话来从任意颜色,b变动,C到另一个任意颜色X,Y,Z。
这将是这样的:
如果((A [0] ==一个&& A [1] == b && A [2] == c)中,X,A [0]);如果((A [0] ==一个&& A [1] == b && A [2] == c)中,Y,A [1]);如果((A [0] ==一个&& A [1] == b && A [2] == c)中,Z,A [2])
你甚至可以自定义的变压器要做到这一点,因为你可以使用语法:属性名称插入用户定义的属性值代入表达。
另请注意,因为没有色调转换必要的,你没有得到任何数据变化。通过上面的调色板的办法,255,255,255实际上变成253253253。您也不要担心应用相同的调色板每个进入瓦这可能会导致问题,如果颜色不能很好匹配。
欲了解更多有关这个强大的变压器,见RasterExpressionEvaluator上fmepedia在:
http://www.fmepedia.com/index.php/RasterExpressionEvaluator#Condition_Examples
©2019安全亚搏在线软件公司法律