簡體   English   中英

使用Java的ConvolveOP使用sobel濾波器對圖像進行邊緣檢測的問題

[英]Issues with edge detection on image with sobel filter with Java's ConvolveOP

我正在嘗試使用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 black | white邊緣而不是white | black white | black的。

在此處輸入圖片說明

這是一個顯示問題-該方法使用您要從左到右“進入”的顏色-因此黑色覆蓋了所有內容-在此使用彩色圖像
有用的圖像

我明白了

產量

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM