38
Chương 5 Cơ bản về xử lý ảnh số trong Matlab

LTTT Matlab Chuong 5ddd

Embed Size (px)

Citation preview

Page 1: LTTT Matlab Chuong 5ddd

Chương 5

Cơ bản về xử lý ảnh số trong Matlab

Page 2: LTTT Matlab Chuong 5ddd

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

Presenter
Presentation Notes
Kiểu dữ liệu uint8 (unsigned 8-bit), uint16 (unsigned 8-bit) không thể sử dụng các phép toán số học như cộng, trừ, nhân, chia => các hàm thực hiện các phép toán này.
Page 3: LTTT Matlab Chuong 5ddd

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.

Page 4: LTTT Matlab Chuong 5ddd

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

Page 5: LTTT Matlab Chuong 5ddd

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.

Page 6: LTTT Matlab Chuong 5ddd

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

Page 7: LTTT Matlab Chuong 5ddd

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

Page 8: LTTT Matlab Chuong 5ddd

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)

Page 9: LTTT Matlab Chuong 5ddd

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

Page 10: LTTT Matlab Chuong 5ddd

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.)

Page 11: LTTT Matlab Chuong 5ddd

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

Page 12: LTTT Matlab Chuong 5ddd

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]

Page 13: LTTT Matlab Chuong 5ddd

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’,…

Page 14: LTTT Matlab Chuong 5ddd

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.)

Page 15: LTTT Matlab Chuong 5ddd

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)

Page 16: LTTT Matlab Chuong 5ddd

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’

Page 17: LTTT Matlab Chuong 5ddd

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.

Presenter
Presentation Notes
Các giá trị của ma trận ảnh xác định địa chỉ trong bản đồ màu -> không thể lượng tử hóa. VD: không thể chuyển ảnh indexed kiểu double với ma trận màu có 300 màu thành kiểu uint8 vì kiểu này chỉ có 256 giá trị.
Page 18: LTTT Matlab Chuong 5ddd

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.

Page 19: LTTT Matlab Chuong 5ddd

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

Page 20: LTTT Matlab Chuong 5ddd

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.)

Page 21: LTTT Matlab Chuong 5ddd

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)

Page 22: LTTT Matlab Chuong 5ddd

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)

Page 23: LTTT Matlab Chuong 5ddd

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)

Page 24: LTTT Matlab Chuong 5ddd

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);

Page 25: LTTT Matlab Chuong 5ddd

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.

Page 26: LTTT Matlab Chuong 5ddd

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

Page 27: LTTT Matlab Chuong 5ddd

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.

Page 28: LTTT Matlab Chuong 5ddd

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, ...

Page 29: LTTT Matlab Chuong 5ddd

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.)

Page 30: LTTT Matlab Chuong 5ddd

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.)

Page 31: LTTT Matlab Chuong 5ddd

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)

Page 32: LTTT Matlab Chuong 5ddd

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)

Page 33: LTTT Matlab Chuong 5ddd

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.

Page 34: LTTT Matlab Chuong 5ddd

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)

Page 35: LTTT Matlab Chuong 5ddd

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.

Page 36: LTTT Matlab Chuong 5ddd

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'.

Page 37: LTTT Matlab Chuong 5ddd

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).

Page 38: LTTT Matlab Chuong 5ddd

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)