可写光栅中的java负值
我正在尝试用不同尺寸的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;
}
# 1 楼答案
我没有发现任何负值。以下是我测试这段代码的主要内容:
你应该考虑你的变量^ {< CD1>},^ {< CD2>}和^ {< CD3>}未被使用。如果
value
是double
型而不是int
型,也会更好。在最坏的情况下,你会得到一个值11的25倍,在乘以1/25后,这个值将被四舍五入为零。这将导致代码的灰色值为零,而它将导致11