ảnh xám là gì Update 01/2025

Giới thiệu và chi tiết các thuật toán Grayscale, ảnh nhị phân và một số thuật toán giúp biến đổi một ảnh xám thành ảnh nhị phân (Adaptive threshold).

Bạn đang xem: ảnh xám là gì

*

*

Chuyển đổi hệ thống màu RGB sang Grayscale

Ảnh là tập hợp của 1 ma trận điểm ảnh (pixel), mỗi điểm ảnh có thể được biểu diễn bằng n bytes dưới các kênh màu khác nhau. Việc chuyển đổi giữa các hệ màu thông thường được thực hiện thông qua các phép biến đổi ma trận.

Bài viết sẽ giới thiệu cách chuyển đổi từ ảnh 24 bits RGB sang ảnh 8 bits Grayscale.

Công thức

Công thức tính cường độ sáng tại 1 điểm ảnh từ ảnh RGB:

I(x, y) = 0.3086 * Red(x, y) + 0.6094 * Green(x, y) + 0.0820 * Blue(x, y) I(x, y) = 0.299 * Red(x, y) + 0.587 * Green(x, y) + 0.114 * Blue(x, y)Hoặc

I(x, y) = ( 2 * Red(x, y) + 5 * Green(x, y) + 1 * Blue(x, y) ) / 8 Phân tích

I(x, y): cường độ sáng tại điểm ảnh (x, y) của ảnh xám.Red(x, y): giá trị của kênh màu Red (Đỏ) tại điểm ảnh (x, y) của ảnh màu (RGB).Green(x, y): giá trị của kênh màu Green (Xanh lá cây) tại điểm ảnh (x, y) của ảnh màu (RGB).Blue(x, y): giá trị của kênh màu Blue (Xanh lơ) tại điểm ảnh (x, y) của ảnh màu (RGB).

Chú ý

Các phép toán trong số nguyên (Int) nhanh hơn rất nhiều trong số thực (Float).Trong OpenCV, hệ thống màu có thứ tự các kênh màu là Blue-Green-Red. Các thông số dùng để tính toán cường độ sáng cho ảnh xám như: 0.3086, 0.6094, 0.0820,… được coi là những con số đẹp do người ta nghiên cứu ra. Các con số này có thể thay đổi. Có thể chọn 1 giá trị 1 kênh màu hoặc chia trung bình cộng của 3 kênh màu để tìm cường độ sáng tại 1 điểm ảnh (Pixel).

Chuyển đổi ảnh xám trong OpenCV

Phương thức cvtColor

Trong OpenCV, để chuyển 1 tấm ảnh có hệ màu RGB sang Grayscale, hay thậm chí là các không gian màu qua lại với nhau nhờ phương thức cvtColor() (Convert color). 

cv::cvtColor(cv::InputArray src, cv::OutputArray dst, int code)Phân tích

src: Là hình ảnh gốc (Trong bài viết này là ảnh màu).dst: Là ảnh thu được (Trong bài viết này là ảnh xám).code: Là mã chuyển màu. Ví dụ: code = CV_BGR2GRAY là chuyển đổi ảnh màu thành ảnh xám,…Code minh hoạ phương thức cvtColor trong OpenCV

// www.gocnhintangphat.com// www.gocnhintangphat.com/users/index/11/truong-dat#include #include “opencv2/core/core.hpp”#include “opencv2/highgui/highgui.hpp”#include “opencv2/imgproc/imgproc.hpp”using namespace cv;int main(){// Read imageMat image = imread(“gocnhintangphat.com.png”, CV_LOAD_IMAGE_COLOR);Mat imageGrayscale;// Check for validif (!image.data){printf(“Could not open or find the imagen”);return -1;}cvtColor(image, imageGrayscale, CV_BGR2GRAY);// Create and show image in windowimshow(“gocnhintangphat.com OpenCV Sample”, imageGrayscale);// Wait input and exitwaitKey(0);return 0;}

*

Ảnh nhị phân

Là ảnh mà giá trị của các điểm ảnh chỉ được biểu diễn bằng hai giá trị là 0 (Đen) và 255 (Trắng) (Tương ứng với 0 và 1, nhưng để nguyên giá trị 0 và 255 để có thể hiểu hơn trong việc tính toán).Vì giá trị của điểm ảnh được biểu diễn bởi 2 giá trị là 0 hoặc 1, nên 1 điểm ảnh được biểu diễn bằng 1 bit nên ảnh có kích thước rất nhỏ.

Xem thêm: Ssd Msata Là Gì – Khác Gì Với Msata, M2 Pcle, Ssd 2

Nhị phân hóa

Là quá trình biến đổi 1 ảnh xám thành ảnh nhị phân.Gọi giá trị cường độ sáng tại 1 điểm ảnh là I(x,y) .INP(x,y) là cường độ sáng của điểm ảnh trên ảnh nhị phân .(Với 0 ) và (0 ).

Để biến đổi ảnh xám thành ảnh nhị phân. So sánh giá trị cường độ sáng của điểm ảnh với 1 ngưỡng nhị phân T. 

Nếu I(x,y) > T thì INP(x, y) = 0 (0).Nếu I(x,y) > T thì INP(x, y) = 255 (1).

Chú ý

Có thể chọn giá trị T từ 0 đến 255, nhưng thông thường nhiều người hay chọn 1 giá trị đó là 128 tức là giá trị trung bình của max(255) và min(0) của cường độ sáng (Intensity) của điểm ảnh.Dễ dàng nhận thấy với mỗi T thì có 1 ảnh nhị phân khác nhau (Khác nhau ở đây là cường độ sáng của các tấm ảnh nhị phân với mỗi giá trị T).

Xem thêm: Nghĩa Của Từ Struggling Là Gì ? Nghĩa Của Từ Struggle

Có 1 kỹ thuật gọi là nhị phân hóa ngưỡng động giúp thu được ảnh nhị phân mà không quan tâm tới cường độ sáng.

Chuyên mục: Định Nghĩa