查找相邻子图像的算法

时间:2014-12-05 20:51:28

标签: java algorithm

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

因此,如果我有原始图像(m X n像素)并且我在(sub_x,sub_y)找到了尺寸(sub_width和sub_height)的子图像,我还需要提取相同大小的子图像(sub_width和sub_height) at(sub_x + m,sub_y + n)其中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);      
        }

x,y,width和height是我找到的原始子图像的所有整数。

img是原始的全尺寸BufferedImage。

我对表现不太满意。有更快/更聪明的方法吗?

1 个答案:

答案 0 :(得分:1)

这是你可以做的一件简单的事情:摆脱循环中的那些条件。首先计算您的范围,只计算一次,然后运行没有范围检查的循环。

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
    }
}

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