![](/img/trans.png)
[英]how to apply a softer sharpness in java.awt.image.BufferedImage
[英]How to pass a number of java.awt.image.BufferedImage's to Matlab
我正在编写一个用于实时图像处理的Java应用程序。 之后,我希望能够验证使用的算法或展示我在Matlab的Java应用程序中获取的数据。 在Java应用程序中,我正在使用java.awt.image.BufferedImage
在内部处理数据。 该程序通常运行约1-2分钟,并以25Hz,160x120像素的8位灰度级捕获数据,因此每帧栅格的权重为19200字节,每分钟获取30MB的数据。
将数据提供给Matlab的最佳方法是什么?
我的目标是要有一个Matlab数组,最后包含所有框架。 我曾考虑过将帧存储在未压缩的avi中(我尚不知道如何做),但是也许有一种更简单,既定的方式来做到这一点? 我已经读过了 ,但是还不知道如何使用它,或者这是否是处理多个帧的正确方法。
谢谢你的帮助。
只要确保为JVM提供足够的堆内存(java的-Xmx选项),就应该能够将图像存储在内存中的数组中。
捕获图像后,可以使用以下命令将其写入磁盘: ImageIO.write(bufferedImage, "png", file)
如果将它们全部以简单的文件名(例如“ img-00001.png”,“ img-00002.png”)放在目录中,则应该能够在Matlab中加载图像序列。
我想我找到了一个非常干净的解决方案,所以我将自己发布为答案。 有一个简单的开源Java框架,用于.mat文件导出,称为JMatIO (也可以从SourceForge获得,但请确保在此处下载最新版本0.2)。 它允许轻松地以.mat格式导出数据,然后以直接方式将其提供给Matlab。 如果由于使用文档少而遇到任何问题,请从此处下载源代码:
svn co https://jmatio.svn.sourceforge.net/svnroot/jmatio jmatio
并看一下单元测试,他们展示了如何使用它。
回到我的问题:我需要将一连串的帧上传到Matlab。 Matlab中的图像是2D矩阵,因此它们的突发将是3D矩阵。 我没有弄清楚如何在Matlab中将Java数组导出为3D网格,所以我在Matlab中将每个java.awt.image.BufferedImage
导出为一行,这很容易做到。 在Matlab中需要一些琐碎的数据操作来表示数据,然后再表达(矩阵转置和整形函数)。 看看下面的代码片段。 函数导出将缓冲100帧,如果再调用,它将导出到8位色深的文件中。
public class MatFileExporter {
private BufferedImage frame;
private int[][] frames;
private int frameSize;
private int numFrames = 100;
private int frameNumber = 0;
protected void export() {
//This will only work with 8-bit coded SampleModels, change if needed
if (frames == null) {
frameSize = frame.getData().getWidth() * frame.getHeight();
frames = new int[numFrames][frameSize];
}
if (frameNumber < numFrames) {
frame.getData().getPixels(0, 0, frame.getWidth(),
frame.getHeight(), frames[frameNumber++]);
} else {
byte[][] framesByte = new byte[numFrames][frameSize];
for (int i=0; i<numFrames; i++) {
for (int j=0; j<frameSize; j++) {
framesByte[i][j] = (byte) frames[i][j];
}
}
MLUInt8 array = new MLUInt8("frames", framesByte);
ArrayList<MLArray> list = new ArrayList<MLArray>();
list.add(array);
new MatFileWriter( "frames.mat", list );
}
}
}
随时使用和更改它,希望对您有所帮助。 还支持增量.mat文件编写,请参考源代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.