二进制图像周界坐标超出界限 - java

时间:2015-03-14 18:06:34

标签: java arrays image

我试图从二进制图像中获取边界但是我不断收到错误' java.lang.ArrayIndexOutOfBoundsException:'任何人都可以确定我如何解决这个问题?

    int perimeter = 0;  
    Raster raster = source.getRaster();

    for (int i = 1; i<source.getHeight();i++){
        for(int j =1; j<source.getWidth();j++){
            if(raster.getSample(j, i, 0) == 0){
                if(raster.getSample(j+1, i, 0) == 1 || raster.getSample(j-1, i, 0) == 1 || raster.getSample(j, i+1, 0) == 1 || raster.getSample(j, i-1, 0) == 1){
                    perimeter++;
                }

            }
        }
    }

1 个答案:

答案 0 :(得分:0)

试试这个:

int perimeter = 0;  
Raster raster = source.getRaster();

for (int i=1; i<source.getHeight()-1; i++) {
    for (int j=1; j<source.getWidth()-1; j++) {
        if (raster.getSample(j, i, 0) == 0) {
            if (raster.getSample(j+1, i, 0) == 1
             || raster.getSample(j-1, i, 0) == 1
             || raster.getSample(j, i+1, 0) == 1
             || raster.getSample(j, i-1, 0) == 1) {
                perimeter++;
            }
        }
    }
}

基本上,在你的double-for-loop中,你正在检查当前元素的邻居(上面,下面,左边和右边的邻居)。这意味着需要左侧,右侧,上方和下方邻居才能使代码正常工作。所以我们不能在边界元素上运行循环(任何可能没有左,右,上或下邻居的元素)。

所以我的解决方案是改变for循环,以便跳过边界元素。如果您还需要检查边界元素,那么您可能需要对for循环内部进行一些更改。