Gaussian Blur
Gaussian blur là bộ lọc làm mịn ảnh, giúp giảm nhiễu và chi tiết nhỏ bằng cách tính trung bình có trọng số của các pixel trong thị giác máy tính và tiền xử lý.
Gaussian blur là kỹ thuật làm mịn ảnh, thay thế mỗi pixel bằng giá trị trung bình có trọng số của các pixel lân cận, trong đó các pixel gần hơn có ảnh hưởng lớn hơn. Trọng số tuân theo phân phối Gaussian hình chuông, tạo hiệu ứng làm mờ nhẹ giúp giảm nhiễu và chi tiết nhỏ. Kỹ thuật này còn được gọi là làm mịn Gaussian và được sử dụng rộng rãi trong thị giác máy tính và tiền xử lý dữ liệu để chuẩn bị ảnh cho quá trình phân tích.
Cách Gaussian Blur hoạt động#
Bộ lọc di chuyển một lưới trọng số nhỏ, gọi là kernel, trên toàn ảnh. Ở mỗi vị trí, bộ lọc nhân giá trị pixel lân cận với trọng số tương ứng rồi cộng các kết quả. Thao tác này là phép tích chập. Tổng các trọng số bằng một, vì vậy pixel không thay đổi nếu mọi giá trị được kernel lấy mẫu đều có cùng độ sáng. Gaussian blur hoạt động như một bộ lọc thông thấp: nó triệt tiêu các biến thiên nhanh giữa các pixel, bao gồm nhiễu, kết cấu và ranh giới sắc nét.
Hai thiết lập quyết định kết quả. Sigma, độ lệch chuẩn của phân phối Gaussian, kiểm soát độ trải rộng của các trọng số; sigma càng lớn thì mức độ làm mịn càng mạnh. Kích thước kernel xác định phạm vi ảnh xung quanh được đưa vào tính toán. Kernel lớn hơn có thể chứa Gaussian rộng hơn, còn kernel quá nhỏ sẽ cắt cụt phần đuôi của phân phối. Bán kính kernel là khoảng cách từ tâm đến mép kernel: bán kính ba pixel tạo ra kernel rộng bảy pixel.
Ở viền ảnh, một phần kernel nằm ngoài phạm vi pixel hiện có. Phản chiếu ảnh giúp mở rộng nội dung lân cận; điền số 0 vào vùng thiếu sẽ tạo ra các giá trị tối, có thể làm viền ảnh tối đi. Vì vậy, cách xử lý biên làm thay đổi đầu ra sau lọc ở gần các cạnh ảnh.
Ứng dụng trong thị giác máy tính và học máy#
Làm mịn Gaussian hỗ trợ trích xuất đặc trưng bằng cách kiểm soát tỷ lệ không gian dùng để phân tích cấu trúc ảnh. Việc sử dụng đa tỷ lệ bắt nguồn từ công trình về không gian tỷ lệ Gaussian của Taizo Iijima trong giai đoạn 1959–1962, đặt nền tảng cho việc biểu diễn ảnh ở các mức độ làm mờ khác nhau.
Trong triển khai phát hiện biên Canny của scikit-image, làm mịn Gaussian giúp giảm nhiễu trước khi ước lượng gradient bằng toán tử Sobel. Nếu không làm mịn, nhiễu tạo thêm các biến thiên cường độ cạnh tranh với ranh giới đối tượng. Tăng tỷ lệ làm mịn cũng loại bỏ các biên nhỏ, làm thay đổi những đường bao còn lại sau khi phát hiện.
Trong phân đoạn ảnh tài liệu, trung bình cục bộ có trọng số Gaussian hỗ trợ phân ngưỡng thích ứng. Mỗi pixel được gán một ngưỡng tính từ trung bình có trọng số của vùng lân cận trừ đi một độ lệch. Phương pháp này tách văn bản khỏi nền có độ chiếu sáng không đồng đều, như trong phân ngưỡng cục bộ trên trang được quét.
Là một hình thức tăng cường dữ liệu, Gaussian blur tạo ra các phiên bản làm mềm của ảnh huấn luyện đồng thời giữ nguyên tọa độ của bounding box và keypoint. Ultralytics YOLO hỗ trợ A.GaussianBlur thông qua các phép biến đổi Albumentations tùy chỉnh, cho phép quá trình huấn luyện YOLO26 bao gồm các mức độ làm mờ được kiểm soát.
So sánh Gaussian Blur với các bộ lọc khác#
Việc chọn phương pháp làm mịn sẽ quyết định thông tin ảnh nào được giữ lại:
- Mean blur, còn gọi là box blur, gán trọng số bằng nhau cho mọi pixel trong cửa sổ. Gaussian blur ưu tiên các pixel gần hơn, tạo ra giá trị trung bình có trọng số biến thiên mượt hơn.
- Median blur thay thế một pixel bằng giá trị trung vị của vùng lân cận. Phương pháp này đặc biệt hiệu quả với nhiễu muối tiêu: các pixel sáng và tối riêng lẻ.
- Lọc song phương sử dụng cả khoảng cách không gian lẫn độ tương đồng cường độ để giảm nhiễu mà vẫn giữ được các ranh giới sắc nét. Gaussian blur chỉ gán trọng số theo vị trí, nên cũng làm mềm các cạnh.
Áp dụng Gaussian Blur trong Python#
OpenCV cung cấp cv2.GaussianBlur để làm mịn Gaussian. Cài đặt package Python bằng pip install opencv-python, sau đó lưu ảnh so sánh đặt cạnh nhau:
from urllib.request import urlopen
import cv2
import numpy as np
with urlopen("https://ultralytics.com/images/bus.jpg") as response:
image_bytes = np.frombuffer(response.read(), dtype=np.uint8)
image = cv2.imdecode(image_bytes, cv2.IMREAD_COLOR)
blurred = cv2.GaussianBlur(image, (15, 15), sigmaX=3)
comparison = cv2.hconcat([image, blurred])
cv2.imwrite("gaussian_blur_comparison.jpg", comparison)Ảnh đã lưu đặt ảnh gốc ở bên trái và kết quả đã làm mịn ở bên phải. Kernel 15 x 15 sử dụng sigma ba pixel theo cả hai hướng vì sigmaY bị lược bỏ sẽ nhận giá trị của sigmaX.
Các kernel Gaussian có thể phân tách: bộ lọc một chiều theo chiều ngang và chiều dọc tạo ra hiệu ứng làm mờ hai chiều tương ứng. Với kernel 7 x 7, cách này giảm số hạng đóng góp của trọng số kernel trên mỗi pixel từ 49 xuống còn 14.










