4.2.1.Ảnh trong MATLAB
Trong MATLAB, dữ liệu chủ yếu được lưu trữ theo cấu trúc mảng (tập có thứ tự gồm các phần tử số thực hoặc phức). Ảnh trong Matlab cũng được lưu trữ bởi các mảng phần tử với các giá trị lưu trữ có thể là mầu, cường độ… của ảnh.
Hầu hết các ảnh được MATLAB lưu trữ dưới dạng các mảng 2 chiều (VD: ma trận). Trong các mảng 2 chiều này, mỗi phần tử tương ứng với một pixel và thường được biểu diễn bởi một điểm trên màn hình máy tính(VD: Một bức ảnh có 500 hàng và 700 cột gồm nhiều điểm mầu khác nhau được lưu trữ bởi một ma trận có kích thước 500x700). Một số bức ảnh, như ảnh mầu đòi hỏi phảI được lưu trữ bởi mảng ba chiều. Trong đó, mặt phẳng thứ nhất trong mảng ba chiều này biểu diễn cho cường độ đỏ (red) của phần tử, mặt phẳng thứ hai biểu diễn cho cường độ màu xanh là cây (green) và mặt phẳng còn lại biểu diễn cho cường độ màu xanh da trời (blue) của phần tử. Với việc lưu trữ các ảnh dưới dạng mảng, việc xử lý ảnh với dữ liệu được lưu bởi dạng ma trận nào đều được thực hiện rất thuận tiện.
4.2.2.Hộp công cụ xử lý ảnh (image processing toolbox):
Matlab có thể xử lý cũng như lưu trữ các bức ảnh dưới nhiều định dạng khác nhau: BMP, HDF, JPEG, TIFF… Dù vậy tất cả các định dạng này đều được quy chuẩn về 4 dạng cơ bản: nhị phân (Binary), được gán chỉ số (Indexed), mức xám (Grayscale), RGB (RGB hay truecolor). Các định dạng ảnh này sẽ qui định cách mà Matlab biên dịch các phần tử của ma trận dữ liệu (VD: các giá trị cường độ phần tử).
* Ảnh dạng mức xám (gray scale image):
Ảnh loại này được biểu diễn bởi một ma trận mà mọi phần tử của nó đều biểu diễn một giá trị sáng/tối của điểm ảnh ở vị trí tương ứng. Có 2 cách để biểu diễn giá trị thể hiện mức độ ‘xám’ của một pixel: dạng double và dạng uint8. Dạng double gán cho mỗi pixel một giá trị động thuộc khoảng (0,1): giá trị 0 ứng với màu đen còn 1 ứng với màu trắng. Dạng uint8 gán cho mỗi pixel một giá trị từ 0 đến 255 thể hiện độ sáng (brightness): giá trị 0 tương ứng với màu đen còn 255 ứng với màu trắng. Mỗi bức ảnh lưu trữ dưới dạng uint8 chỉ chiếm 1/8 không gian nhớ so với lưu trữ dưới dạng double. Mặc dù vậy, đôI khi thuật toán hoặc các ứng dụng chỉ có thể giảI quyết với dạng double.
* Ảnh kiểu nhị phân:
Mỗi bức ảnh dạng này được lưu trữ bởi một ma trận trong đó mỗi phần tử của ma trận chỉ có thể có giá trị hoặc 0 (đen) hoặc 1 (trắng).
* Ảnh được gán chỉ số:
Đây là một cách thông dụng để biểu diễn các bức ảnh mầu. Một bức ảnh được gán chỉ số được lưu trữ bởi 2 ma trận. Ma trận thứ nhất có cùng kích cỡ với bức ảnh và chứa giá trị thứ nhất của mỗi pixel. Ma trận còn lại được gọi là ma trận màu (color map) và có kích cỡ có thể khác so với kích cỡ của bức ảnh. Các chỉ số ở ma trận thức nhất cho ta biết số nào sẽ được biểu diễn bởi ma trận màu.
* Ảnh dạng RGB:
Các ảnh RGB được Matlab lưu trữ bởi 3 ma trận chứa các kích cỡ ứng với định dạng của bức ảnh. Mỗi ma trận tương ứng với một trong các mầu: đẻ (Red), xanh lá cây (Green), xanh da trời (Blue). Đồng thời giá trị mỗi phần tử của ma trận sẽ thể hiện cường độ từng loại mầu tại mỗi pixel.
* Các lệnh chuyển đổi trong Hộp công cụ xử lý ảnh:
Lệnh dither() : chuyển các định dạng khác sang dạng nhị phân. Lệnh Gray2ind(): chuyển từ dạng Gray sang indexed.
Lệnh ind2gray(): chuyển từ dạng indexed sang Gray. Lệnh ind2rgb(): chuyển từ dạng indexed sang RGB.
Lệnh mat2gray(): chuyển một ma trận thông thường dạng gray bởi hàm tỉ lệ. Lệnh rgb2gray(): chuyển dạng RGB sang dạng Gray.
Lệnh rgb2ind(): chuyển dạng RGB sang dạng Indexed. * Đọc file ảnh trong Matlat
Matlab không xử lý trực tiếp bức ảnh mà làm việc thông qua việc chuyển đổi ảnh về dạng (các) ma trận chứa các thông số của nó. Thực chất việc xử lý ảnh trong Matlab chính là xử lý các thông số của ma trận. Các lệnh cơ bản nhất của xử lý ảnh trong Matlab chính là các lệnh đọc ghi.
Lệnh imread() nhập một bức ảnh vào trong workspace (không gian làm việc) của Matlab. Lúc này xử lý bức ảnh tương đương với việc xử lý biên được gán cho nó.
VD: image=imread(‘picture.jpg’); % gán ảnh có tên picture định dang jpg cho biến image, biến image được lưu trong workspace.
Lệnh imwrite() chuyển đổi một biến đã được gán cho ảnh thành file ảnh và ghi nhớ file ảnh đó.
VD: imwrite(image,’image.jpg’); % lưu biến image dưới định dạng file ảnh jpg vào thư mục làm việc hiện thời
4.2.3.Hộp công cụ thu nhận ảnh (image acquisition toolbox):
Hộp công cụ thu nhân ảnh được dùng để thực hiện chức năng thu nhận ảnh qua các thiết bị được kết nối với máy tính. Sử dụng các hàm chức năng của hộp công cụ này có thể tạo ra một đối tượng thể hiện sự kết nối giữa Matlab và các thiết bị thu hình ảnh cụ thể. Sử dụng các tính chất của đối tượng giúp kiểm soát nhiều bước trong quá trình thu nhận ảnh như dung lượng dữ liệu video muốn ghi lại.
Hộp công cụ sử dụng các thành phần được gọi là các bộ thích ứng dùng để liên kết với các thiết bị thông qua các trình điều khiển.
Với hộp công cụ thu nhận hình ảnh, ta có thể nối trực tiếp phần cứng ở trong thanh công cụ và có thể thiết lập các tham số thu nhận đồng thời xem và yêu cầu dữ liệu ảnh. Ngoài ra, ta có thể tiếp cận dữ liệu của Matlab dưới một vài định dạng đồng thời tạo ra một file AVI.
Matlab thông qua hộp công cụ thu nhận hình ảnh hỗ trợ kết nối với nhiều loại thiết bị thu nhận ảnh bao gồm: các thiết bị camera kỹ thuật số chuyên biệt dựa trên kết nối 1394 (DCAM), các thiết bị hỗ trợ kết nối USB (WEB camera, máy quay kỹ thuật số, cạc chuyển đổi TV…)
Hình 4. Thành phần hộp công cụ thu nhận ảnh
4.2.4.Một số ví dụ về xử lý ảnh với Matlab:
VD1:Đọc và hiển thị một bức ảnh
>> I=imread('C:\Documents and Settings\Hoang Anh Nguyen The\My Documents\My Pictures\me\xe_dien1.jpg');%doc file anh tu dong dan
>> imshow(I);%hien thi anh
VD2: Chuyển một ảnh RGB sang Gray
MATLAB
Image acquisition ToolboxM-file Functions
Hardware driver Adaptor
USB PCI IEEE 1394
USB
>> I_trans=rgb2gray(I);% chuyen tu dinh dang RGB sang Gray >> imshow(I_trans);%hien thi anh dinh dang Gray
>>imwrite(I_trans,’xe_dien_trans.bmp’); %luu anh vao thu muc lam viec cua Workspace
VD3: Bắt ảnh từ thiết bị và hiển thị theo thời gian thực function getsnapnimshow video=videoinput('winvideo',1); for i=1:100 set(video,'timeout',100); frame1=getsnapshot(video); hold on; imshow(frame1); end end
Khi sử dụng đoạn mã này ta chỉ việc gọi tên hàm. >> getsnapnimshow;
CHƯƠNG 5
THỰC NGHIỆM VÀ KẾT QUẢ