使用Java OpenCV如何对图像进行去噪

3
在我的情况下,我想要去除图像中的所有黑点。我的图像如下所示。当我使用程序时,图像变得平滑了,但是程序没有删除黑点。请帮助我删除黑点。请尽快回复。 原始图像 以下是代码。
public class Denoise {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        try{
            System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
         Mat source =Imgcodecs.imread("C:\\Users\\My Kindom\\Downloads\\printscreen.JPG",Imgcodecs.CV_LOAD_IMAGE_COLOR);

         Mat destination = new Mat(source.rows(),source.cols(),source.type());
         destination = source;
         Photo.fastNlMeansDenoisingColored(source,destination, 10, 10, 7, 21);
         Imgcodecs.imwrite("C:\\Users\\My Kindom\\Downloads\\Denoise.jpg", destination);

        }catch(Exception e){}
        // TODO code application logic here
    }

Destination Image

1个回答

2
简单来说,您可以应用阈值来分割黑点。然后,使用此作为蒙版,进行修复。修复不会像去噪声一样影响图像的其他区域。我不太确定您所说的黑点是什么意思,因此我应用了一个简单的阈值。您可以尝试使用不同的阈值,使用inRange或其他方法生成蒙版。我还使用了任意的修复半径。通过分析蒙版中的轮廓区域,然后决定半径,您可能能够使其更好。

original

掩模和修复:阈值=70,半径=20。

mask70dn70

掩膜和修复:阈值=100,半径=20

mask100dn100

import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.highgui.Highgui;
import org.opencv.imgproc.Imgproc;
import org.opencv.photo.Photo;

public class Dnoise {

    public static void doDnoise()
    {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

        Mat rgb = Highgui.imread("ybD8q.jpg");

        Mat gray = new Mat(rgb.size(), CvType.CV_8U);
        Imgproc.cvtColor(rgb, gray, Imgproc.COLOR_BGR2GRAY);
        Mat mask = new Mat(rgb.size(), CvType.CV_8U);
        Imgproc.threshold(gray, mask, 70, 255, Imgproc.THRESH_BINARY_INV);
        Mat dn = new Mat(rgb.size(), CvType.CV_8UC3);
        Photo.inpaint(rgb, mask, dn, 20, Photo.INPAINT_TELEA);
    }

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接