Java DIP - Nâng cao độ sắc nét của hình ảnh
Trong chương này, chúng ta học cách tăng độ sắc nét của ảnh bằng bộ lọc Gaussian.
Đầu tiên chúng tôi sử dụng OpenCV chức năng GaussianBlur. Nó có thể được tìm thấy dướiImgprocgói hàng. Cú pháp của nó được đưa ra dưới đây:
Imgproc.GaussianBlur(source, destination, new Size(0,0), sigmaX);
Các thông số được mô tả ngắn gọn -
Sr.No. | Mô tả về Thông Số |
---|---|
1 | source Nó là hình ảnh nguồn. |
2 | destination Nó là hình ảnh đích. |
3 | Size Đó là kích thước hạt nhân Gaussian. |
4 | sigmaX Nó là độ lệch chuẩn của hạt nhân Gaussian theo hướng X. |
Hơn nữa, chúng tôi sử dụng OpenCV chức năng addWeightedđể áp dụng hình mờ hình ảnh cho hình ảnh. Nó có thể được tìm thấy dướiCoregói hàng. Cú pháp của nó được đưa ra dưới đây:
Core.addWeighted(InputArray src1, alpha, src2, beta, gamma, OutputArray dst);
Các tham số của hàm này được mô tả dưới đây:
Sr.No. | Mô tả về Thông Số |
---|---|
1 | src1 Nó là mảng đầu vào đầu tiên. |
2 | alpha Nó là trọng số của các phần tử mảng đầu tiên. |
3 | src2 Đây là mảng đầu vào thứ hai có cùng kích thước và số kênh như src1. |
4 | Beta Nó là trọng số của các phần tử mảng thứ hai. |
5 | gamma Nó là vô hướng được thêm vào mỗi tổng. |
6 | dst Nó là mảng đầu ra có cùng kích thước và số kênh như mảng đầu vào. |
Ngoài phương thức GaussianBlur, còn có các phương thức khác được cung cấp bởi lớp Imgproc. Chúng được mô tả ngắn gọn -
Sr.No. | Phương pháp & Mô tả |
---|---|
1 | cvtColor(Mat src, Mat dst, int code, int dstCn) Nó chuyển đổi một hình ảnh từ không gian màu này sang không gian màu khác. |
2 | dilate(Mat src, Mat dst, Mat kernel) Nó làm giãn hình ảnh bằng cách sử dụng một phần tử có cấu trúc cụ thể. |
3 | equalizeHist(Mat src, Mat dst) Nó cân bằng biểu đồ của một hình ảnh thang độ xám. |
4 | filter2D(Mat src, Mat dst, int depth, Mat kernel, Point anchor, double delta) Nó biến đổi một hình ảnh với hạt nhân. |
5 | GaussianBlur(Mat src, Mat dst, Size ksize, double sigmaX) Nó làm mờ hình ảnh bằng cách sử dụng bộ lọc Gaussian. |
6 | integral(Mat src, Mat sum) Nó tính tích phân của một hình ảnh. |
Thí dụ
Ví dụ sau minh họa việc sử dụng lớp Imgproc và Core để áp dụng độ sắc nét cho hình ảnh:
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.Size;
import org.opencv.highgui.Highgui;
import org.opencv.imgproc.Imgproc;
public class Main {
public static void main( String[] args ) {
try{
System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
Mat source = Highgui.imread("digital_image_processing.jpg",
Highgui.CV_LOAD_IMAGE_COLOR);
Mat destination = new Mat(source.rows(),source.cols(),source.type());
Imgproc.GaussianBlur(source, destination, new Size(0,0), 10);
Core.addWeighted(source, 1.5, destination, -0.5, 0, destination);
Highgui.imwrite("sharp.jpg", destination);
} catch (Exception e) {
}
}
}
Đầu ra
Khi bạn thực thi mã đã cho, kết quả sau sẽ được nhìn thấy: