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个值,则最简单的方法是运行循环三次(对于不同的宽度也是如此;所以有一种简单的方法可以配置过滤器)。