NMMT - 3 - Anh so

(tiếp theo của Nhập môn máy tính - 2)



Ả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