MergeImages
Merge images
Templates:
- ImageB
- ImageD
- ImageUC
Target: image
namespace: sofa::component::engine
parents:
- DataEngine
Data
Name | Description | Default value |
---|---|---|
name | object name | unnamed |
printLog | if true, emits extra messages at runtime. | 0 |
tags | list of the subsets the object belongs to | |
bbox | this object bounding box | |
componentState | The state of the component among (Dirty, Valid, Undefined, Loading, Invalid). | Undefined |
listening | if true, handle the events, otherwise ignore the events | 0 |
overlap | method for handling overlapping regions | |
interpolation | Interpolation method. | |
nbImages | number of images to merge | 0 |
image | Image | 0 0 0 0 0 |
transform | Transform | 0 0 0 0 0 0 1 1 1 0 1 0 |
Links
Name | Description | Destination type name |
---|---|---|
context | Graph Node containing this object (or BaseContext::getDefault() if no graph is used) | BaseContext |
slaves | Sub-objects used internally by this object | BaseObject |
master | nullptr for regular objects, or master object for which this object is one sub-objects | BaseObject |
Examples
MergeImages.scn
<?xml version="1.0"?>
<Node name="root" gravity="0 0 0" dt=".1" >
<Node name="plugins">
<RequiredPlugin name="Sofa.Component.IO.Mesh"/> <!-- Needed to use components [MeshOBJLoader] -->
<RequiredPlugin name="Sofa.Component.Visual"/> <!-- Needed to use components [LineAxis VisualGrid VisualStyle] -->
<RequiredPlugin name="Sofa.GL.Component.Rendering3D"/> <!-- Needed to use components [OglSceneFrame] -->
<RequiredPlugin name="image"/> <!-- Needed to use components [ImageContainer ImageViewer MergeImages MeshToImageEngine] -->
</Node>
<VisualStyle displayFlags="showVisual showBehaviorModels" />
<VisualGrid size="50"/>
<LineAxis size="50"/>
<OglSceneFrame/>
<Node name="Average">
<MeshOBJLoader name="mesh1" filename="mesh/sphere.obj" triangulate="1" scale="2 2 2"/>
<MeshOBJLoader name="mesh2" filename="mesh/sphere.obj" triangulate="1"/>
<MeshToImageEngine template="ImageUC" value="1" insideValue="1" name="rasterizer1" src="@mesh1" voxelSize="0.1" padSize="2" rotateImage="false" printLog="true"/>
<MeshToImageEngine template="ImageUC" value="2" insideValue="2" name="rasterizer2" src="@mesh2" voxelSize="0.1" padSize="2" rotateImage="false" printLog="true"/>
<MergeImages template="ImageUC" name="merge" nbImages="2" overlap="0" interpolation="0"
image1="@rasterizer1.image" transform1="@rasterizer1.transform"
image2="@rasterizer2.image" transform2="@rasterizer2.transform"/>
<ImageContainer template="ImageUC" name="image" image="@merge.image" transform="@merge.transform" drawBB="true"/>
<ImageViewer template="ImageUC" name="viewer" src="@image" />
</Node>
<Node name="Order">
<MeshOBJLoader name="mesh1" filename="mesh/sphere.obj" triangulate="1" scale="2 2 2" translation="5 0 0"/>
<MeshOBJLoader name="mesh2" filename="mesh/sphere.obj" triangulate="1" translation="5 0 0"/>
<MeshToImageEngine template="ImageUC" value="1" insideValue="1" name="rasterizer1" src="@mesh1" voxelSize="0.1" padSize="2" rotateImage="false" printLog="true"/>
<MeshToImageEngine template="ImageUC" value="2" insideValue="2" name="rasterizer2" src="@mesh2" voxelSize="0.1" padSize="2" rotateImage="false" printLog="true"/>
<MergeImages template="ImageUC" name="merge" nbImages="2" overlap="1" interpolation="0"
image1="@rasterizer1.image" transform1="@rasterizer1.transform"
image2="@rasterizer2.image" transform2="@rasterizer2.transform"/>
<ImageContainer template="ImageUC" name="image" image="@merge.image" transform="@merge.transform" drawBB="true"/>
<ImageViewer template="ImageUC" name="viewer" src="@image" />
</Node>
<Node name="AlphaBlend">
<MeshOBJLoader name="mesh1" filename="mesh/sphere.obj" triangulate="1" scale="2 2 2" translation="10 0 0"/>
<MeshOBJLoader name="mesh2" filename="mesh/sphere.obj" triangulate="1" translation="10 0 0"/>
<MeshToImageEngine template="ImageUC" value="1" insideValue="1" name="rasterizer1" src="@mesh1" voxelSize="0.1" padSize="2" rotateImage="false" printLog="true"/>
<MeshToImageEngine template="ImageUC" value="2" insideValue="2" name="rasterizer2" src="@mesh2" voxelSize="0.1" padSize="2" rotateImage="false" printLog="true"/>
<MergeImages template="ImageUC" name="merge" nbImages="2" overlap="2" interpolation="0"
image1="@rasterizer1.image" transform1="@rasterizer1.transform"
image2="@rasterizer2.image" transform2="@rasterizer2.transform"/>
<ImageContainer template="ImageUC" name="image" image="@merge.image" transform="@merge.transform" drawBB="true"/>
<ImageViewer template="ImageUC" name="viewer" src="@image" />
</Node>
<Node name="Separate">
<MeshOBJLoader name="mesh1" filename="mesh/sphere.obj" triangulate="1" scale="2 2 2" translation="15 0 0"/>
<MeshOBJLoader name="mesh2" filename="mesh/sphere.obj" triangulate="1" translation="15 0 0"/>
<MeshToImageEngine template="ImageUC" value="1" insideValue="1" name="rasterizer1" src="@mesh1" voxelSize="0.1" padSize="2" rotateImage="false" printLog="true"/>
<MeshToImageEngine template="ImageUC" value="2" insideValue="2" name="rasterizer2" src="@mesh2" voxelSize="0.1" padSize="2" rotateImage="false" printLog="true"/>
<MergeImages template="ImageUC" name="merge" nbImages="2" overlap="3" interpolation="0"
image1="@rasterizer1.image" transform1="@rasterizer1.transform"
image2="@rasterizer2.image" transform2="@rasterizer2.transform"/>
<ImageContainer template="ImageUC" name="image" image="@merge.image" transform="@merge.transform" drawBB="true"/>
<ImageViewer template="ImageUC" name="viewer" src="@image" />
</Node>
<Node name="Additive">
<MeshOBJLoader name="mesh1" filename="mesh/sphere.obj" triangulate="1" scale="2 2 2" translation="20 0 0"/>
<MeshOBJLoader name="mesh2" filename="mesh/sphere.obj" triangulate="1" translation="20 0 0"/>
<MeshToImageEngine template="ImageUC" value="1" insideValue="1" name="rasterizer1" src="@mesh1" voxelSize="0.1" padSize="2" rotateImage="false" printLog="true"/>
<MeshToImageEngine template="ImageUC" value="2" insideValue="2" name="rasterizer2" src="@mesh2" voxelSize="0.1" padSize="2" rotateImage="false" printLog="true"/>
<MergeImages template="ImageUC" name="merge" nbImages="2" overlap="4" interpolation="0"
image1="@rasterizer1.image" transform1="@rasterizer1.transform"
image2="@rasterizer2.image" transform2="@rasterizer2.transform"/>
<ImageContainer template="ImageUC" name="image" image="@merge.image" transform="@merge.transform" drawBB="true"/>
<ImageViewer template="ImageUC" name="viewer" src="@image" />
</Node>
<Node name="Intersect">
<MeshOBJLoader name="mesh1" filename="mesh/sphere.obj" triangulate="1" scale="2 2 2" translation="25 0 0" />
<MeshOBJLoader name="mesh2" filename="mesh/sphere.obj" triangulate="1" translation="25 0 0"/>
<MeshToImageEngine template="ImageUC" value="1" insideValue="1" name="rasterizer1" src="@mesh1" voxelSize="0.1" padSize="2" rotateImage="false" printLog="true"/>
<MeshToImageEngine template="ImageUC" value="2" insideValue="2" name="rasterizer2" src="@mesh2" voxelSize="0.1" padSize="2" rotateImage="false" printLog="true"/>
<MergeImages template="ImageUC" name="merge" nbImages="2" overlap="5" interpolation="0"
image1="@rasterizer1.image" transform1="@rasterizer1.transform"
image2="@rasterizer2.image" transform2="@rasterizer2.transform"/>
<ImageContainer template="ImageUC" name="image" image="@merge.image" transform="@merge.transform" drawBB="true"/>
<ImageViewer template="ImageUC" name="viewer" src="@image" />
</Node>
</Node>
def createScene(root_node):
root = root_node.addChild('root', gravity="0 0 0", dt=".1")
plugins = root.addChild('plugins')
plugins.addObject('RequiredPlugin', name="Sofa.Component.IO.Mesh")
plugins.addObject('RequiredPlugin', name="Sofa.Component.Visual")
plugins.addObject('RequiredPlugin', name="Sofa.GL.Component.Rendering3D")
plugins.addObject('RequiredPlugin', name="image")
root.addObject('VisualStyle', displayFlags="showVisual showBehaviorModels")
root.addObject('VisualGrid', size="50")
root.addObject('LineAxis', size="50")
root.addObject('OglSceneFrame', )
average = root.addChild('Average')
average.addObject('MeshOBJLoader', name="mesh1", filename="mesh/sphere.obj", triangulate="1", scale="2 2 2")
average.addObject('MeshOBJLoader', name="mesh2", filename="mesh/sphere.obj", triangulate="1")
average.addObject('MeshToImageEngine', template="ImageUC", value="1", insideValue="1", name="rasterizer1", src="@mesh1", voxelSize="0.1", padSize="2", rotateImage="false", printLog="true")
average.addObject('MeshToImageEngine', template="ImageUC", value="2", insideValue="2", name="rasterizer2", src="@mesh2", voxelSize="0.1", padSize="2", rotateImage="false", printLog="true")
average.addObject('MergeImages', template="ImageUC", name="merge", nbImages="2", overlap="0", interpolation="0", image1="@rasterizer1.image", transform1="@rasterizer1.transform", image2="@rasterizer2.image", transform2="@rasterizer2.transform")
average.addObject('ImageContainer', template="ImageUC", name="image", image="@merge.image", transform="@merge.transform", drawBB="true")
average.addObject('ImageViewer', template="ImageUC", name="viewer", src="@image")
order = root.addChild('Order')
order.addObject('MeshOBJLoader', name="mesh1", filename="mesh/sphere.obj", triangulate="1", scale="2 2 2", translation="5 0 0")
order.addObject('MeshOBJLoader', name="mesh2", filename="mesh/sphere.obj", triangulate="1", translation="5 0 0")
order.addObject('MeshToImageEngine', template="ImageUC", value="1", insideValue="1", name="rasterizer1", src="@mesh1", voxelSize="0.1", padSize="2", rotateImage="false", printLog="true")
order.addObject('MeshToImageEngine', template="ImageUC", value="2", insideValue="2", name="rasterizer2", src="@mesh2", voxelSize="0.1", padSize="2", rotateImage="false", printLog="true")
order.addObject('MergeImages', template="ImageUC", name="merge", nbImages="2", overlap="1", interpolation="0", image1="@rasterizer1.image", transform1="@rasterizer1.transform", image2="@rasterizer2.image", transform2="@rasterizer2.transform")
order.addObject('ImageContainer', template="ImageUC", name="image", image="@merge.image", transform="@merge.transform", drawBB="true")
order.addObject('ImageViewer', template="ImageUC", name="viewer", src="@image")
alpha_blend = root.addChild('AlphaBlend')
alpha_blend.addObject('MeshOBJLoader', name="mesh1", filename="mesh/sphere.obj", triangulate="1", scale="2 2 2", translation="10 0 0")
alpha_blend.addObject('MeshOBJLoader', name="mesh2", filename="mesh/sphere.obj", triangulate="1", translation="10 0 0")
alpha_blend.addObject('MeshToImageEngine', template="ImageUC", value="1", insideValue="1", name="rasterizer1", src="@mesh1", voxelSize="0.1", padSize="2", rotateImage="false", printLog="true")
alpha_blend.addObject('MeshToImageEngine', template="ImageUC", value="2", insideValue="2", name="rasterizer2", src="@mesh2", voxelSize="0.1", padSize="2", rotateImage="false", printLog="true")
alpha_blend.addObject('MergeImages', template="ImageUC", name="merge", nbImages="2", overlap="2", interpolation="0", image1="@rasterizer1.image", transform1="@rasterizer1.transform", image2="@rasterizer2.image", transform2="@rasterizer2.transform")
alpha_blend.addObject('ImageContainer', template="ImageUC", name="image", image="@merge.image", transform="@merge.transform", drawBB="true")
alpha_blend.addObject('ImageViewer', template="ImageUC", name="viewer", src="@image")
separate = root.addChild('Separate')
separate.addObject('MeshOBJLoader', name="mesh1", filename="mesh/sphere.obj", triangulate="1", scale="2 2 2", translation="15 0 0")
separate.addObject('MeshOBJLoader', name="mesh2", filename="mesh/sphere.obj", triangulate="1", translation="15 0 0")
separate.addObject('MeshToImageEngine', template="ImageUC", value="1", insideValue="1", name="rasterizer1", src="@mesh1", voxelSize="0.1", padSize="2", rotateImage="false", printLog="true")
separate.addObject('MeshToImageEngine', template="ImageUC", value="2", insideValue="2", name="rasterizer2", src="@mesh2", voxelSize="0.1", padSize="2", rotateImage="false", printLog="true")
separate.addObject('MergeImages', template="ImageUC", name="merge", nbImages="2", overlap="3", interpolation="0", image1="@rasterizer1.image", transform1="@rasterizer1.transform", image2="@rasterizer2.image", transform2="@rasterizer2.transform")
separate.addObject('ImageContainer', template="ImageUC", name="image", image="@merge.image", transform="@merge.transform", drawBB="true")
separate.addObject('ImageViewer', template="ImageUC", name="viewer", src="@image")
additive = root.addChild('Additive')
additive.addObject('MeshOBJLoader', name="mesh1", filename="mesh/sphere.obj", triangulate="1", scale="2 2 2", translation="20 0 0")
additive.addObject('MeshOBJLoader', name="mesh2", filename="mesh/sphere.obj", triangulate="1", translation="20 0 0")
additive.addObject('MeshToImageEngine', template="ImageUC", value="1", insideValue="1", name="rasterizer1", src="@mesh1", voxelSize="0.1", padSize="2", rotateImage="false", printLog="true")
additive.addObject('MeshToImageEngine', template="ImageUC", value="2", insideValue="2", name="rasterizer2", src="@mesh2", voxelSize="0.1", padSize="2", rotateImage="false", printLog="true")
additive.addObject('MergeImages', template="ImageUC", name="merge", nbImages="2", overlap="4", interpolation="0", image1="@rasterizer1.image", transform1="@rasterizer1.transform", image2="@rasterizer2.image", transform2="@rasterizer2.transform")
additive.addObject('ImageContainer', template="ImageUC", name="image", image="@merge.image", transform="@merge.transform", drawBB="true")
additive.addObject('ImageViewer', template="ImageUC", name="viewer", src="@image")
intersect = root.addChild('Intersect')
intersect.addObject('MeshOBJLoader', name="mesh1", filename="mesh/sphere.obj", triangulate="1", scale="2 2 2", translation="25 0 0")
intersect.addObject('MeshOBJLoader', name="mesh2", filename="mesh/sphere.obj", triangulate="1", translation="25 0 0")
intersect.addObject('MeshToImageEngine', template="ImageUC", value="1", insideValue="1", name="rasterizer1", src="@mesh1", voxelSize="0.1", padSize="2", rotateImage="false", printLog="true")
intersect.addObject('MeshToImageEngine', template="ImageUC", value="2", insideValue="2", name="rasterizer2", src="@mesh2", voxelSize="0.1", padSize="2", rotateImage="false", printLog="true")
intersect.addObject('MergeImages', template="ImageUC", name="merge", nbImages="2", overlap="5", interpolation="0", image1="@rasterizer1.image", transform1="@rasterizer1.transform", image2="@rasterizer2.image", transform2="@rasterizer2.transform")
intersect.addObject('ImageContainer', template="ImageUC", name="image", image="@merge.image", transform="@merge.transform", drawBB="true")
intersect.addObject('ImageViewer', template="ImageUC", name="viewer", src="@image")