Java中的腐蚀函数

Java中的腐蚀函数,java,bufferedimage,imagefilter,mathematical-morphology,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

我必须对图像应用腐蚀的方法。 然而,我有一些困难。 我从一个基本的例子开始,但在这一点上,我的图像的所有像素都将保持第一个像素的值。 如何解决这个问题

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;       
}
公共静态int[]腐蚀(int数组[])
{
//int-array1[]=新的int[array.length];
//数组复制(数组,0,数组1,0,数组.长度);
for(int i=1;i
问题在于数组中的上一个值已在下一次迭代过程中赋值。对于就地替换,您可以尝试以下方法:

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];
int-previous=array[0];
for(int i=0;i

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

问题是数组中的前一个值已在下一次迭代过程中分配。对于就地替换,您可以尝试以下操作:

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];
int-previous=array[0];
for(int i=0;i

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

谢谢kiheru的帮助。但是,如果我想要数组[i+2]和数组[i+3],这是一样的吗?@FCoelho你的意思是取一个更大的值区域的最小值吗?那么你需要保留更多以前的值(假设你在计算中也需要数组[i-n]),这只保留一个(对应于数组)[i-1]在你的问题中)。在某些情况下,只处理一个副本会变得更容易,就像bas的回答一样。@FCoelho另一种可能是多次运行同一个循环。这与将最小值传播到更广的区域具有相同的效果。@FCoelho 6不适合计算相邻值。如果您的意思是每边有3个值,则最简单的方法是运行循环三次。(对于不同的宽度也是如此;因此有一种简单的方法可以配置过滤器)。感谢kiheru的帮助。但是,如果我想要数组[i+2]和数组[i+3],这是一样的?@FCoelho你是说取更大的值区域的最小值吗?那么你需要保留更多以前的值(假设你也想要数组[i-n])在计算中),这只保留一个(对应于您问题中的数组[i-1])。在某些情况下,只处理一个副本会变得更容易,就像bas的回答一样。@FCoelho另一种可能是多次运行同一个循环。这与将最小值传播到更广的区域具有相同的效果。@FCoelho 6不适合计算相邻值。如果您的意思是每边有3个值,则最简单的方法是运行循环三次(对于不同的宽度也是如此;所以有一种简单的方法可以配置过滤器)。