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
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
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
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))
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))
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
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()
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