I. Giới thiệu
Trong Matlab, mỗi hình ảnh thường được biểu diễn
bằng một ma trận hai chiều.
Mỗi một phần tử của ma trận tương ứng với 1 pixel
(một phân tử ảnh – picture element – biểu diễn bằng 1 điểm
trên màn hình). Điểm ảnh ở góc trên bên trái ứng với hàng
1, cột 1.
Matlab lưu giữ các hình ảnh dưới một trong các kiểu dữ
liệu sau: logical, uint8, uint16, double.
Người dùng có thể sử dụng các phép toán và các thao
tác cơ bản trên ma trận để tác động lên dữ liệu hình ảnh với
điều kiện các thao tác này chấp nhận các kiểu dữ liệu trên.
38 trang |
Chia sẻ: candy98 | Lượt xem: 734 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Bài giảng Lập trình tính toán Matlab - Chương 5: Cơ bản về xử lý ảnh số trong Matlab, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Chương 5
Cơ bản về
xử lý ảnh số trong Matlab
2 25/05/2014 Lập trình tính toán
Trong Matlab, mỗi hình ảnh thường được biểu diễn
bằng một ma trận hai chiều.
Mỗi một phần tử của ma trận tương ứng với 1 pixel
(một phân tử ảnh – picture element – biểu diễn bằng 1 điểm
trên màn hình). Điểm ảnh ở góc trên bên trái ứng với hàng
1, cột 1.
Matlab lưu giữ các hình ảnh dưới một trong các kiểu dữ
liệu sau: logical, uint8, uint16, double.
Người dùng có thể sử dụng các phép toán và các thao
tác cơ bản trên ma trận để tác động lên dữ liệu hình ảnh với
điều kiện các thao tác này chấp nhận các kiểu dữ liệu trên.
5.1 Giới thiệu
3 25/05/2014 Lập trình tính toán
5.2 Các kiểu hình ảnh trong Matlab
Ảnh chỉ số (indexed images)
Ảnh được biểu diễn bởi hai ma trận:
- Ma trận dữ liệu X: thuộc kiểu uint8, uint16 hoặc
double.
- Ma trận màu (bản đồ màu) map: kích thước m×3, các
phần tử có kiểu double có giá trị thuộc khoảng [0,1]. Mỗi
hàng của ma trận xác định các thành phần red, green,
blue trong tổng số m màu được sử dụng trong ảnh.
Giá trị của một phần tử trong ma trận dữ liệu cho biết màu
của điểm ảnh đó là màu nằm ở hàng nào trong ma trận
màu.
4 25/05/2014 Lập trình tính toán
5.2 Các kiểu hình ảnh trong Matlab (tt.)
Ảnh chỉ số (indexed images) (tt.)
X(143,219) = 124
map(124,:) =
0.8392 0.9373 1.0000
5 25/05/2014 Lập trình tính toán
5.2 Các kiểu hình ảnh trong Matlab (tt.)
Ảnh độ sáng (intensity images)
Ảnh được biểu diễn bởi một ma trận hai chiều, trong đó giá
trị của mỗi phần tử cho biết độ sáng (hay mức xám) của
điểm ảnh đó.
- Ma trận thuộc kiểu uint8, uint16 hoặc double.
- Giá trị nhỏ nhất (0) ứng với màu đen.
- Giá trị lớn nhất (255 hoặc 65535 hoặc 1 tùy kiểu dữ
liệu là uint8, uint16 hay double) ứng với màu trắng.
Ảnh biểu diễn theo kiểu này còn gọi là ảnh “trắng đen”
hoặc ảnh grayscale.
6 25/05/2014 Lập trình tính toán
5.2 Các kiểu hình ảnh trong Matlab (tt.)
Ảnh độ sáng (intensity images) (tt.)
I(143,219) = 0.9151
7 25/05/2014 Lập trình tính toán
Ảnh nhị phân (binary images)
5.2 Các kiểu hình ảnh trong Matlab (tt.)
Ảnh được biểu diễn bởi một ma trận hai chiều, thuộc kiểu
logical.
- 0 ứng với màu đen.
- 1 ứng với màu trắng.
BW(143,219) = 1
8 25/05/2014 Lập trình tính toán
Ảnh RGB (RGB images)
5.2 Các kiểu hình ảnh trong Matlab (tt.)
Ảnh được biểu diễn bởi một ma trận ba chiều m × n × 3.
- m × n: kích thước ảnh theo pixels.
- Ma trận này định nghĩa các thành phần màu red,
green, blue cho mỗi điểm ảnh, các phần tử có thể thuộc
kiểu uint8, uint16 hay double.
Ảnh biểu diễn theo kiểu này còn gọi là ảnh “truecolor”.
Các file ảnh hiện nay thường sử dụng 8 bit cho một thành
phần màu, nghĩa là mất 24 bit cho mỗi điểm ảnh (khoảng
16 triệu màu)
9 25/05/2014 Lập trình tính toán
5.2 Các kiểu hình ảnh trong Matlab (tt.)
Ảnh RGB (RGB images) (tt.)
RGB(143,219,1) = 0.8392
RGB(143,219,2) = 0.9373
RGB(143,219,3) = 1.0000
10 25/05/2014 Lập trình tính toán
Chuyển đổi giữa các kiểu ảnh
Tên hàm Cú pháp Mô tả
dither
dither(RGB,map)
dither(I)
Tạo ảnh nhị phân từ ảnh trắng
đen I hoặc tạo ảnh indexed từ
ảnh RGB và ma trận màu map
bằng phương pháp dithering
gray2ind
[X, map] = gray2ind(I,n)
[X, map] = gray2ind(BW,n)
Chuyển ảnh nhị phân BW
hoặc ảnh intensity I thành ảnh
indexed thông qua ma trận
tuyến tính gray(n)
grayslice
X = grayslice(I,n)
X = grayslice(I,v)
Chuyển ảnh trắng đen I thành
ảnh indexed X bằng cách lấy
ngưỡng. Các giá trị ngưỡng
được xác định bởi vector v
hoặc bởi n (khi đó các giá trị
ngưỡng là 1/n, 2/n, , (n-1)/n)
5.2 Các kiểu hình ảnh trong Matlab (tt.)
11 25/05/2014 Lập trình tính toán
5.2 Các kiểu hình ảnh trong Matlab (tt.)
Chuyển đổi giữa các kiểu ảnh (tt.)
Tên hàm Cú pháp Mô tả
im2bw
BW = im2bw(I,level)
BW = im2bw(X,map,level)
BW = im2bw(RGB,level)
Chuyển ảnh trắng đen, ảnh
indexed hoặc ảnh RGB thành
ảnh nhị phân BW bằng cách
lấy ngưỡng bởi level
ind2gray I = ind2gray(X,map)
Chuyển ảnh indexed X với ma
trận màu map thành ảnh trắng
đen I
ind2rgb RGB = ind2rgb(X,map) Chuyển ảnh indexed X với ma trận màu map thành ảnh RGB
12 25/05/2014 Lập trình tính toán
5.2 Các kiểu hình ảnh trong Matlab (tt.)
Chuyển đổi giữa các kiểu ảnh (tt.)
Tên hàm Cú pháp Mô tả
mat2gray I = mat2gray(A,[amin amax])
Tạo ảnh trắng đen từ ma trận
A; amin, amax thuộc [0 (đen),
1 (trắng)].
rgb2gray I = rgb2gray(RGB) Chuyển ảnh RGB thành ảnh trắng đen I
rgb2ind
[X, map] = rgb2ind(RGB,n)
X = rgb2ind(RGB,map)
[X, map] = rgb2ind(RGB,tol)
Chuyển ảnh RGB thành ảnh
indexed [X, map]:
TH1: n<=65535
TH2: mỗi pixel được xấp xỉ
đến màu gần giống nhất trong
bản màu map
TH3: tol ∈ [0,1]
13 25/05/2014 Lập trình tính toán
5.3 Đọc và ghi các dữ liệu ảnh
Đọc dữ liệu ảnh
Hàm imread đọc các file ảnh với bất kỳ các định dạng ảnh
đã biết hiện nay và lưu lại dưới dạng một ma trận biểu diễn
ảnh trong Matlab.
Cú pháp:
A = imread(filename,fmt)
[X,map] = imread(filename,fmt)
filename: chuỗi xác định tên file cần đọc cùng với đường dẫn
(nếu file này không nằm trong thư mục hiện hành)
fmt: chuỗi cho biết định dạng của ảnh, VD: ‘bmp’, ‘gif’, ‘jpg’,
14 25/05/2014 Lập trình tính toán
Ghi dữ liệu ảnh
Hàm imwrite lưu một ảnh biểu diễn bằng một ma trận trong
Matlab thành một file ảnh dưới một trong các định dạng
ảnh đã biết.
Cú pháp:
imwrite(A,filename,fmt)
imwrite(X,map,filename,fmt)
5.3 Đọc và ghi các dữ liệu ảnh (tt.)
15 25/05/2014 Lập trình tính toán
Xem thông số một file ảnh
>> info = imfinfo(filename,fmt)
Các thông tin của ảnh được lưu dưới dạng cấu trúc (struct)
Các thuộc tính (field) có được khi gọi hàm imfinfo.
5.3 Đọc và ghi các dữ liệu ảnh (tt.)
Tên thuộc tính Mô tả
Filename Chuỗi chứa tên file
FileModDate Chuỗi cho biết ngày hiệu chỉnh file gần đây nhất
FileSize Một số nguyên chỉ kích thước file (đơn vị byte)
16 25/05/2014 Lập trình tính toán
5.3 Đọc và ghi các dữ liệu ảnh (tt.)
Xem thông số một file ảnh (tt.)
Tên thuộc tính Mô tả
Format Chuỗi cho biết định dạng của ảnh
FormatVersion Chuỗi hoặc số cho biết tên phiên bản của định
dạng
Width Số nguyên chỉ chiều rộng ảnh (pixels)
Height Số nguyên chỉ chiều cao ảnh (pixels)
BitDepth Số nguyên cho biết số bits trên một pixel
ColorType Chuỗi cho biết kiểu ảnh: ‘truecolor’, ‘grayscale’
hoặc ‘indexed’
17 25/05/2014 Lập trình tính toán
5.4 Chuyển đổi giữa các kiểu dữ liệu
Sử dụng các hàm chuyển kiểu cho các ma trận biểu diễn
ảnh:
im2double
im2uint8
im2uint16
Lưu ý:
- Khi chuyển từ kiểu dữ liệu nhiều bit sang kiểu dữ liệu ít bit hơn,
một số thông tin chi tiết về bức ảnh ban đầu sẽ bị mất.
- Không phải lúc nào cũng có thể chuyển kiểu dữ liệu đối với kiểu
ảnh indexed. Để chuyển, phải dùng hàm imapprox để giảm số màu
cần biểu diễn ảnh xuống.
18 25/05/2014 Lập trình tính toán
5.5 Các phép toán số học cơ bản trên ảnh
Tên hàm Cú pháp Mô tả
imabsdiff z = imabsdiff(x,y)
Trừ mỗi phần tử của y từ phần
tử tương ứng của x, sau đó
trả về trị tuyệt đối của hiệu
imadd z = imadd(x,y,out_class)
Cộng hai ảnh hoặc cộng một
ảnh với một hằng số,
out_class là chuỗi xác định
kiểu dữ liệu của tổng
imcomplement im2 = imcomplement(im) Lấy bù của ảnh im
Imdivide z = imdivide(x,y)
Chia các phần tử của ảnh x
cho phần tử tương ứng của y,
các giá trị phân số được làm
tròn.
19 25/05/2014 Lập trình tính toán
5.5 Các phép toán số học cơ bản (tt.)
Tên hàm Cú pháp Mô tả
imlincomb
z = imlincomb(k1,a1,
k2,a2, , kn,an,
k,out_class)
Lấy tổ hợp tuyến tính của các
ảnh:
z=k1*a1+k2*a2++kn*an+k
immultiply z = immultiply(x,y)
Nhân hai ảnh hoặc nhân một
ảnh với một hằng số, nếu kết
quả bị tràn thì sẽ được giới
hạn lại trong tầm cho phép
imsubstract im2 = imsubstract(x,y)
Trừ hai ảnh hoặc trừ một ảnh
với một hằng số, nếu kết quả
bị tràn thì sẽ được giới hạn lại
trong tầm cho phép
20 25/05/2014 Lập trình tính toán
Ví dụ 1: Chồng lẫn hai ảnh trên một nền chung
I = imread(‘rice.png’); % Đọc ảnh thứ nhất
J = imread(‘cameraman.tif’); % Đọc ảnh thứ hai
K = imadd(I,J); % Cộng hai ảnh
imshow(I) % Hiển thị ảnh thứ nhất
imshow(J) % Hiển thị ảnh thứ hai
imshow(K) % Hiển thị ảnh tổng
5.5 Các phép toán số học cơ bản (tt.)
21 25/05/2014 Lập trình tính toán
5.5 Các phép toán số học cơ bản (tt.)
Ví dụ 2: Làm tăng độ sáng ảnh bằng phép cộng với hằng số
I = imread('peppers.png');
J = imadd(I,50);
subplot(1,2,1), imshow(I)
subplot(1,2,2), imshow(J)
22 25/05/2014 Lập trình tính toán
5.5 Các phép toán số học cơ bản (tt.)
Ví dụ 3: Làm tăng độ sáng ảnh bằng phép nhân với hằng số
I = imread('peppers.png');
J = immultiply(I,1.5);
subplot(1,2,1), imshow(I)
subplot(1,2,2), imshow(J)
23 25/05/2014 Lập trình tính toán
5.6 Các hàm hiển thị hình ảnh
Hàm image(x, y, C): hiển thị hình ảnh biểu diễn bởi ma
trận Cm× n lên trục tọa độ hiện hành; x, y là vector xác định
vị trí của các pixel C(1,1) và C(m,n) trong hệ trục hiện
hành.
Ví dụ:
load mandrill
image(X)
colormap(map)
24 25/05/2014 Lập trình tính toán
5.6 Các hàm hiển thị hình ảnh (tt.)
Hàm imagesc: tương tự hàm image, ngoài trừ việc dữ liệu
ảnh sẽ co giãn (scale) để sử dụng toàn bộ bản đồ màu hiện
hành.
Ví dụ:
I = imread('eight.tif');
subplot(2,2,1); imagesc(I);
axis([0 400 0 400]);
colormap(gray);
subplot(2,2,2); imagesc(100,100,I);
axis([0 400 0 400]);
colormap(gray);
subplot(2,2,3); imagesc(I);
25 25/05/2014 Lập trình tính toán
5.6 Các hàm hiển thị hình ảnh (tt.)
Hàm imshow: tạo đối tượng đồ họa thuộc loại image và
hiển thị ảnh trên một figure tự động thiết lập các giá trị của
các đối tượng image, axes và figure để thể hiện hình ảnh.
Sử dụng hàm này trong các trường hợp cần các công cụ chú
giải, hỗ trợ in ấn có sẵn trong figure.
Hàm imtool: hiển thị hình ảnh trên Image Tool, là một
môi trường tích hợp để hiển thị hình ảnh và biểu diễn một
số tác vụ xử lý hình ảnh phổ biến.
26 25/05/2014 Lập trình tính toán
Ví dụ:
imshow('board.tif')
imtool('board.tif')
5.6 Các hàm hiển thị hình ảnh (tt.)
Hiển thị ảnh bằng
imshow
Hiển thị ảnh bằng
imtool
27 25/05/2014 Lập trình tính toán
5.7 Các phép biến đổi hình học
Phép nội suy ảnh
Nội suy là quá trình ước lượng giá trị của ảnh tại một điểm nằm
giữa hai pixels có giá trị đã biết.
Các phương pháp nội suy:
- Phương pháp lân cận gần nhất (Nearest-neighbor
interpolation): pixel mới sẽ được gán giá trị của pixel chứa
điểm tương ứng của nó trong ảnh ban đầu.
- Phương pháp song tuyến tính (Bilinear interpolation): pixel
mới sẽ được gán là trung bình có trọng số của các pixel trong
một lân cận kích thước 2×2.
28 25/05/2014 Lập trình tính toán
5.7 Các phép biến đổi hình học (tt.)
Phép nội suy ảnh (tt.)
- Phương pháp bicubic (Bicubic interpolation): pixel mới sẽ
được gán là trung bình có trọng số của các pixel trong một lân
cận kích thước 4×4.
Phép nội suy là cơ sở để thực hiện các phép biến đổi hình học
khác như: thay đổi kích thước ảnh, quay ảnh, ...
29 25/05/2014 Lập trình tính toán
Thay đổi kích thước ảnh
>>B = imresize(A,m,method)
Tạo ảnh B có kích thước gấp m lần ảnh gốc A. Method:
phương pháp nội suy sẽ dùng: ‘nearest’, ‘bilinear’,
‘bicubic’; mặc định là ‘nearest’.
>>B = imresize(A,[mrows mcols],method)
mrows, mcols: số hàng, số cột của ảnh mới.
5.7 Các phép biến đổi hình học (tt.)
30 25/05/2014 Lập trình tính toán
Ví dụ:
[X,map] = imread('trees.tif');
[Y,newmap] = imresize(X,map,0.5);
imshow(Y,newmap);
imshow(X,map);
5.7 Các phép biến đổi hình học (tt.)
Thay đổi kích thước ảnh (tt.)
31 25/05/2014 Lập trình tính toán
Phép quay ảnh
5.7 Các phép biến đổi hình học (tt.)
>>B = imrotate(A,angle,method,bbox)
A: ảnh gốc.
angle: góc quay
method: phương pháp nội suy, mặc định là 'nearest'
bbox: kích thước của ảnh mới: 'crop' hoặc 'loose'. Mặc
định là 'loose' (tăng kích thước nếu cần)
32 25/05/2014 Lập trình tính toán
5.7 Các phép biến đổi hình học (tt.)
Phép quay ảnh (tt.)
Ví dụ:
[X,map] = imread('trees.tif');
I = ind2rgb(X,map);
J = imrotate(I,45);
K= imrotate(I,45,'crop');
imshow(I)
imshow(J)
imshow(K)
33 25/05/2014 Lập trình tính toán
Trích xuất ảnh
5.7 Các phép biến đổi hình học (tt.)
Cách 1:
>>X2 = imcrop(X,map,rect) %Ảnh indexed
>>A2 = imcrop(A,rect) %Ảnh grayscale hoặc RGB
rect = [xmin ymin width height] với (xmin,ymin) là tọa độ
góc trên bên trái của phần ảnh cần trích, width và height là
chiều rộng và chiều cao của phần ảnh cần trích.
34 25/05/2014 Lập trình tính toán
Trích xuất ảnh (tt.)
5.7 Các phép biến đổi hình học (tt.)
Cách 2:
>>[X2,rect] = imcrop(X,map) %Ảnh indexed
>>[A2,rect] = imcrop(A) %Ảnh grayscale hoặc RGB
Dùng con trỏ chuột để chọn phần ảnh cần trích xuất.
Ví dụ:
[I2,rect]=imcrop(I)
imshow(I)
imshow(I2)
35 25/05/2014 Lập trình tính toán
Phép biến đổi hình học tổng quát
5.7 Các phép biến đổi hình học (tt.)
>>B = imtransform(A,TFORM,interp)
>>[B,XData,YData]=imtransform(...,param1,val1,param2,val2,...)
interp: phương pháp nội suy.
(XData,YData): vị trí của ảnh B trong hệ trục X-Y.
TFORM: cấu trúc của phép biến đổi, được xác định bằng
cách sử dụng hàm maketform và cp2tform.
36 25/05/2014 Lập trình tính toán
5.7 Các phép biến đổi hình học (tt.)
Phép biến đổi hình học tổng quát (tt.)
Hàm maketform:
>>T = maketform(TFORM_type,...)
TFORM_type: dạng cấu trúc biến đổi hình học: 'affine',
'projective', 'custom', box', 'composite'.
37 25/05/2014 Lập trình tính toán
5.7 Các phép biến đổi hình học (tt.)
Phép biến đổi hình học tổng quát (tt.)
Hàm cp2tform:
>>T = cp2tform(input_points,base_points,TFORM_type,order)
input_points, base_points: các ma trận M×2 xác định tọa độ
(X,Y) của M điểm điều khiển trong ảnh biến đổi và trong ảnh
gốc.
TFORM_type: 'affine', 'linear conformal', 'projective'.
'polynomial', 'piecewise linear', 'lwm'. Nếu là 'polynomial' thì
cần cung cấp thêm thông số order cho biết bậc của đa thức
(mặc định là 3).
38 25/05/2014 Lập trình tính toán
5.7 Các phép biến đổi hình học (tt.)
Phép biến đổi hình học tổng quát (tt.)
Ví dụ:
T = maketform('affine',[1 0 0; .5 1 0; 0 0 1]);
J = imtransform(I,T);
imshow(I), figure, imshow(J)