Xử Lý ảnh - Làm Mờ ảnh (blur) - Minh Nguyen
Có thể bạn quan tâm
- Linux (bài viết sử dụng Ubuntu 16.04)
- OpenCV (bài viết sử dụng OpenCV 3.4.1)
- Python (bài viết sử dụng Python 3.5.5)
- Ảnh mẫu để xử lý: girl_luv.jpg
Bạn có thể download ảnh mẫu về:
girl_luv.jpg (Nguồn: bí mật không thể bật mí :v)
Ảnh gốc rõ lắm, nhưng mình cố tình tạo thử thách bằng cách thêm nhiễu để có cái để làm cho mấy bộ làm mờ chứ :P
Hiệu ứng làm mờ ảnhKhi nhắc đến việc làm mờ hình ảnh, bạn sẽ nghĩ ngay đến việc tại mình phải làm điều đó? Ảnh đang rõ vậy làm mờ chi cho khó nhìn ta?!
Thực ra trong xử lý ảnh, phép làm mờ ảnh được dùng rất nhiều và có nhiều vai trò quan trọng. Hiệu ứng làm mờ mang lại (áp dụng trong các trường hợp):
- Giảm nhiễu (noise) trong ảnh
- Làm trơn ảnh (smooth). Việc làm trơn ảnh sẽ giảm sắc nét của cạnh, thay vào đó, vùng trơn sẽ lan ra
Trong các bài báo về xử lý ảnh, ở bước tiền xử lý họ hay dùng 2 phép biến đổi sau:
- Cân bằng sáng
- Làm mờ
Kích thước cửa sổ của các bộ lọc làm thường là SỐ LẺ NGUYÊN DƯƠNG (3, 5, 7, 9, …). Chính vì kích thước lẻ nên ta sẽ chỉ có 1 pixel ở trung tâm kernel, điều này tránh việc ta phải phân vân nên lấy pixel trái hay phải làm pixel trung tâm NẾU kích thước bộ lọc là số chẵn!
Việc chọn kích thước bộ lọc thường dựa vào kích thước ảnh đầu vào và kinh nghiệm. Kernel thường được thiết kế hình vuông (tức width = height)
Tính toán xử lý cho phép biến đổi làm mờ ảnh chính là dùng toán tử convolution để áp cửa sổ / bộ lọc lên ảnh gốc.
Tiếp theo, mình sẽ giới thiệu 3 bộ làm mờ giảm nhiễu phổ biến: Box Filter, Gaussian Filter và Median Filter
Bộ lọc mờ trung bình (Box Filter)- Bộ lọc làm mờ trung bình được thiết kế bằng cách thiết lập mỗi giá trị trên bộ lọc bằng: 1/(W*H).
- Tức là nếu Width và Height của bộ lọc bằng 3. Thì giá trị trên cửa sổ convolve sẽ là: 1/9.
box_blur.py
import os import cv2 INPUT = 'girl_luv.jpg' KERNEL_WIDTH = 3 KERNEL_HEIGHT = 3 if not os.path.isfile(INPUT): raise Exception('File not found @ %s' % INPUT) img = cv2.imread(INPUT) blur_img = cv2.blur(img, ksize=(KERNEL_WIDTH, KERNEL_HEIGHT)) # or cv2.boxFilter cv2.imwrite('box_blur_%s_%d_%d.jpg' % (os.path.splitext(os.path.basename(INPUT))[0], KERNEL_WIDTH, KERNEL_HEIGHT), blur_img)Hãy thử thay đổi các hằng số trong code để trải nghiệm các mức độ làm mờ khác nhau nhé:
- KERNEL_WIDTH
- KERNEL_HEIGHT
- Công thức Gaussian: https://docs.opencv.org/2.4/doc/tutorials/imgproc/gausian_median_blur_bilateral_filter/gausian_median_blur_bilateral_filter.html#gaussian-filter
- Ngoài kích thước cửa sổ, bộ lọc Gaussian còn cho phép thiết lập thêm 2 tham số là: Sigma X và Sigma Y, tức độ lệch chuẩn theo trục x và trục y tương ứng.
gaussian_blur.py
import os import cv2 INPUT = 'girl_luv.jpg' KERNEL_WIDTH = 9 KERNEL_HEIGHT = 9 SIGMA_X = 4 SIGMA_Y = 4 if not os.path.isfile(INPUT): raise Exception('File not found @ %s' % INPUT) img = cv2.imread(INPUT) blur_img = cv2.GaussianBlur(img, ksize=(KERNEL_WIDTH, KERNEL_HEIGHT), sigmaX=SIGMA_X, sigmaY=SIGMA_Y) cv2.imwrite('gaussian_blur_%s_%d_%d_%d_%d.jpg' % (os.path.splitext(os.path.basename(INPUT))[0], KERNEL_WIDTH, KERNEL_HEIGHT, SIGMA_X, SIGMA_Y), blur_img)Hãy thử thay đổi các hằng số trong code để trải nghiệm các mức độ làm mờ khác nhau nhé:
- KERNEL_WIDTH
- KERNEL_HEIGHT
- SIGMA_X
- SIGMA_Y
- Trung vị (median) là ta lấy ra giá trị trung vị sau khi sắp thứ tự dãy số. Ví dụ: median([6, 8, 11, 4, 1]) = 6. Giải: sau khi sắp thứ tự dãy [6, 8, 11, 4, 1], ta được [1, 4, 6, 8, 11] => số ở giữa dãy đã sắp thứ tự là 6.
- Rất hiệu quả với nhiễu muối tiêu (tức nhiễu các hạt nhỏ trong ảnh).
- Trong OpenCV, tham số cho bộ lọc trung vị chỉ có KERNEL_SIZE (không cho đặc tả Width / Height) và phải là số lẻ.
median_blur.py
import os import cv2 INPUT = 'girl_luv.jpg' KERNEL_SIZE = 9 if not os.path.isfile(INPUT): raise Exception('File not found @ %s' % INPUT) img = cv2.imread(INPUT) blur_img = cv2.medianBlur(img, KERNEL_SIZE) cv2.imwrite('median_blur_%s_%d.jpg' % (os.path.splitext(os.path.basename(INPUT))[0], KERNEL_SIZE), blur_img)Hãy thử thay đổi các hằng số trong code để trải nghiệm các mức độ làm mờ khác nhau nhé:
- KERNEL_SIZE
Cảm ơn bạn đã theo dõi bài viết. Hãy kết nối với tớ nhé!
- Minh: https://www.facebook.com/minhng.info
- Khám phá xử lý ảnh - GVGroup: https://www.facebook.com/groups/ip.gvgroup
Khám phá xử lý ảnh - GVGroup
Danh sách bài viết series OpenCV:
- Hashtag #OpenCV
- Tut 1: Xử lý ảnh - OpenCV đọc ghi hình ảnh (code Python và C++)
- Tut 1.1: Xử lý ảnh - Cấu trúc dữ liệu ảnh trong OpenCV. Pixel là gì?
- Tut 1.2: Xử lý ảnh - Chuyển đổi ảnh OpenCV sang Pillow và ngược lại
- Tut 2: Xử lý ảnh - OpenCV resize, crop và padding hình ảnh (code Python và C++)
- Tut 3: Xử lý ảnh - OpenCV biến đổi mức sáng hình ảnh (code Python)
- Tut 4: Xử lý ảnh - OpenCV vùng quan tâm (ROI) là gì? (code Python)
- Tut 4.1: Xử lý ảnh - OpenCV: vẽ văn bản, đường thẳng, mũi tên, hình chữ nhật, hình tròn, ellipse, đa giác
- Tut 4.2: Xử lý ảnh - Pha trộn ảnh trong OpenCV (blending)
- Tut 5: Xử lý ảnh - OpenCV ảnh nhị phân
- Tut 6: Xử lý ảnh - OpenCV cân bằng sáng (histogram equalization)
- Tut 7: Xử lý ảnh - OpenCV kỹ thuật cửa sổ trượt (sliding window)
- Tut 8: Xử lý ảnh - Convolution là gì?
- Tut 9: Xử lý ảnh - Làm mờ ảnh (blur)
- Tut 10: Xử lý ảnh - Gradient của ảnh là gì?
- Tut 11: Xử lý ảnh - Phát hiện cạnh Canny (Canny Edge Detection)
- Tut 12: Xử lý ảnh - Phát hiện đường thẳng bằng Hough Transform (Hough Line)
- Tut 13: Xử lý ảnh - Hiện thực phát hiện đoạn thẳng dùng Hough Transform (Hough Line)
- Tut 14: Xử lý ảnh - Giải thuật phân vùng Region Growing trên ảnh màu
- Tut 15: Xử lý ảnh - Giải thuật Background Subtraction trên ảnh màu
- Tut 16: Xử lý ảnh - Frame Subtraction để phát hiện chuyển động trong video
- Tut 17: Xử lý ảnh - HOG - Histograms of Oriented Gradients
- Tut 18: Xử lý ảnh - HOG - Huấn luyện mô hình phân loại người
- Tut 19: Xử lý ảnh - HOG - Phát hiện người
- Tut 20: Xử lý ảnh - Tổng hợp kinh nghiệm xử lý ảnh (End)
- Tut 21: Xử lý ảnh - Hiện thực trích đặc trưng Local Binary Patterns (LBP)
- Tut 22: Xử lý ảnh - Trích đặc trưng Gabor filters
Từ khóa » Bộ Lọc Gaussian Blur
-
Thêm Bộ Lọc Gaussian Blur Vào ảnh - Aspose Products
-
Gaussian Blur Là Gì - Tìm Hiểu Chi Tiết Tính Năng Blur Trong ...
-
Gaussian Blur Là Gì - Tìm Hiểu Chi Tiết Tính Năng Blur Trong ...
-
Cải Thiện ảnh Bằng Bộ Lọc Gauss - Tài Liệu Text - 123doc
-
Bộ Lọc Blur Trong Filter Của Photoshop CS6 (phần 2)
-
OpenCV Gaussian Blur - W3seo Làm Mờ Là Kỹ Thuật Quan Trọng ...
-
Các Bộ Lọc_phép Biến đổi ảnh Trong Xử Lý ảnh
-
Bộ Lọc Gaussian
-
Gaussian Blur Là Gì ? Tìm Hiểu Chi Tiết Tính Năng Blur Trong ...
-
Gaussian Blur Là Gì - Vietvuevent
-
Tuần 4: Spatial Filtering - Các Phép Lọc Trong Không Gian điểm ảnh
-
Cách Sử Dụng Gaussian Blur Trong Photoshop để Làm Mờ ảnh
-
Lọc Gaussian - Giao Diện Đơn Giản: Qt + OpenCV — Computer Vision
-
2022 Gaussian Blur Là Gì - Tìm Hiểu Chi Tiết Tính Năng Blur Trong ...
-
Làm Mờ ảnh (blur) - Trangwiki
-
Bộ Lọc Filter Blur Trong Photoshop (Phần 2)