Java 一种寻找相邻子图像的算法

Java 一种寻找相邻子图像的算法,java,algorithm,Java,Algorithm,我有一个图像,我正在提取一个子图像,以提供给我的神经网络。我试图计算同一邻域中所有子图像的平均输出 因此,如果我有一个原始图像(m X n像素),并且我在(sub_X,sub_y)处发现了一个子图像,其大小(sub_宽度和sub_高度),我还需要在(sub_X+m,sub_y+n)处提取具有相同大小(sub_宽度和sub_高度)的子图像,其中m和n从1到3 我已经有了一个可行的解决方案: for (int subX = (x-3); subX < (x+4); subX++) fo

我有一个图像,我正在提取一个子图像,以提供给我的神经网络。我试图计算同一邻域中所有子图像的平均输出

因此,如果我有一个原始图像(m X n像素),并且我在(sub_X,sub_y)处发现了一个子图像,其大小(sub_宽度和sub_高度),我还需要在(sub_X+m,sub_y+n)处提取具有相同大小(sub_宽度和sub_高度)的子图像,其中m和n从1到3

我已经有了一个可行的解决方案:

for (int subX = (x-3); subX < (x+4); subX++)
    for (int subY = (y-3); subY < (y+4); subY++)
      if ( (subX > 0) && (subY > 0) )
        if ( ((subX + width) < img.getWidth()) && ((subY + height) < img.getHeight()) ){
            counter++;
            testingImage = img.getSubimage(subX, subY, width, height);      
        }
for(intsubx=(x-3);subX<(x+4);subX++)
对于(int-subY=(y-3);subY<(y+4);subY++)
如果((subX>0)和&(subY>0))
如果(((subX+width)
x、 y、宽度和高度都是我找到的原始子图像的整数

img是原始的全尺寸BuffereImage


不过我对这次演出不太满意。有没有一种更快/更智能的方法可以做到这一点?

这里有一件简单的事情可以做:消除循环中的这些条件。首先计算范围,仅计算一次,然后在不进行范围检查的情况下运行循环

int subXStart = max(x-3, 0);
int subYStart = max(y-3, 0);
int subXEnd = min(x+4, img.getWidth() - width);
int subYEnd = min(y+4, img.getHeight() - height);
for (int subX = subXStart; subX < subXEnd; subX++) {
    for (int subY = subYStart; subY < subYEnd; subY++) {
        counter++;
        testingImage = img.getSubimage(subX, subY, width, height);
        // run your neural net
    }
}
intsubxstart=max(x-3,0);
int subYStart=max(y-3,0);
int subXEnd=min(x+4,img.getWidth()-width);
int subYEnd=min(y+4,img.getHeight()-height);
for(int subX=subXStart;subX

您还可以尝试切换循环的顺序。匹配内存顺序的顺序应该快得多。

img.getSubimage
中花费了多少执行时间?如果很多的话,也许你可以用你自己的,专门的功能来代替它。但是,我不认为问题出在getSubimage方法上。在我添加此代码块之前,性能非常好。我大大增加了所需的计算量。这只是应用程序的一小部分,但我有N个元素需要遍历这个代码块。以前我只有一个子图像,所以它很好。这绝对是一个更聪明的方法来处理丑陋的如果我有发言。谢谢性能并没有显著提高,但我想这真的是无法避免的计算开销。