You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何改进Java边缘检测程序以捕捉图像细微细节?

Java边缘检测程序优化需求

处理前后对比图

处理前
处理后

实现逻辑与核心代码

我通过对比相邻像素的颜色差值实现边缘检测:当差值足够大时标记为黑色,差值较小时标记为白色。核心代码如下:

public Image edgeDetection() {
    Color[][] newImg = new Color[image.length][image[0].length];
    int x = 2;//higher = less sensitive; lower = more sensitive
    for (int r = 0; r < image.length; r++) {
        for (int c = 0; c < image[r].length; c++) {
            int red = image[r][c].getRed();
            int blue = image[r][c].getBlue();
            int green = image[r][c].getGreen();
            if(r < image.length - 1 && c < image[r].length) {
                if(image[r][c].getRed() - image[r + 1][c].getRed() > x || image[r][c].getRed() - image[r +  1][c].getRed() < -x ) {
                    if(image[r][c].getBlue() - image[r +  1][c].getBlue() > x || image[r][c].getRed() - image[r +  1][c].getRed() < -x ) {
                        if(image[r][c].getGreen() - image[r +  1][c].getGreen() > x || image[r][c].getRed() - image[r +  1][c].getRed() < -x ) {
                            newImg[r][c] = new Color(0, 0, 0);
                        }
                        else {
                            newImg[r][c] = new Color(255, 255, 255);
                        }
                    }
                    else {
                        newImg[r][c] = new Color(255, 255, 255);
                    }
                }
                else {
                    newImg[r][c] = new Color(255, 255, 255);
                }
            }
            else {
                newImg[r][c] = new Color(red, green, blue);
            }
        }
    }
    return new Image (newImg);
}

当前问题与优化需求

目前阈值x设为2时,黑色像素多于白色;增大x则白色像素占比更高。但无论怎么调整x,都没法让边缘检测结果更贴近原图风格。希望优化程序,让黑白边缘图更清晰,能捕捉图像中的细微细节,如需更多代码可提供。本项目仅为个人兴趣,即便现有代码无法实现也没关系。

内容的提问来源于stack exchange,提问作者Anon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 00:21:25