gpt4 book ai didi

java - Sobel 运算符不适用于矩形图像

转载 作者:行者123 更新时间:2023-12-01 22:15:24 29 4
gpt4 key购买 nike

我尝试在 Java 中实现 Sobel 运算符,但结果只是一些像素的混合。

    int i, j;
FileInputStream inFile = new FileInputStream(args[0]);
BufferedImage inImg = ImageIO.read(inFile);
int width = inImg.getWidth();
int height = inImg.getHeight();
int[] output = new int[width * height];
int[] pixels = inImg.getRaster().getPixels(0, 0, width, height, (int[])null);

double Gx;
double Gy;
double G;

for(i = 0 ; i < width ; i++ )
{
for(j = 0 ; j < height ; j++ )
{
if (i==0 || i==width-1 || j==0 || j==height-1)
G = 0;
else{
Gx = pixels[(i+1)*height + j-1] + 2*pixels[(i+1)*height +j] + pixels[(i+1)*height +j+1] -
pixels[(i-1)*height +j-1] - 2*pixels[(i-1)*height+j] - pixels[(i-1)*height+j+1];
Gy = pixels[(i-1)*height+j+1] + 2*pixels[i*height +j+1] + pixels[(i+1)*height+j+1] -
pixels[(i-1)*height+j-1] - 2*pixels[i*height+j-1] - pixels[(i+1)*height+j-1];
G = Math.hypot(Gx, Gy);
}

output[i*height+j] = (int)G;
}
}


BufferedImage outImg = new BufferedImage(width,height,BufferedImage.TYPE_BYTE_GRAY);
outImg.getRaster().setPixels(0,0,width,height,output);
FileOutputStream outFile = new FileOutputStream("result.jpg");
ImageIO.write(outImg,"JPG",outFile);

JFrame TheFrame = new JFrame("Result");

JLabel TheLabel = new JLabel(new ImageIcon(outImg));
TheFrame.getContentPane().add(TheLabel);

TheFrame.setSize(width, height);

TheFrame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
TheFrame.setVisible(true);

它对于方形图像效果很好,但是当宽度!=高度时,结果图像被破坏并且有一些对角黑线。 :\

示例:

enter image description here

结果:

enter image description here

最佳答案

您的代码似乎期望 Raster.getPixels中生成结果,如下所示:

0  3  6
1 4 7
2 5 8

但我相信它实际上是按行进行的,如下所示:

0  1  2
3 4 5
6 7 8

所以基本上,你目前有这样的东西:

pxy = pixels[x * height + y];

你应该有

pxy = pixels[y * width + x];

例如,您有:

pixels[(i+1)*height + j-1]

你想要

pixels[(j-1)*width + i-1]

关于java - Sobel 运算符不适用于矩形图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31176610/

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