【问题标题】:Issues with edge detection on image with sobel filter with Java's ConvolveOP使用 Java 的 ConvolveOP 使用 sobel 滤波器对图像进行边缘检测的问题
【发布时间】:2016-02-10 15:17:15
【问题描述】:

我正在尝试使用 sobel 过滤器对 BufferedImage 进行边缘检测。但似乎 Java 过滤器系统无法正确处理图像中的负值(而手动实现只会abs() 它们)。是否可以在不手动编写整个过滤器的情况下避免此问题?

代码:

    BufferedImage image, converted_image;
    try {
        image = ImageIO.read(new File("image.png"));

        // convert image from ARGB to RGB
        BufferedImage newImage = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_RGB);
        Graphics2D g = newImage.createGraphics();
        g.drawImage(image, 0, 0, image.getWidth(), image.getHeight(), null);
        g.dispose();
        image = newImage;
    } catch (IOException ex) {
        System.exit(1);
    }

    float sobel[] = {
            1.0f, 0.0f, -1.0f,
            2.0f, 0.0f, -2.0f,
            1.0f, 0.0f, -1.0f
    };

    BufferedImageOp sobelFilter = new ConvolveOp(new Kernel(3, 3, sobel));

    converted_image = sobelFilter.filter(image, null);

    try {
        ImageIO.write(converted_image, "png", new File("image2.png"));
    } catch (IOException ex) {
        System.exit(1);
    }

示例图片:

以及错误的边缘检测。请注意,虽然过滤器应该只处理垂直边缘,但它只处理 black | white 边缘而不是 white | black 边缘。

【问题讨论】:

    标签: java image image-processing edge-detection


    【解决方案1】:

    这是一个显示问题-该方法使用您从左到右“进入”的颜色-因此黑色覆盖了所有内容-在此使用彩色图像

    我明白了

    【讨论】:

      猜你喜欢
      • 2017-02-26
      • 2016-04-01
      • 2018-12-12
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 2015-08-09
      • 2020-10-21
      • 2020-04-06
      相关资源
      最近更新 更多