Matlab trong xử lý ảnh: RGB VÀ bảng màu

Lu ROm

Administrator
Staff member
25 Tháng bảy 2014
481
119
43
32
One piece
vimach.net
- Trong phần này chúng ta sẽ tìm hiểu cách lấy thông tin về một hình ảnh. Chúng ta sẽ sử dụng các hàm sau:
Mã:
imfinfo()
impixelinfo
rgb2ind()
rgb2gray()
colormap(jet)

1, Hàm imfinfo()
- Chúng ta cần nạp hình ảnh vào matlab. Các bạn có thể tải ảnh tại đây (Sun.jpg). Các bạn quay lại bài trước để xem hướng dẫn nạp ảnh.
Sun.jpg


- Hàm imfinfo() sẽ cho chúng ta rất nhiều thông tin về hình ảnh. Câu lệnh trong matlab như sau:
Mã:
info = imfinfo('Sun.jpg');
- Chúng ta kích đúp vào biến info trên cửa sổ Workspace, chúng ta sẽ có một số thông tin sau:
Variables_imfinfo.png


- Hoặc chúng ta gõ lệnh sau trên Command Window:
Mã:
>> info
           Filename: [1x77 char]
        FileModDate: '13-Apr-2014 18:18:38'
           FileSize: 1767119
             Format: 'jpg'
      FormatVersion: ''
              Width: 1780
             Height: 1292
           BitDepth: 24
          ColorType: 'truecolor'
    FormatSignature: ''
    NumberOfSamples: 3
       CodingMethod: 'Huffman'
      CodingProcess: 'Sequential'
            Comment: {}
- Truy vấn thông tin của một pixel (điểm ảnh):
+ Hình ảnh được tạo thành từ các mảng, và thành phần là các pixel nên chúng ta có thể kiểm tra các giá trị của pixel. Ví dụ, nếu chúng ta muốn biết giá trị của pixel tại (350, 250):
Mã:
>> img(350,250,:)
ans(:,:,1) =
  157
ans(:,:,2) =
   70
ans(:,:,3) =
    0
- Kết quả trên chúng ta sẽ có giá trị của một pixel. Kết quả đó phản ánh cường độ RGB của một pixel.
- Ngoài ra, chúng ta còn có câu lệnh impixelinfo. Hãy thử gõ câu lệnh vào Command Window, và di chuyển chuột trên hình ảnh. Lúc này chúng ta sẽ thu được tọa độ và thông tin RGB của từng pixel (vd: (455, 988) [255 241 12]). Chúng ta có thể copy thông tin đó bằng cách nhấn chuột phải và dán ở nơi nào đó.

2, Hàm rgb2ind()
- Lệnh rgb2ind() chuyển đổi ảnh RGB sang ảnh indexed(chỉ mục). Ảnh indexed có một lợi thế về mặt sử dụng tài nguyên so với ảnh RGB. Ảnh indexed là gì thì các bạn xem bài này.
- Sau đây là định nghĩa màu indexed của wiki: "Màu Indexed tiết kiệm rất nhiều bộ nhớ, không gian lưu trữ, và thời gian truyền: sử dụng truecolor, mỗi điểm ảnh cần 24 bit, hoặc 3 byte." Các bạn có thể tham khảo thêm ở trang đó.
- Chuyển đổi hình ảnh RGB sang một hình ảnh indexed với 32 màu. Chúng ta sẽ sử dụng các hàm sau đây:
Mã:
[IND,map] = rgb2ind(RGB_image,n)
- Hàm trên chuyển đổi ảnh RGB sang ảnh indexed IND bằng cách sử dụng lượng tử hóa sai số tối thiểu. Map chứa ít nhất n màu sắc. n phải nhỏ hơn hoặc bằng 65.536.
Mã:
>> [IND,map] = rgb2ind(img,32);
>> figure('Name','Indexed image with 32 Colors');
>> imshow(IND);
- Các câu lệnh trên hiển thị hình ảnh dựa trên các giá trị IND:
imshow_IND.png


- Khi chúng ta dùng mapping:
Mã:
>> colormap(map)
imshow_colormap.png

- Sau đó chúng ta dùng lệnh imagesc() để có những tỷ lệ indexed thích hợp.
imagesc_IND.png

- Tiếp theo dùng mapping:
Mã:
>> colormap(map)
imagesc_colormap.png


jet colormap :
Mã:
colormap(jet);
jet_colormap.png

spring colormap:
Mã:
colormap(spring);
spring_colormap.png