Example #1
0
def hdri(inputImages=list(),
         inputViewpoints=list(),
         inputIntrinsics=list(),
         output='',
         graph=None):
    """
    Create a new Graph with a complete HDRI pipeline.

    Args:
        inputImages (list of str, optional): list of image file paths
        inputViewpoints (list of Viewpoint, optional): list of Viewpoints
        output (str, optional): the path to export reconstructed model to

    Returns:
        Graph: the created graph
    """
    if not graph:
        graph = Graph('HDRI')
    with GraphModification(graph):
        nodes = hdriPipeline(graph)
        cameraInit = nodes[0]
        cameraInit.viewpoints.extend([{
            'path': image
        } for image in inputImages])
        cameraInit.viewpoints.extend(inputViewpoints)
        cameraInit.intrinsics.extend(inputIntrinsics)

        if output:
            stitching = nodes[-1]
            graph.addNewNode('Publish',
                             output=output,
                             inputFiles=[stitching.output])

    return graph
Example #2
0
def photogrammetry(inputImages=list(),
                   inputViewpoints=list(),
                   inputIntrinsics=list(),
                   output=''):
    """
    Create a new Graph with a complete photogrammetry pipeline.

    Args:
        inputImages (list of str, optional): list of image file paths
        inputViewpoints (list of Viewpoint, optional): list of Viewpoints
        output (str, optional): the path to export reconstructed model to

    Returns:
        Graph: the created graph
    """
    graph = Graph('Photogrammetry')
    with GraphModification(graph):
        sfmNodes, mvsNodes = photogrammetryPipeline(graph)
        cameraInit = sfmNodes[0]
        cameraInit.viewpoints.extend([{
            'path': image
        } for image in inputImages])
        cameraInit.viewpoints.extend(inputViewpoints)
        cameraInit.intrinsics.extend(inputIntrinsics)

    if output:
        texturing = mvsNodes[-1]
        graph.addNewNode('Publish',
                         output=output,
                         inputFiles=[
                             texturing.outputMesh, texturing.outputMaterial,
                             texturing.outputTextures
                         ])
    return graph
Example #3
0
def panoramaHdr(inputImages=None, inputViewpoints=None, inputIntrinsics=None, output='', graph=None):
    """
    Create a new Graph with a Panorama HDR pipeline.

    Args:
        inputImages (list of str, optional): list of image file paths
        inputViewpoints (list of Viewpoint, optional): list of Viewpoints
        output (str, optional): the path to export reconstructed model to

    Returns:
        Graph: the created graph
    """
    if not graph:
        graph = Graph('PanoramaHDR')
    with GraphModification(graph):
        nodes = panoramaHdrPipeline(graph)
        cameraInit = nodes[0]
        if inputImages:
            cameraInit.viewpoints.extend([{'path': image} for image in inputImages])
        if inputViewpoints:
            cameraInit.viewpoints.extend(inputViewpoints)
        if inputIntrinsics:
            cameraInit.intrinsics.extend(inputIntrinsics)

        if output:
            imageProcessing = nodes[-1]
            graph.addNewNode('Publish', output=output, inputFiles=[imageProcessing.outputImages])

    return graph
Example #4
0
 def undoImpl(self):
     with GraphModification(self.graph):
         node = nodeFactory(self.nodeDict, self.nodeName)
         self.graph.addNode(node, self.nodeName)
         assert (node.getName() == self.nodeName)
         # recreate out edges deleted on node removal
         for dstAttr, srcAttr in self.outEdges.items():
             self.graph.addEdge(self.graph.attribute(srcAttr),
                                self.graph.attribute(dstAttr))
Example #5
0
 def undoImpl(self):
     # delete upgraded node
     self.graph.removeNode(self.nodeName)
     # recreate compatibility node
     with GraphModification(self.graph):
         node = nodeFactory(self.nodeDict)
         self.graph.addNode(node, self.nodeName)
         # recreate out edges
         for dstAttr, srcAttr in self.outEdges.items():
             self.graph.addEdge(self.graph.attribute(srcAttr),
                                self.graph.attribute(dstAttr))
Example #6
0
def panoramaFisheyeHdr(inputImages=None, inputViewpoints=None, inputIntrinsics=None, output='', graph=None):
    if not graph:
        graph = Graph('PanoramaFisheyeHDR')
    with GraphModification(graph):
        panoramaHdr(inputImages, inputViewpoints, inputIntrinsics, output, graph)
        for panoramaInit in graph.nodesOfType("PanoramaInit"):
            panoramaInit.attribute("useFisheye").value = True
        # when using fisheye images, the overlap between images can be small
        # and thus requires many features to get enough correspondances for cameras estimation
        for featureExtraction in graph.nodesOfType("FeatureExtraction"):
            featureExtraction.attribute("describerPreset").value = 'high'
    return graph
Example #7
0
 def remove(self, index, count=1):
     if self.node.graph:
         from meshroom.core.graph import GraphModification
         with GraphModification(self.node.graph):
             # remove potential links
             for i in range(index, index + count):
                 attr = self._value.at(i)
                 if attr.isLink:
                     # delete edge if the attribute is linked
                     self.node.graph.removeEdge(attr)
     self._value.removeAt(index, count)
     self.requestGraphUpdate()
     self.valueChanged.emit()
Example #8
0
def panoramaFisheyeHdr(inputImages=None,
                       inputViewpoints=None,
                       inputIntrinsics=None,
                       output='',
                       graph=None):
    if not graph:
        graph = Graph('PanoramaFisheyeHDR')
    with GraphModification(graph):
        panoramaHdr(inputImages, inputViewpoints, inputIntrinsics, output,
                    graph)
        for panoramaInit in graph.nodesByType("PanoramaInit"):
            panoramaInit.attribute("useFisheye").value = True
    return graph