Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Cách thêm nhiễu (noise) vào ảnh bằng Java OpenCV

Để thêm nhiễu vào ảnh OpenCV:

  1. Đọc ảnh vào Mat src.
  2. Tạo 2 ma trận rỗng dst (kết quả) và noise (nhiễu).
  3. Tạo MatOfDouble mean, dev để lưu mean và độ lệch chuẩn.
  4. Tính mean, stddev bằng Core.meanStdDev(src, mean, dev).
  5. Tạo ma trận nhiễu ngẫu nhiên bằng Core.randn(noise, mean, dev).
  6. Cộng nhiễu vào ảnh gốc: Core.add(src, noise, dst).

Ví dụ (JavaFX)

import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javafx.application.Application;
import javafx.embed.swing.SwingFXUtils;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.image.ImageView;
import javafx.scene.image.WritableImage;
import javafx.stage.Stage;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfDouble;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;

public class AddingNoise extends Application {
    public void start(Stage stage) throws IOException {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        String file = "D://images//elephant.jpg";
        Mat src = Imgcodecs.imread(file);
        Mat dst = new Mat(src.rows(), src.cols(), src.type());
        Mat noise = new Mat(src.rows(), src.cols(), src.type());
        MatOfDouble mean = new MatOfDouble();
        MatOfDouble dev = new MatOfDouble();
        Core.meanStdDev(src, mean, dev);
        Core.randn(noise, mean.get(0,0)[0], dev.get(0,0)[0]);
        Core.add(src, noise, dst);
        Image img = HighGui.toBufferedImage(dst);
        WritableImage writableImage = SwingFXUtils.toFXImage((BufferedImage) img, null);
        ImageView imageView = new ImageView(writableImage);
        imageView.setX(10); imageView.setY(10);
        imageView.setFitWidth(575); imageView.setPreserveRatio(true);
        Group root = new Group(imageView);
        Scene scene = new Scene(root, 595, 400);
        stage.setTitle("Adding Noise Example");
        stage.setScene(scene);
        stage.show();
    }
    public static void main(String args[]) { launch(args); }
}

Ảnh gốc

Cách thêm nhiễu (noise) vào ảnh bằng Java OpenCV

Ảnh sau khi thêm nhiễu

Cách thêm nhiễu (noise) vào ảnh bằng Java OpenCV