gpt4 book ai didi

java - java中的灰度图像对数变换

转载 作者:行者123 更新时间:2023-11-30 07:25:42 25 4
gpt4 key购买 nike

我正在尝试从灰度图像中获取对数转换。但无论 c 值如何,我都会得到黑色图像。有什么想法吗?

这是我的方法:

///-------------------------------------------------------- -------

public static BufferedImage log_trans (int[][] imageData , int c){

        BufferedImage LogImage = new BufferedImage(imageData.length, imageData[0].length, BufferedImage.TYPE_BYTE_GRAY);
double temp;
for (int i =0 ; i<imageData.length ; i ++){
for (int j=0 ; j<imageData[0].length ; j++){
int rgb = imageData[i][j];
rgb = (rgb<<16)|(rgb<<8)|(rgb);
temp = Math.log10(rgb+1);
rgb = (int) (c * temp);
LogImage.setRGB(i, j, rgb);
}}

return LogImage;
}

--------------------------------------------------------------
public static int[][] readimage(File filename){
BufferedImage img;

try {
img = ImageIO.read(filename);

// Gray_scaled Image output

int width = img.getWidth();
int height = img.getHeight();
ImagePro.fw=width;
ImagePro.fh = height;
int [][] readimageVal = new int [width][height];
for (int i = 0; i<height ; i++){
for (int j =0 ; j<width ; j++){

Color c = new Color(img.getRGB(j, i));
int r= (int)(c.getRed() * 0.299)&0xff;
int g = (int)(c.getGreen() * 0.587)&0xff;
int b = (int)(c.getBlue() *0.114)&0xff;
int avg = ((r+b+g));

readimageVal[j][i] = avg;
}
}
return readimageVal;

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}

最佳答案

看来“rgb”总是负数,所以temp总是Nan,所以最后“rgb”之后:

rgb = (int) (c * temp);

始终为 0,这就是为什么你总是得到黑色图片。

将第 8 行更改为:

rgb = (((byte)rgb & 0xFF)<<16)|(((byte)rgb & 0xFF)<<8)|(((byte)rgb & 0xFF));

我得到了一些非常暗的输出,但它不是很好。我测试了“c”的值为 1、18000、180000 和 0x00FFFFFF。

关于java - java中的灰度图像对数变换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36833486/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com