Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

วิธีเพิ่ม Noise ให้กับภาพโดยใช้ไลบรารี Java OpenCV


เพื่อเพิ่ม noise ให้กับภาพที่กำหนดโดยใช้ OpenCV:

  1. อ่านเนื้อหาของภาพที่ให้มาเข้าไปในออบเจ็กต์ Mat
  2. สร้างเมทริกซ์ว่างอีกสองตัวเพื่อเก็บ noise และเมทริกซ์ผลลัพธ์
  3. สร้างเมทริกซ์ MatOfDouble สองตัวเพื่อเก็บค่า mean และ standard deviation
  4. ดึงค่า mean และ standard deviation โดยใช้เมธอด meanStdDev()
  5. สร้างเมทริกซ์ที่มีองค์ประกอบสุ่ม (เพื่อเก็บ noise) โดยใช้เมธอด randn()
  6. ส่งออบเจ็กต์ต้นทาง mean และ standard deviation ที่สร้างไว้ข้างต้นให้เมธอด randn()

สุดท้าย ให้บวกเมทริกซ์ noise และเมทริกซ์ต้นทาง แล้วบันทึกเป็นปลายทาง

ตัวอย่างโค้ด

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 {
        // โหลดไลบรารีหลักของ OpenCV
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        
        // อ่านภาพจากไฟล์
        String file = "D://images//elephant.jpg";
        Mat src = Imgcodecs.imread(file);
        System.out.println("Image Loaded");
        
        // สร้างเมทริกซ์ปลายทาง
        Mat dst = new Mat(src.rows(), src.cols(), src.type());
        
        // สร้างเมทริกซ์สำหรับ noise
        Mat noise = new Mat(src.rows(), src.cols(), src.type());
        
        // คำนวณ mean และ standard deviation
        MatOfDouble mean = new MatOfDouble();
        MatOfDouble dev = new MatOfDouble();
        Core.meanStdDev(src, mean, dev);
        
        // เติมเมทริกซ์ noise
        Core.randn(noise, mean.get(0,0)[0], dev.get(0,0)[0]);
        
        // บวก noise เข้าไปในปลายทาง
        Core.add(src, noise, dst);
        
        // แปลงเมทริกซ์เป็น JavaFX writable image
        Image img = HighGui.toBufferedImage(dst);
        WritableImage writableImage = SwingFXUtils.toFXImage((BufferedImage) img, null);
        
        // ตั้งค่า image view
        ImageView imageView = new ImageView(writableImage);
        imageView.setX(10);
        imageView.setY(10);
        imageView.setFitWidth(575);
        imageView.setPreserveRatio(true);
        
        // ตั้งค่า Scene object
        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);
    }
}

ภาพเข้า

วิธีเพิ่ม Noise ให้กับภาพโดยใช้ไลบรารี Java OpenCV

ผลลัพธ์

เมื่อรันโปรแกรม จะสร้างผลลัพธ์ดังต่อไปนี้:

วิธีเพิ่ม Noise ให้กับภาพโดยใช้ไลบรารี Java OpenCV