Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java'的sobel滤波器对图像进行边缘检测的问题;s卷积_Java_Image_Image Processing_Edge Detection - Fatal编程技术网

使用Java'的sobel滤波器对图像进行边缘检测的问题;s卷积

使用Java'的sobel滤波器对图像进行边缘检测的问题;s卷积,java,image,image-processing,edge-detection,Java,Image,Image Processing,Edge Detection,我正在尝试使用sobel过滤器对BuffereImage进行边缘检测。但是Java过滤系统似乎不能正确处理映像中的负值(而手动实现只能abs()它们)。如果不手动写入整个筛选器,是否可以避免此问题 代码: 示例图像: 以及缺陷边缘检测。请注意,虽然过滤器应该只处理垂直边,但它只处理黑|白边,而不处理白|黑边 这是一个显示问题-该方法使用从左到右“进入”的颜色-因此黑色覆盖了所有内容-在该图上使用彩色图像 我明白了 这是一个显示问题-该方法使用从左到右“进入”的颜色-因此黑色覆盖了所有内容-在

我正在尝试使用sobel过滤器对BuffereImage进行边缘检测。但是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);
    }