Xử Lý ảnh - Gradient Của ảnh Là Gì? - 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_10.jpg
Bạn có thể download ảnh mẫu về:
girl_10.jpg (Nguồn: Lụm trên mạng)

Trước tiên ta phải dịch từ Gradient trong tiếng Anh là gì đã, gradient nghĩa là độ dốc. Trong xử lý ảnh, độ dốc (tức gradient) đang nói đến ở đây chính là độ dốc về mức sáng. Hay nói cách khác chính là sự thay đổi các giá trị pixel trong ảnh.
Vùng ảnh trơn (smooth) thì các pixel trong vùng ảnh đó có giá trị xấp xỉ / gần bằng nhau, vì vậy khi tính toán đạo hàm sẽ gần bằng zero. Đạo hàm bằng 0 thể hiện không có biến thiên về giá trị (mức sáng) (tham khảo bài viết Ý nghĩa Đạo Hàm). Điều này có nghĩa là độ dốc của các pixel trong vùng ảnh trơn gần bằng zero. Đạo hàm dương tại một pixel thể hiện rằng biến thiên mức sáng đang ở chiều hướng đi lên, ngược lại đạo hàm âm tại một pixel cho biết biên thiên mức sáng tại đó đang giảm dần. Nói tóm gọn lại gradient của ảnh chính là đạo hàm ảnh.
Bộ lọc Laplacian và SobelHai bộ lọc phổ biến để tính gradient của ảnh là bộ lọc Laplacian và Sobel.
- Công thức Laplacian kernel
- Công thức Sobel kernel
OpenCV cũng đã hiện thực các hàm filter tính gradient cho Sobel và Laplacian, tài liệu:
- cv2.Laplacian
- cv2.Sobel
gradient.py
import cv2 import numpy as np def scale_to_0_255(img): min_val = np.min(img) max_val = np.max(img) new_img = (img - min_val) / (max_val - min_val) # 0-1 new_img *= 255 return new_img img = cv2.imread('girl_10.jpg',0) laplacian = cv2.Laplacian(img, cv2.CV_64F) sobelx = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=3) sobely = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=3) sobelxy = cv2.Sobel(img, cv2.CV_64F, 1, 1, ksize=3) print('[Before Scale] laplacian image min-max:', np.min(laplacian), '-', np.max(laplacian)) cv2.imwrite('before_scale-laplacian.jpg', laplacian) cv2.imwrite('before_scale-sobelx.jpg', sobelx) cv2.imwrite('before_scale-sobely.jpg', sobely) cv2.imwrite('before_scale-sobelxy.jpg', sobelxy) laplacian = scale_to_0_255(laplacian) sobelx =scale_to_0_255(sobelx) sobely = scale_to_0_255(sobely) sobelxy = scale_to_0_255(sobelxy) print('[After Scale] laplacian image min-max:', np.min(laplacian), '-', np.max(laplacian)) cv2.imwrite('laplacian.jpg', laplacian) cv2.imwrite('sobelx.jpg', sobelx) cv2.imwrite('sobely.jpg', sobely) cv2.imwrite('sobelxy.jpg', sobelxy)Lưu rằng sau khi áp dụng toán tử convolution, miền giá trị của các pixel có thể vượt ngưỡng 0-255. Do đó, ta cần scale miền giá trị về 0-255 để có thể visualize dưới dạng ảnh. Một số bạn không chú ý có thể bỏ lỡ điều này.

Với đoạn kết trên ta có thể visualize ảnh gradient sau khi áp dụng các bộ lọc. Kernel size cũng có ảnh hưởng đến kết quả ảnh sau khi convolve. Điều chỉnh kích thước của kernel size cần phù hợp với độ phân giải ảnh đầu vào.
Ảnh gradient có tác dụng là nổi rõ cạnh trong ảnh.
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 Sobel Là Gì
-
Bộ Lọc Sobel Là Gì - Cùng Hỏi Đáp
-
Lọc ảnh (Image Filtering) - AICurious
-
Thực Hiện Bộ Lọc Sobel-Lập Trình Python-xử Lý ảnh Y Tế
-
Thêm Bộ Lọc Sobel Vào ảnh
-
Kỹ Thuật Lọc Ảnh Với OpenCV Trong C++ Cho Beginner - CodeLearn
-
Tìm Biên Ảnh Dễ Dàng Với Bộ Lọc Canny - CodeLearn
-
Tuần 5: Gradient And Edge. - Viblo
-
Matlab Trong Xử Lý ảnh: Bộ Lọc đạo Hàm để Phát Hiện Cạnh Biên(p2)
-
[PPT] Edge Detection (Phát Hiện Biên Trong ảnh)
-
[PDF] So Sánh Một Số Phương Pháp Phát Hiện Biên - VNU Journal Of Science
-
[PPT] 3.2.1. Kỹ Thuật Phát Hiện Biên Gradient
-
Image-processing — Xử Lý ảnh - Thực Hiện Bộ Lọc Sobel
-
Các Bộ Lọc_phép Biến đổi ảnh Trong Xử Lý ảnh
-
Các Phương Pháp Phát Hiện Và Tách Biên ảnh Trong Xử Lý ảnh Số
-
[PDF] Đề Tài: Tìm Hiểu Phƣơng Pháp Phát Hiện Biên Cho ảnh đa Cấp Xám ...
-
Bài Tập Lớn Tìm Hiểu ứng Dụng Phương Pháp Lọc Canny để Phát Hiện...