【发布时间】:2014-10-26 16:36:18
【问题描述】:
我正在尝试实现具有不同尺寸 3x3 、 5x5 、 7x7 和 11x11 的平均滤波器。我进行了计算,调试时结果是正确的,但问题是它以负数保存在可写栅格中,所以我得到了奇怪的结果。第二个奇怪的事情是,当我想获取以负值保存的同一像素的值时,它以正值检索! 我正在使用 int。 怎么了?有什么帮助吗?!!
这是我的 5x5 平均滤波器代码。
public static BufferedImage filter5x5_2D(BufferedImage paddedBI , BufferedImage bi , double[][]filter)
{
WritableRaster myImage = paddedBI.copyData(null);
BufferedImage img = new BufferedImage(bi.getWidth(), bi.getHeight(), BufferedImage.TYPE_BYTE_GRAY);
WritableRaster myImage2 = img.copyData(null);
for(int i =2; i< myImage.getHeight()-2; i++)
{
for(int j =2; j< myImage.getWidth()-2; j++)
{
int value = 0;
int copyi = i-2;
for (int m = 0 ; m<5 ; m++)
{
int copyj = j-2;
for (int n = 0; n<5; n++)
{
int result = myImage.getSample(copyj , copyi, 0);
double f = filter[m][n];
double add = result * filter[m][n];
value += (int) (filter[m][n] * myImage.getSample(copyj , copyi, 0));
copyj ++;
}
copyi++;
//myImage2.setSample(j-1 , i-1, 0, value);
}
myImage2.setSample(j-2 , i-2, 0, value);
//int checkResult = myImage2.getSample(j-1,i-1,0);
}
}
BufferedImage res= new BufferedImage(bi.getWidth(),bi.getHeight(),BufferedImage.TYPE_BYTE_GRAY);
res.setData(myImage2);
return res;
}
【问题讨论】:
-
Java
bytes(与所有 Java 整数类型一样)已签名。使用TYPE_BYTE_GRAY,您将获得byte值,范围为-128...127。用byteValue & 0xff屏蔽符号,使其值在 0...255 范围内。
标签: java image-processing bufferedimage raster