我目前正在使用Java(Applet)进行图像处理演示。我遇到的问题是我的数组太大,导致出现“java.lang.OutOfMemoryError: Java heap space”错误。
我运行的算法创建了一个NxD浮点数组, 其中:N是图像中像素的数量,D是每个像素的坐标加上每个像素的颜色空间组件(通常为灰度的1或RGB的3)。每次迭代算法时,它都会创建一个这样的NxD浮点数组并将其存储供以后在向量中使用,以便Applet的用户可以查看单个步骤。
我的客户希望该程序能够加载一个500x500的RGB图像并运行作为上限。每次运行大约有12到20个迭代,因此我需要以某种方式存储一个12x500x500x5浮点数。
是否有一种方法可以处理所有这些数据,如果可能的话,如何处理?
例如,我正在加载一个512x512的灰度图像,甚至在第一次迭代完成之前,我就已经用完了堆空间。它指向的代码行是:
Y.add(new float[N][D])
其中Y是一个Vector,N和D如上所述。这是代码使用该行的第二个实例。
编辑:正如我提到但忘记更正的那样,上限应该约为:20 + x 500 x 500 x 5(20个迭代,500宽度,500高度,5个维度(其中3来自RGB和2为坐标(坐标移动,像素也随之移动,因此我需要记录值,这些可以是小数))(约100000000字节)。
我运行的算法创建了一个NxD浮点数组, 其中:N是图像中像素的数量,D是每个像素的坐标加上每个像素的颜色空间组件(通常为灰度的1或RGB的3)。每次迭代算法时,它都会创建一个这样的NxD浮点数组并将其存储供以后在向量中使用,以便Applet的用户可以查看单个步骤。
我的客户希望该程序能够加载一个500x500的RGB图像并运行作为上限。每次运行大约有12到20个迭代,因此我需要以某种方式存储一个12x500x500x5浮点数。
是否有一种方法可以处理所有这些数据,如果可能的话,如何处理?
例如,我正在加载一个512x512的灰度图像,甚至在第一次迭代完成之前,我就已经用完了堆空间。它指向的代码行是:
Y.add(new float[N][D])
其中Y是一个Vector,N和D如上所述。这是代码使用该行的第二个实例。
编辑:正如我提到但忘记更正的那样,上限应该约为:20 + x 500 x 500 x 5(20个迭代,500宽度,500高度,5个维度(其中3来自RGB和2为坐标(坐标移动,像素也随之移动,因此我需要记录值,这些可以是小数))(约100000000字节)。