0

侵食の方法を画像に適用する必要があります。しかし、私はいくつかの困難を抱えています。基本的な例から始めていますが、この時点では、画像のすべてのピクセルは最初のピクセルの値のままです。この問題を解決するには?

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

1 に答える 1

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];

編集:最初と最後の値に拡張。

于 2013-07-29T19:43:20.600 に答える