Ảnh số trong máy tính
Hãy quan sát tấm ảnh dưới đây (Hình 6).
Hình 6 là một tấm ảnh với vài bông hoa màu vàng, những bông
hoa trông rất tự nhiên và tròn trịa. Tuy nhiên, khi được lưu trữ hoặc hiển thị
trong máy tính, chúng chỉ là các con số. Vậy, bản chất của ảnh số là gì?
Hãy quan sát phần chính giữa của bông hoa phía trên, góc
trái. Ở giữa bông hoa có một vùng màu xanh nhỏ, ở giữa vùng màu xanh nhỏ có một
chấm màu trắng. Nếu phóng lớn vùng đó lên 10 lần bạn sẽ thấy nó giống như Hình
7.
Quan sát kĩ Hình 7, sẽ thấy bức ảnh được ghép bởi rất nhiều
các hình vuông nhỏ. Các hình vuông nhỏ này người ta gọi là pixel (picture
element: điểm ảnh hay phần tử ảnh). Như vậy, mỗi pixel là một hình vuông. Kích
thước của một pixel khá nhỏ, khoảng 100pixel/1 inch.
Mỗi pixel sẽ mang một màu duy nhất. Nhìn qua sẽ thấy tấm ảnh
ở Hình 7 rất xấu và thô. Tuy nhiên, do kích thước của pixel rất nhỏ nên khi
nhìn ở tấm ảnh gốc (Hình 6), bạn sẽ thấy nó rất giống bông hoa thật.
Để tính được số pixel của một tấm ảnh, đơn giản chỉ việc lấy
kích thước của chiều rộng (tính bằng pixel) nhân với kích thước của chiều cao
(tính bằng pixel).
Ví dụ: một tấm ảnh có kích thước 800 pixel x 600 pixel, thì
tổng số pixel của tấm ảnh sẽ là 480 000 pixel.
Chắc bạn đã từng nghe tới thuật ngữ megapixel, một megapixel
bằng 1 000 000 pixel. Megapixel được sử dụng để nói về kích thước của một tấm
ảnh.
Hiện nay, một máy chụp hình, thậm chí một máy điện thoại có
thể chụp được các tấm ảnh có kích thước 5, 10, thậm chí 20 megapixel.
Điểm ảnh (pixel)
Hình 8 dưới đây là một phần rất nhỏ của một tấm ảnh, như
vậy, một tấm ảnh là một lưới các pixel (còn gọi là lưới điểm), mỗi pixel là một
hình vuông mang một màu duy nhất.
Mỗi pixel có một tọa duy nhất để phân biệt với các pixel
khác trên một tấm ảnh. Để xác định tọa độ, người ta xây dựng hệ trục tọa độ gồm
trục x và trục y. Trục x ứng với cạnh nằm ngang của tấm ảnh, được đánh số từ 0
và tăng dần từ trái sang phải. Trục y ứng với cạnh đứng của tấm ảnh được đánh
số từ 0 và tăng dần từ trên xuống dưới.
Ví dụ, pixel phía trên cùng, bên trái, sẽ có tọa độ là (0,0);
tức là x = 0 và y = 0. Pixel bên cạnh sẽ có tọa độ là x = 1, y = 0.
Vì vậy, một pixel bất kì luôn luôn có một cặp số (x,y) để
xác định vị trí duy nhất của pixel đó so với các pixel còn lại của tấm ảnh.
Mã hóa màu sắc cho pixel
Vào những năm 1600, Newton
đã thực hiện một thí nghiệm nổi tiếng. Ông ta cho ánh sáng trắng đi qua một lăng
kính tam giác. Lăng kính sẽ chia ánh sáng thành một phổ màu liên tục (Hình 9).
Thí nghiệm này chứng tỏ rằng, ánh sáng trắng không phải là
một thứ đồng nhất, không thể chia tách. Ngược lại, nó có thể được chia thành
các màu riêng biệt, trông giống với hình ảnh của cầu vồng. Gồm các màu: đỏ,
cam, vàng, lục (xanh lục), lam (xanh lam), chàm, tím.
Các bạn có thể liên tưởng các dải màu này tương tự như bảng
màu trong máy tính. Trong máy tính, người ta sử dụng 3 màu cơ bản là: đỏ (red),
lục (green) và lam (blue) để tạo ra các màu còn lại (Hình 10[1]).
Quay trở lại thí nghiệm ở Hình 9, nếu cho ánh sáng trắng đi
qua lăng kính sẽ được một dải màu liên tục. Vậy nếu chúng ta cho một dải màu
liên tục như vậy đi ngược lại qua lăng kính thì chúng ta có thu được ánh sáng
trắng không? Về mặt thực nghiệm có thể không đạt được hoàn toàn. Tuy nhiên, đây
là một gợi ý về cách thức tách màu và tổng hợp màu trong máy tính.
Chuyện vui về màu chàm (indigo): thực tế bạn rất khó phân
biệt được cái màu nằm giữa màu lam (blue) và màu tím (violet). Nếu cần thiết
phải đặt cho vùng màu đó một cái tên thì đặt, còn nếu không, bạn có thể gọi nó
là màu lam cũng được. Lý do có màu chàm là: vào những năm 1600, Newton và mọi người đều tin vào một số điều huyền bí, cụ
thể, ở thời điểm này con người đã biết về bảy hành tinh, và Newton cũng muốn số màu trong quang phổ của
mình cũng trùng với con số bảy này, nên việc bổ sung thêm màu chàm chỉ nhằm mục
đích đạt được con số bảy.
Mô hình màu RGB (RGB scheme)
RGB là một trong những mô hình màu được sử dụng để mã hóa một màu cụ thể. RGB là viết tắt của ba từ: Red, Green và Blue.
Thực tế, màu của mỗi điểm ảnh trên màn hình máy tính có thể
được biểu diễn bằng ba giá trị màu khác nhau trong bộ nhớ, gồm: đỏ, lục, và
lam. Khi được hiển thị ra màn hình, dựa vào ba giá trị màu này, hệ thống sẽ tạo
ra ba mức cường độ khác nhau và gửi tới màn hình. Tại màn hình quá trình tổ hợp
màu sẽ được thực hiện. Tùy theo giá trị cường độ khác nhau của mỗi màu, hệ
thống có thể tái tạo được rất nhiều các màu khác nhau.
Để rõ hơn bạn có thể quan sát hoạt động của mô hình màu RGB
trong máy tính. Bạn mở chương trình mspaint.exe (mở cửa sổ dòng lệnh, gõ
mspaint) có sẵn trong hệ điều hành Windows.
Trong cửa sổ của chương trình Paint, chọn trình đơn Colors, chọn Edit Colors. Trong cửa sổ Edit Colors, chọn Define Custom Colors. Tại đây, bạn có thể thay đổi giá trị trong các ô Red, Green và Blue với giá trị bất kì từ 0 đến 255 để xem kết quả (Hình 11).
Bảng dưới đây là ví dụ về một số màu với giá trị tương ứng
của Red, Green và Blue.
Màu
|
Giá trị của Red
|
Giá trị của Green
|
Giá trị của Blue
|
Đỏ
|
255
|
0
|
0
|
Vàng
|
255
|
255
|
0
|
Đen
|
0
|
0
|
0
|
Trắng
|
255
|
255
|
255
|
Pixel và RGB
Có thể nói vắn tắt về một tấm ảnh như sau: một tấm ảnh là
tập hợp của các pixel, mỗi pixel chứa một màu cụ thể, mỗi màu này là sự kết hợp
của ba màu cơ bản là đỏ, lục và lam với tỉ lệ nhất định, tỉ lệ của mỗi màu được
đại diện bởi một con số, giá trị của mỗi con số nằm trong khoảng từ 0 tới 255.
Hình 12 là thể hiện của các pixel với giá trị màu của nó.
Như vậy từ tấm ảnh ban đầu, chúng ta đã biến đổi nó thành
dạng lưới điểm hay lưới pixel. Trong đó, mỗi pixel gồm có hai loại giá trị, một
là các giá trị thể hiện vị trí, hai là các giá trị thể hiện màu sắc. Tất cả các
giá trị đều ở dạng số. Đây cũng là một bài toán phổ biến trong khoa học máy
tính, bài toán số hóa các đối tượng.
Với con người, một tấm ảnh, một đoạn âm thanh, một cuốn sách
là các đối tượng vật chất cụ thể. Tuy nhiên, với máy tính, chúng chỉ là dữ
liệu. Các đối tượng vật chất sẽ được số hóa và tổ chức lưu trữ vào các cấu trúc
dữ liệu cụ thể, khi đó nó chỉ còn là các con số.
Ví dụ, nếu bạn muốn làm cho một tấm ảnh sáng hơn, với con
người đó là tăng độ sáng để nhìn ảnh được rõ hơn. Tuy nhiên, như bạn biết, màu
tại mỗi pixel được thể hiện bằng ba giá trị của đỏ, lục, và lam. Vì vậy, muốn
tăng độ sáng chỉ cần tăng đồng thời cả ba giá trị này lên, kết quả là màu của
pixel sẽ sáng hơn. Thực hiện như vậy cho tất cả các pixel sẽ làm cho cả tấm ảnh
sáng hơn.
[1] http://www.kirupa.com/design/little_about_color_hsv_rgb.htm
-------------------------
Tham khảo Dựa theo bài giảng của tác giả Nick Parlante, trong loạt bài giảng về Computer Science 101 – Đại học Stanford – Mỹ - 2014.
https://class.coursera.org/cs101-selfservice/wiki/view?page=code-1
------------------------
Cập nhật: 2014/7/8