Mẹo Hay

Gaussian Blur Là Gì

Lọc ảnh (làm mịn ảnh, làm mượt ảnh) là một bước rất quan trọng trong xử lý ảnh. Lọc ảnh thực tế có rất nhiều tác dụng như loại bỏ nhiễu, tìm biên đối tượng. Bài viết này sẽ giới thiệu nguyên tắc chung của lọc ảnh và một số phép lọc ảnh cơ bản.

Bạn đang xem: Gaussian Blur Là Gì

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

A. Nguyên tắc chung của lọc ảnh

Nguyên tắc chung của các phương pháp lọc là cho ma trận ảnh nhân với một ma trận lọc (Kernel). Ma trận lọc lọc (Kernel) còn có thể được gọi là cửa số chập (trong phép nhân chập), cửa sổ lọc, mặt nạ,… Trong bài viết này tôi sử dụng thuật ngữ ma trận lọc (Kernel).

Việc nhân ảnh với ma trận lọc giống như việc trượt ma trận lọc theo hàng trên ảnh và nhân với từng vùng của ảnh, cộng các kết quả lại tạo thành kết quả của điểm ảnh trung tâm.

Xem thêm: Jual Kinect Game Murah – Manage Your Xbox 360 Game Library

*
*
*
*
*
*
*
*
*

Vấn đề quan trọng khi lập trình với Python – OpenCV:

Trong ví dụ cuối, kiểu dữ liệu đầu ra là cv.CV_8U hay np.uint8. Có một vấn đề với nó. Các chuyển dịch từ đen sang trắng (sự chuyển màu trên ảnh) có hệ số góc dương, các chuyển đổi từ trắng sang đen lại có hệ số góc âm. Do vậy, khi bạn chuyển dữ liệu sang np.uint8, các hệ số góc âm sẽ được chuyển thành 0. Do vậy bạn mất các cạnh ở chỗ màu sắc chuyển từ đen sang trắng.

Để nhận tất cả các đường biên, bạn phải chuyển kết quả sang kiểu cv.CV_16S, cv.CV_64F, hoặc một kiểu khác lưu trữ lớn hơn np.uint8, lấy giá trị tuyệt đối và chuyển lại về np.uint8.

Xem thêm: Bảng Kí Tự Đặc Biệt Pubg Mobile ¤Ï¸Â¤Ï¸Â¤Ï¸ CãCh ĐÁ»”I TãŠN Pubg ĐÁº¸P

Đoạn code dưới đây sẽ mô tả quá trình thực hiện. Ảnh đầu vào là một hình chữ nhật trắng trên nền đen. Ta thực hiện việc tìm cạnh theo chiều ngang (lấy các cạnh dọc). Nếu sử dụng kiểu dữ liệu np.uint8, cạnh bên phải bị mất (do cạnh đó được hình thành bởi sự chuyển dịch màu trắng -> đen). Để có cả 2 cạnh, ta phải làm như cách đã nêu trên.

1import numpy as np 2import cv2 as cv 3from matplotlib import pyplot as plt 4img = cv.imread(‘box.png’,0) 5# Output dtype = cv.CV_8U 6sobelx8u = cv.Sobel(img, cv.CV_8U, 1,0, ksize=5) 7# Output dtype = cv.CV_64F. Then take its absolute and convert to cv.CV_8U 8sobelx64f = cv.Sobel(img, cv.CV_64F, 1,0, ksize=5) 9abs_sobel64f = np.absolute(sobelx64f)10sobel_8u = np.uint8(abs_sobel64f)11plt.subplot(1, 3, 1), plt.imshow(img, cmap = ‘gray’)12plt.title(‘Original’), plt.xticks(), plt.yticks()13plt.subplot(1, 3, 2), plt.imshow(sobelx8u, cmap = ‘gray’)14plt.title(‘Sobel CV_8U’), plt.xticks(), plt.yticks()15plt.subplot(1, 3, 3), plt.imshow(sobel_8u, cmap = ‘gray’)16plt.title(‘Sobel abs(CV_64F)’), plt.xticks(), plt.yticks()17plt.show()

Chuyên mục: Review

Rate this post

Random Posts

Post Comment