Matlab trong xử lý ảnh: Cơ bản ảnh Grayscale (part 2)

Lu ROm

Administrator
Staff member
25 Tháng bảy 2014
481
119
43
32
One piece
vimach.net
1, Kiểu dữ liệu.
- Kiểu dữ liệu trong xử lý ảnh thường dùng 2 kiểu đó là: uint8 hoặc double. Một số kiểu dữ liệu khác là:
Mã:
•    Kiểu đơn single, kiểu này có lợi về bộ nhớ dữ liệu vì nó đòi hỏi ít byte nhớ hơn, kiểu dữ liệu này không được sử dụng trong các phép tính toán học, độ chính xác kém hơn.
•    Kiểu double kiểu này là kiểu thông dụng nhất của các biến trong Matlab.
•    Kiểu Sparse.
•    Kiểu uint8, uint8, uint16, uint64...
•    Kiểu char.
•    Kiểu cell.
•    Kiểu Structure.
- Trong Matlab kiểu dữ liệu double là kiểu mặc định sử dụng trong các phép tính số học.
- Một trong những vấn đề thường gặp nhất gây nên bởi các kiểu dữ liệu là hàm imshow(). Sau đây chúng ta sẽ chuyển đổi một hình ảnh sang kiểu double và hiển thị chúng. Chúng ta sử dụng hình ảnh sau cameraman.tif.
Mã:
img = imread('cameraman.tif');
img_d = double(img);
% ... played with the image, now we want to display it
imshow(img_d);
- Chúng ta có:
white_cameraman.png


- Tất cả đều là màu trắng. Chúng ta kiểm tra các giái trị điểm ảnh, tất cả các điểm ảnh nằm trong phạm vi 1-255. Vậy điều gì đã xảy ra? Hàm imshow() có hai sự quá tải hàm. Nó có hình ảnh với kiểu uint8 vì nó dao động trong khoảng [0, 255], và mất hình ảnh với kiểu double khi nó dao động trong khoảng [0, 1]. Vì vậy, trong trường hợp này, mỗi điểm ảnh lớn hơn 1 được xem là bão hòa, và đó là lý do tại sao hình ảnh là màu trắng.
- Để hiển thị đầy đủ ảnh thì chúng ta sửa code như sau:
Mã:
img = imread('cameraman.tif');
img_d = double(img);
imshow(img_d/255);
normal_cameraman.png

- Hoặc:
Mã:
img = imread('cameraman.tif');
img_im2d = im2double(img);
imshow(img_im2d);   % img_id2d in [0,1]

2, Trích xuất bit-plane từ ảnh GRAY.
- Với hàm mod(), chúng ta có thể trích xuất bit-plane từ ảnh sẵn có. Hàm mod(img,2) cho chúng ta bit 0 hoặc 1.
Mã:
img = imread('cameraman.tif');
img = double(img);
bp0 = mod(img,2);
imshow(bp0);
title('bit-plane 0');
bit_plane0.png


- Đối với các bit-plane tiếp theo,chúng ta làm tương tự. Trước khi mod() chúng ta cần shifting bit dùng hàm floor():
Mã:
bp1 = mod(floor(img/2),2);
bit_plane1.png


- Dưới đây là hình ảnh cho tất cả bit-plane:
bit_plane_all.png

-Đây là script được sử dụng cho các hình ảnh trên:

Mã:
img = imread('cameraman.tif');
img = double(img);
bp0 = mod(img,2);
bp1 = mod(floor(img/2),2);
bp2 = mod(floor(img/4),2);
bp3 = mod(floor(img/8),2);
bp4 = mod(floor(img/16),2);
bp5 = mod(floor(img/32),2);
bp6 = mod(floor(img/64),2);
bp7 = mod(floor(img/128),2);

subplot(241);imshow(bp0);title('bit-plane 0 : LSB');
subplot(242);imshow(bp1);title('bit-plane 1');
subplot(243);imshow(bp2);title('bit-plane 2');
subplot(244);imshow(bp3);title('bit-plane 3');
subplot(245);imshow(bp4);title('bit-plane 4');
subplot(246);imshow(bp5);title('bit-plane 5');
subplot(247);imshow(bp6);title('bit-plane 6');
subplot(248);imshow(bp7);title('bit-plane 7 : MSB');