Java中的侵蚀功能

时间:2013-07-29 19:22:41

标签: java bufferedimage imagefilter mathematical-morphology

我必须将侵蚀方法应用于图像。 但是,我遇到了一些困难。 我从一个基本的例子开始,但此时我的图像的所有像素都将保留第一个像素的值。 如何解决这个问题?

public static int[] erosion(int array[])
{
    //int array1[] = new int[array.length];  
    // System.arraycopy(array, 0, array1, 0, array.length);          
    for(int i=1; i < array.length; i++)
    {
        if (array[i-1] < array[i]) {
            array[i] = array[i-1];
        }
        if (array[i+1] < array[i]) {
            array[i] = array[i+1];
        }
    }
    return array;       
}

1 个答案:

答案 0 :(得分:3)

问题是数组中的先前值已​​在下一次迭代过程中分配。对于就地替换,你可以尝试这样的事情:

int previous = array[0];
for (int i = 0; i < array.length - 1; i++) {
    int res = Math.min(previous, array[i]);
    res = Math.min(res, array[i + 1]);
    previous = array[i];
    array[i] = res;
}
array[array.length - 1] = Math.min(previous, array[array.length - 1];

编辑:扩展到第一个和最后一个值。