【问题标题】:How do I use a Matlab script in Java with arguments?如何在 Java 中使用带有参数的 Matlab 脚本?
【发布时间】:2021-08-10 21:41:53
【问题描述】:

为了在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 程序下一阶段的输入...

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

【问题讨论】:

    标签: java matlab method-call superpixels


    【解决方案1】:

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

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

    【讨论】:

    • 喂!感谢您的贡献!你能帮我提供一个网站、书籍等参考资料,让我能更多地了解你的适应建议吗?这样我就可以更加自信地进行变革。
    • 使用 Matlab 文档。它详细描述了这一点。
    • 我正在研究这个主题,我相信这不是我的案例的正确方法。我有一个巨大的java程序,也许我可以调用一个.exe格式的matlab函数,并使用我上面开发的代码格式在命令行中传递参数。你怎么看?
    • 我确信有不止一种方法可以做到这一点。你的问题很广泛。我已尽我所能为您提供所提供的信息,采用这种 SO 格式,而且是免费的。祝你好运!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-08
    • 2012-11-15
    • 1970-01-01
    • 2019-11-27
    • 1970-01-01
    • 1970-01-01
    • 2015-03-15
    相关资源
    最近更新 更多