Mức xám của ảnh là gì

  -  
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: Mức xám của ảnh là gì

Bạn đang xem: Mức xám của ảnh 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).

Xem thêm: Kinh Nghiệm Đi Du Lịch Tự Túc Lào Tự Túc Cực Rẻ, Cực Chất, Kinh Nghiệm Du Lịch Lào Tự Túc

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.nethuerestaurant.com.vn// www.nethuerestaurant.com.vn/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("nethuerestaurant.com.vn.png", CV_LOAD_IMAGE_COLOR);Mat imageGrayscale;// Check for validif (!image.data){printf("Could not open or find the image\n");return -1;}cvtColor(image, imageGrayscale, CV_BGR2GRAY);// Create and show image in windowimshow("nethuerestaurant.com.vn OpenCV Sample", imageGrayscale);// Wait input and exitwaitKey(0);return 0;}

*

Ảnh nhị phân

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: Xe Đạp Bmx Là Gì Xịn - Một Số Hình Ảnh Của Bmx

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.