Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab到Java-如何像在Matlab中那样用Java绘制数据和显示图像?_Java_Eclipse_Image_Matlab_Image Processing - Fatal编程技术网

Matlab到Java-如何像在Matlab中那样用Java绘制数据和显示图像?

Matlab到Java-如何像在Matlab中那样用Java绘制数据和显示图像?,java,eclipse,image,matlab,image-processing,Java,Eclipse,Image,Matlab,Image Processing,我对Java完全是新手。我正在使用Eclipse 我已经在Matlab中编写了代码,该代码导入带有“imread”函数的.pgm图像,然后该算法对其应用Brushfire方法 问题是,像我这样的新手很容易同时编写代码和查看结果,因为Matlab有“工作空间”(我可以在其中看到矩阵形式的图像)或绘图选项,还有命令窗口等工具。但是在Eclipse中它是怎样的呢?如何编写代码并监控结果? Eclipse是否也有类似于“imread”功能的功能?MATLAB(在大多数情况下)主要是一个原型环境,允许您轻

我对Java完全是新手。我正在使用Eclipse

我已经在Matlab中编写了代码,该代码导入带有“imread”函数的.pgm图像,然后该算法对其应用Brushfire方法

问题是,像我这样的新手很容易同时编写代码和查看结果,因为Matlab有“工作空间”(我可以在其中看到矩阵形式的图像)或绘图选项,还有命令窗口等工具。但是在Eclipse中它是怎样的呢?如何编写代码并监控结果? Eclipse是否也有类似于“imread”功能的功能?

MATLAB(在大多数情况下)主要是一个原型环境,允许您轻松导入数据(在您的情况下是图像),有工具绘制数据,还有一个与MATLAB交互并立即查看结果的平台

在这样完整的环境中工作时,最大的问题之一是将代码传输到另一个环境。。。所以在你的例子中,Java。如果你这样做,很多MATLAB的功能都会被忽略,而且复制起来会很痛苦。您可以做的最好的事情是自己编写功能。。。这是非常困难的,或者找到外部库或代码来帮助您做到这一点

让我们谈谈你对密谋的担忧。有很多Java外部库可以帮助您绘制2D和3D数据。以下是我最喜欢的Github网站之一:

它实际上只是在一对(或三元组)或数组中定义一组点,并简单地调用几个方法。然后,它将在一个漂亮的
JFrame
中为您显示所有这些数据

至于图像,这就有点困难了。有内置的Java库可以为您读入图像。具体地说,如果您引用
ImageIO
类,Java可以以本地方式读取GIF、PNG、JPEG、BMP和WBMP,如果您需要TIF或JPEG 2000,还可以使用扩展名。看见但是,PGM映像没有本机支持

您有两个选择:

  • 使用MATLAB并将PGM图像读入MATLAB,然后将其重新保存为PNG、JPEG或
    ImageIO
    支持的任何数据类型。一旦您这样做了,只需假设您导入了正确的库即可:buffereImage、ImageIO等:

    BufferedImage img = null;
    try {
        img = ImageIO.read(new File("image_to_load.jpg"));
    } catch (IOException e) {
    }
    
    一旦你这样做了,跳到下面的部分,我将在
    BufferedImage
    中加载并在
    JFrame
    上显示它

  • 编写自己的PGM解析器。如果您想这样做,这里有一些有关StackOverflow的代码,可以读取PGM图像:

    检查实际数据时,PGM图像是一堆字符。前3(或4)行处理标题信息本身。从第一行到第四行,PGM图像通常包括

    • 第1行-
      P5
      -表示这是灰度PGM图像
    • 第2行-由
      #
      符号分隔的注释。在MATLAB中,当您保存PGM图像时,有一条注释告诉您该图像已保存在MATLAB中。某些PGM文件没有此功能
    • 第3行-分别为宽度和高度的两个整数
    • 第4行-图像中遇到的最大强度
    这些行之后是光栅扫描格式的图像数据本身。“光栅扫描”格式的意思是,图像的行被堆叠成一个巨大的行,与图像的总大小一样长(
    width x height
    )。我上面链接的代码为您提供了一个关于如何将像素读入2D整数数组的良好Java实现

    接下来需要做的是将其转换为一个交错的像素阵列,然后从中创建一个
    缓冲图像
    类型。你可以在这里找到答案:


  • 一旦将其转换为正确的格式,您现在的目标就是显示图像。只需使用您创建的
    BufferedImage
    实例,并将其显示在
    JFrame
    中。这可以在这里完成:

    您所要做的就是创建一个新的
    ImageIcon
    并将其放置在
    JLabel
    容器中,然后将此容器添加到
    JFrame
    中。这将最终为您提供要显示的图像内容


    至于复制MATLAB的REPL,这在有限的时间内可能是不可能做到的。首先,它需要编写自己的后端文本解析和编写方法来显示内容。MATLAB的优点在于,无论何时在工作区中声明变量,都可以在工作区窗口或使用
    who
    立即访问变量。如果您想在Java中复制相同的行为,那将非常困难,如果您的目标只是绘制数据或显示图像,我可能不建议您这样做。让Eclipse通过使用他们的调试器为您完成一些工作。我想说的是使用调试器,希望这足以检查在给定时间创建的所有变量和对象



    希望这有帮助

    非常感谢你!听起来我有很多事情要做,但我希望我能成功。谢谢你!您还可以查看我编写的这个小型绘图包装器:。没有回答完整的问题,但对于来自Matlab并试图用Java绘制绘图的人来说,这可能有助于他们开始学习。