[英]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.