0

为了在java中调用一个matlab方法,我做了一个代码草图如下:

Process proc;
    try {
        // Run the process
        proc = Runtime.getRuntime().exec(
            new String[]{
                "matlab -nosplash -nodesktop -r run("C:\Users\felip\Desktop\Projetos\...\teste.m"),
                caminho.concat("sem_reflexo.jpg"),
                caminho.concat("edge.jpg"),
                caminho.concat("labels.pgm"),
                caminho.concat("borders.pgm")"
            }
        );

        proc.waitFor();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

对于上面的代码,我打算将作为参数传递给 Matlab 方法,来自 Java 程序的输入是图像分割方法的参数。这些参数是动态的,在程序读取图像目录时,图像会一张一张地变化,直到全部读取完毕。

具有串联字符串传递参数的caminho.concat功能,在同一行,根据每个文件夹中的图像变化等等。但是,考虑到 test.m 字符串的构造并传递其参数,我不知道这是否是最好的方法。简而言之,我对如何进行整合感到困惑。

我在 Matlab 中做了一个代码草图,这样我就可以调用脚本来传递必要的参数,但我不确定,因为我没有太多的语言经验。以下是matlab脚本:

function sh = SuperpixelHierarchy(image, edge, edge_weight, compactness, labels, borders)
    arguments
        image 
        edge
        edge_weight
        compactness
        labels
        borders
    end
    sh = SuperpixelHierarchyMex(image, edge, edge_weight, compactness);
    imgdir =  dir(fullfile(image,'*.jpg'));
    imgname = {imgdir.name};
    imwrite(sh.label, borders);
    color1 = MeanColor(double(image), sh.label);
    imwrite(sh.label, labels);
    fusion = imfuse(color1, sh.label,'ColoChannels', [R G B]);
    imwrite(fusion, imgname+"SUPERPIXELS_LABELS.jpg");
end

我想从用 Matlab 编写的称为 Superpixels Hierarchy (SH) 的方法中提取超像素。因此,我需要使用输入参数来计算这些超像素,并将此方法的输出用作 Java 程序下一阶段的输入...

您能否帮助我构建字符串并理解这种用于提取超像素作为我的程序的集成?既然我谢谢你。

4

1 回答 1

0

据我所知,你不能直接做你建议的事情。您可以直接在 Matlab 中实例化 Java 对象。在这种情况下,它们共享相同的 JVM,并且您可以使用标准编程技术来回选择更多选项,通过外壳启动单独的 Matlab 进程会更难或丢失。

这将导致一个流程,您将当前 Java 包装在一个或多个 Java 类中,启动 Matlab(GUI 或您喜欢的无头),并在 Matlab 中获取包装 Java 对象之一。这些对象可以传递到 Matlab 函数中,其中 Matlab 代码中的逻辑可以调用 Java 对象上的方法,以根据需要获取您描述为“动态”的信息。

于 2021-05-21T16:37:23.970 回答