Môi trường "hành sự" Linux (bài viết sử dụng Ubuntu 16.04) OpenCV (bài viết áp 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ề:


Bạn đang xem: Gaussian blur là gì

*

Ảnh nơi bắt đầu rõ lắm, mà lại mình cố tình tạo test thách bằng cách thêm nhiễu để có loại để làm mang đến mấy bộ làm mờ chứ :P


*

Hiệu ứng làm cho mờ ảnh

Khi nhắc tới việc làm mờ hình ảnh, bạn sẽ nghĩ ngay đến việc tại mình đề nghị làm điều đó? Ảnh đã rõ vậy có tác dụng mờ bỏ ra cho cạnh tranh nhìn ta?!

Thực ra trong cách xử lý ảnh, phép có tác dụng mờ ảnh được dùng tương đối nhiều và có khá nhiều vai trò quan tiền trọng. Hiệu ứng làm mờ mang về (áp dụng trong số trường hợp):

Giảm nhiễu (noise) trong ảnhLàm trơn ảnh (smooth). Việc làm trơn hình ảnh sẽ giảm sắc nét của cạnh, cố vào đó, vùng trơn đang lan ra

Trong những bài báo về giải pháp xử lý ảnh, ở bước tiền xử lý họ hay sử dụng 2 phép đổi khác sau:

Cân bằng sángLàm mờ

Kích thước cửa ngõ sổ của những bộ lọc làm thường là SỐ LẺ NGUYÊN DƯƠNG (3, 5, 7, 9, …). Bởi vì kích thước lẻ phải ta đã chỉ có 1 pixel ở chính giữa kernel, điều này tránh câu hỏi ta phải đắn đo nên lấy pixel trái hay bắt buộc làm px trung trọng tâm NẾU size bộ lọc là số chẵn!

Việc chọn kích cỡ bộ lọc thường nhờ vào kích thước ảnh đầu vào với kinh nghiệm. Kernel thường có phong cách thiết kế hình vuông (tức width = height)

Tính toán giải pháp xử lý cho phép thay đổi làm mờ hình ảnh chính là sử dụng toán tử convolution để áp cửa sổ / bộ lọc lên hình ảnh gốc.Bạn đã xem: Gaussian blur là gì

Tiếp theo, mình sẽ giới thiệu 3 bộ làm mờ bớt nhiễu phổ biến: Box Filter, Gaussian Filter và Median Filter

box_blur.py

import osimport cv2INPUT = "girl_luv.jpg"KERNEL_WIDTH = 3KERNEL_HEIGHT = 3if 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.boxFiltercv2.imwrite("box_blur_%s_%d_%d.jpg" % (os.path.splitext(os.path.basename(INPUT)), KERNEL_WIDTH, KERNEL_HEIGHT), blur_img)

Xem thêm: Kỹ Năng Thuyết Trình Là Gì ? Những Điều Bạn Cần Biết Về Thuyết Trình

*

Hãy thử thay đổi các hằng số vào code nhằm trải nghiệm các mức độ có tác dụng mờ không giống nhau nhé:

gaussian_blur.py

import osimport cv2INPUT = "girl_luv.jpg"KERNEL_WIDTH = 9KERNEL_HEIGHT = 9SIGMA_X = 4SIGMA_Y = 4if 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)), KERNEL_WIDTH, KERNEL_HEIGHT, SIGMA_X, SIGMA_Y), blur_img)

*

Hãy thử biến đổi các hằng số trong code nhằm trải nghiệm những mức độ có tác dụng mờ khác nhau nhé:

KERNEL_WIDTHKERNEL_HEIGHTSIGMA_XSIGMA_YBộ lọc có tác dụng mờ trung vị (Median Filter)Trung vị (median) là ta lôi ra giá trị trung vị sau khi sắp vật dụng tự dãy số. Ví dụ: median() = 6. Giải: sau khi sắp lắp thêm tự hàng , ta được => số chính giữa dãy đã sắp thứ trường đoản cú là 6.Rất kết quả với nhiễu muối bột tiêu (tức nhiễu các hạt nhỏ tuổi trong ảnh).Trong OpenCV, thông số cho bộ lọc trung vị chỉ bao gồm KERNEL_SIZE (không mang lại đặc tả Width / Height) và nên là số lẻ.

median_blur.py

import osimport cv2INPUT = "girl_luv.jpg"KERNEL_SIZE = 9if 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)), KERNEL_SIZE), blur_img)

*

Hãy thử chuyển đổi các hằng số trong code để trải nghiệm các mức độ có tác dụng mờ không giống nhau nhé: