1, Biểu diễn hình ảnh:
- Trong phần này, chúng ta sẽ tìm hiểu về ảnh Grayscale (ảnh xám) bởi vì ảnh xám là định dạng thích hợp để xử lý ảnh. Ngay cả trong trường hợp yêu cầu nhiều màu sắc, một hình ảnh màu RGB có thể bị phân tách và xử lý thành ba hình ảnh grayscale riêng biệt. Hình ảnh Indexed cũng được chuyển đổi sang màu xám hoặc RGB cho hầu hết các thao tác. Một số định nghĩa về các loại hình ảnh trong bài này.
- Lưu ý rằng phạm vi giá trị phụ thuộc vào lớp kiểu dữ liệu: ví dụ, [0,1] là kiểu double. Nếu đó là uint8, phạm vi mà Matlab hiểu sẽ là [0:255].
a, Ảnh Grayscale
- Dưới đây là một hình ảnh và được load vào matlab. Bạn có thể kiếm riêng cho mình một ảnh trên web hoặc lấy ảnh phía dưới.
- Đầu tiên, ta cần load ảnh đó vào matlab:
- Chúng ta sử dụng hàm size() để kiểm tra kích thước ảnh và giá trị pixel( cường độ) của ảnh:
- Hình ảnh trên có giá trị là 845x915 với 3 là biểu diễn màu RGB. Vì thế, ảnh trên thực chất chất không phải là một ảnh xám.
- Tiếp túc chúng ta kiểm tra từng giá trị pixel :
- Các giá trị của ba thành phần gần giống hệt nhau, nó gần như là một ảnh xám nếu ta chỉ nhìn vào mà không kiểm tra. Vì thế, để chuyển đổi hình ảnh trên thành màu xám hoàn toàn, ta cần dùng câu lệnh sau rgb2gray(). Hàm rgb2gray() chuyển đổi hình ảnh RGB thành ảnh xám bằng cách loại bỏ các thông tin màu sắc và độ bão hòa trong khi giữ lại độ sáng.
- Bây giờ ta tiếp tục kiểm tra kích thước bằng hàm size():
- Gía trị của ảnh bây giờ là 845x915, số 3 đã mất, và hình ảnh trên không còn là ảnh RGB nữa. Tiếp tục kiểm tra từng giá trị pixel ta được:
- Mỗi pixel chỉ có một giá trị duy nhất, phù hợp với định nghĩa của ảnh xám.
b, Chuyển đổi sang màu xám thủ công
Cách ở trên ta dùng hàm rgb2gray() chuyển đổi các hình ảnh RGB thành hình ảnh màu xám. Nhưng có một cách khác mà chúng ta có thể thực hiện việc chuyển đổi mà không dùng hàm bằng cách sử dụng công thức chuyển đổi tiêu chuẩn NTSC được đề xuất bởi MathWorks:
- Vì vậy, hình ảnh trên có thể dễ dàng chuyển qua ảnh xám bằng công thức trên. Dưới đây là ví dụ:
- Kiểm tra giá trị từng pixel, chúng ta có thể thấy các giá trị bằng với các giá trị khi dùng hàm chuyển đổi:
- Kết luận: chúng ta có 2 cách để chuyển đổi một ảnh RGB thành ảnh xám đó là dùng hàm hoặc thủ công.
c, Tạo hình ảnh xám trong matlab
- Trong phần này, chúng ta sẽ tạo ra hai hình ảnh màu xám kích thước 320 × 240: một với tất cả các pixel là màu đen và một là tất cả các pixel đều là màu trắng:
d,Các chỉ số hình ảnh
- Các bạn tải file ảnh này về: cameraman.tif.
- Thông tin về hình ảnh trên:
- Chúng ta cần đọc ảnh vào và chuyển đổi ảnh thành ảnh indexed:
- Tiếp theo chúng ta kiểm tra kích thước map (biểu đồ) của ảnh mới tạo:
- Gía trị map có 16 RGB như chúng ta quy định trong lệnh. Chúng ta có thể xem các giá trị:
-Chúng ta có 16 hàng của RGB và mỗi hàng tương ứng với chỉ số được lưu trữ trong ảnh indexed X với kích thước (256 x 256).
-Kiểm tra pixel ở (128, 128) và xem chỉ số pixel đó:
- Chỉ số của điểm ảnh là 9. Điều đó có nghĩa là giá trị RGB của hàng thứ 9 của map là: 0,6000 0,6000 0,6000.
- Bây giờ chúng ta cần lập bản đồ của các chỉ số thông tin của ảnh X với các giá trị RGB :
**Bảng colormap
Biểu đồ màu jet là biểu đồ màu mặc định. Vì vậy, khi chúng ta sử dụng lệnh colormap , nó sẽ hiển thị biểu đồ màu jet:
- Kích thước của map:
- Trong phần này, chúng ta sẽ tìm hiểu về ảnh Grayscale (ảnh xám) bởi vì ảnh xám là định dạng thích hợp để xử lý ảnh. Ngay cả trong trường hợp yêu cầu nhiều màu sắc, một hình ảnh màu RGB có thể bị phân tách và xử lý thành ba hình ảnh grayscale riêng biệt. Hình ảnh Indexed cũng được chuyển đổi sang màu xám hoặc RGB cho hầu hết các thao tác. Một số định nghĩa về các loại hình ảnh trong bài này.
- Lưu ý rằng phạm vi giá trị phụ thuộc vào lớp kiểu dữ liệu: ví dụ, [0,1] là kiểu double. Nếu đó là uint8, phạm vi mà Matlab hiểu sẽ là [0:255].
a, Ảnh Grayscale
- Dưới đây là một hình ảnh và được load vào matlab. Bạn có thể kiếm riêng cho mình một ảnh trên web hoặc lấy ảnh phía dưới.

- Đầu tiên, ta cần load ảnh đó vào matlab:
Mã:
img = imread('Einstein.jpg');
imshow(img);
Mã:
>> size(img)
ans =
845 915 3
- Tiếp túc chúng ta kiểm tra từng giá trị pixel :
Mã:
>> img(400,400,:)
ans(:,:,1) =
22
ans(:,:,2) =
24
ans(:,:,3) =
19
>> img(350,500,:)
ans(:,:,1) =
113
ans(:,:,2) =
117
ans(:,:,3) =
116
Mã:
img = imread('Einstein.jpg');
gray = rgb2gray(img);
imshow(gray);
Mã:
>> size(gray)
ans =
845 915
Mã:
>> gray(400,400,:)
ans =
23
>> gray(350,500,:)
ans =
116
b, Chuyển đổi sang màu xám thủ công
Cách ở trên ta dùng hàm rgb2gray() chuyển đổi các hình ảnh RGB thành hình ảnh màu xám. Nhưng có một cách khác mà chúng ta có thể thực hiện việc chuyển đổi mà không dùng hàm bằng cách sử dụng công thức chuyển đổi tiêu chuẩn NTSC được đề xuất bởi MathWorks:
Mã:
intensity = 0.2989*red + 0.5870*green + 0.1140*blue
Mã:
rgb = imread('Einstein.jpg');
gray_manual = 0.2989 * rgb(:,:,1) + 0.5870 * rgb(:,:,2) + 0.1140 * rgb(:,:,3);
imshow(gray);
Mã:
>> gray_manual(400,400,:)
ans =
23
>> gray_manual(350,500,:)
ans =
116
c, Tạo hình ảnh xám trong matlab
- Trong phần này, chúng ta sẽ tạo ra hai hình ảnh màu xám kích thước 320 × 240: một với tất cả các pixel là màu đen và một là tất cả các pixel đều là màu trắng:
Mã:
h = 240;
w = 320;
white = uint8(255*ones(h,w));
black = uint8(zeros(h,w));
figure;
subplot(121);
imshow(white);
subplot(122);
imshow(black);

d,Các chỉ số hình ảnh
- Các bạn tải file ảnh này về: cameraman.tif.
- Thông tin về hình ảnh trên:
Mã:
>> imfinfo('cameraman.tif')
ans =
Filename: [1x83 char]
FileModDate: '14-Apr-2014 12:53:51'
FileSize: 65126
Format: 'tif'
FormatVersion: []
Width: 256
Height: 256
BitDepth: 8
ColorType: 'grayscale'
FormatSignature: [73 73 42 0]
ByteOrder: 'little-endian'
NewSubFileType: 0
BitsPerSample: 8
Compression: 'PackBits'
PhotometricInterpretation: 'BlackIsZero'
StripOffsets: [8 8262 16426 24578 32492 40499 48599 56637]
SamplesPerPixel: 1
RowsPerStrip: 32
StripByteCounts: [8254 8164 8152 7914 8007 8100 8038 8235]
XResolution: 72
YResolution: 72
ResolutionUnit: 'Inch'
Colormap: []
PlanarConfiguration: 'Chunky'
TileWidth: []
TileLength: []
TileOffsets: []
TileByteCounts: []
Orientation: 1
FillOrder: 1
GrayResponseUnit: 0.0100
MaxSampleValue: 255
MinSampleValue: 0
Thresholding: 1
Offset: 64872
Mã:
I = imread('cameraman.tif');
[X, map] = gray2ind(I, 16);
Mã:
>> size(map)
ans =
16 3
Mã:
0 0 0
0.0667 0.0667 0.0667
0.1333 0.1333 0.1333
0.2000 0.2000 0.2000
0.2667 0.2667 0.2667
0.3333 0.3333 0.3333
0.4000 0.4000 0.4000
0.4667 0.4667 0.4667
0.5333 0.5333 0.5333
0.6000 0.6000 0.6000
0.6667 0.6667 0.6667
0.7333 0.7333 0.7333
0.8000 0.8000 0.8000
0.8667 0.8667 0.8667
0.9333 0.9333 0.9333
1.0000 1.0000 1.0000
-Kiểm tra pixel ở (128, 128) và xem chỉ số pixel đó:
Mã:
>> X(128,128)
ans =
9
- Bây giờ chúng ta cần lập bản đồ của các chỉ số thông tin của ảnh X với các giá trị RGB :
Mã:
I = imread('cameraman.tif');
[X, map] = gray2ind(I, 16);
imshow(X, map);
**Bảng colormap

Biểu đồ màu jet là biểu đồ màu mặc định. Vì vậy, khi chúng ta sử dụng lệnh colormap , nó sẽ hiển thị biểu đồ màu jet:
Mã:
>> colormap
ans =
0 0 0.5625
0 0 0.6250
0 0 0.6875
0 0 0.7500
0 0 0.8125
0 0 0.8750
0 0 0.9375
0 0 1.0000
0 0.0625 1.0000
0 0.1250 1.0000
0 0.1875 1.0000
0 0.2500 1.0000
0 0.3125 1.0000
0 0.3750 1.0000
0 0.4375 1.0000
0 0.5000 1.0000
0 0.5625 1.0000
0 0.6250 1.0000
0 0.6875 1.0000
0 0.7500 1.0000
0 0.8125 1.0000
0 0.8750 1.0000
0 0.9375 1.0000
0 1.0000 1.0000
0.0625 1.0000 0.9375
0.1250 1.0000 0.8750
0.1875 1.0000 0.8125
0.2500 1.0000 0.7500
0.3125 1.0000 0.6875
0.3750 1.0000 0.6250
0.4375 1.0000 0.5625
0.5000 1.0000 0.5000
0.5625 1.0000 0.4375
0.6250 1.0000 0.3750
0.6875 1.0000 0.3125
0.7500 1.0000 0.2500
0.8125 1.0000 0.1875
0.8750 1.0000 0.1250
0.9375 1.0000 0.0625
1.0000 1.0000 0
1.0000 0.9375 0
1.0000 0.8750 0
1.0000 0.8125 0
1.0000 0.7500 0
1.0000 0.6875 0
1.0000 0.6250 0
1.0000 0.5625 0
1.0000 0.5000 0
1.0000 0.4375 0
1.0000 0.3750 0
1.0000 0.3125 0
1.0000 0.2500 0
1.0000 0.1875 0
1.0000 0.1250 0
1.0000 0.0625 0
1.0000 0 0
0.9375 0 0
0.8750 0 0
0.8125 0 0
0.7500 0 0
0.6875 0 0
0.6250 0 0
0.5625 0 0
0.5000 0 0
Mã:
>> size(colormap)
ans =
64 3