Hàm xử lý chuỗi matlab
Show CHƯƠNG 4: XỬ LÝ CÁC HÀM TOÁN HỌC Giảng viên: Hoàng Xuân DươngCHƯƠNG 4: XỬ LÝ CÁC HÀM TOÁN HỌC Giảng viên: Hoàng Xuân DươngCHƯƠNG 4: XỬ LÝ CÁC HÀM TOÁN HỌC Giảng viên: Hoàng Xuân DươngCHƯƠNG 4: XỬ LÝ CÁC HÀM TOÁN HỌC Giảng viên: Hoàng Xuân DươngHàm fplot dùng để vẽ hàm theo biến: Ví dụ: hamtruyen.m >> fplot(@hamtruyen,[0,2]) >> grid on function y=hamtruyen(x) y=2*x^2-3*x+1; CHƯƠNG 4: XỬ LÝ CÁC HÀM TOÁN HỌC Giảng viên: Hoàng Xuân Dương 146 CHƯƠNG 4: XỬ LÝ CÁC HÀM TOÁN HỌC Giảng viên: Hoàng Xuân Dương 157 IV. XỬ LÝ HÀM DƯỚI DẠNG CHUỖI BIỂU THỨC: 2. Tích phân:
Giới thiệu về matlab và xử lý ảnh 1.1 Khái niệm về Matlab Matlab là một ngôn ngữ lập trình thực hành bậc cao được sử dụng để giải các bài toán về kỹ thuật. Matlab tích hợp được việc tính toán, thể hiện kết quả, cho phép lập trình, giao diện làm việc rất dễ dàng cho người sử dụng. Dữ liệu cùng với thư viện được lập trình sẵn cho phép người sử dụng có thể có được những ứng dụng sau đây.
1.2 Tổng quan về cấu trúc dữ liệu của Matlab, các ứng dụng Matlab là một hệ thống tương giao, các phần tử dữ liệu là một mảng (mảng này không đòi hỏi về kích thước). Chúng cho phép giải quyết các vấn đề liên quan đến lập trình bằng máy tính, đặc biệt sử dụng các phép tính về ma trận hay vectơ và có thể sử dụng ngôn ngữ C học Fortran lập trình rồi thực hiện ứng dụng lập trình đó bằng các câu lệnh gọi từ Matlab. Matlab được viết tắt từ chữ “MATrix LABoratory” tức là thư viện về ma trận, từ đó phần mềm Matlab được viết nhằm cung cấp cho việc truy cập vào phần mềm ma trận một cách dễ dàng, phần mềm ma trận này được phát triển bởi các công trình Linpack và Eispack. Ngày nay Matlab được phát triển bởi Lapack và Artpack tạo nên một nghệ thuật phần mềm cho ma trận. 1.2.1 Dữ liệu Dữ liệu của Matlab thể hiện dưới dạng ma trận (hoặc mảng - tổng quát), và có các kiểu dữ liệu được liệt kê sau đây:
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. 1.2.2 Ứng dụng Matlab tạo điều kiện thuận lợi cho:
1.2.3 Toolbox là một công cụ quan trọng trong Matlab Công cụ này được Matlab cung cấp cho phép bạn ứng dụng các kỹ thuật để phân tích, thiết kế, mô phỏng các mô hình. Ta có thể tìm thấy toolbox ở trong mô trường làm việc của.
1.3 Hệ thống Matlab Hệ thống giao diện của Matlab được chia thành 5 phần: • Môi trường phát triển. Đây là nơi đặt các thanh công cụ, các phương tiện giúp chúng ta sử dụng các lệnh và các file, ta có thể liệt kê một số như sau. + Desktop. + Command Window. + Command History. + Browsers for viewinghelp. • Thư viện, các hàm toán học bao gồm các cấu trúc như tính tổng, sin cosin atan, atan2 etc..., các phép tính đơn giản đến các phép tính phức tạp như tính ma trận nghich đảo, trị riêng, chuyển đổi fourier, laplace, symbolic library. • Ngôn ngữ Matlab. Đó là các ngôn ngữ cao về ma trận và mảng, với các dòng lệnh, các hàm, cấu trúc dữ liệu vào, có thể lập trình hướng đối tượng. • Đồ hoạ trong Matlab. Bao gồm các câu lệnh thể hiện đồ họa trong môi trường 2D và 3D, tạo các hình ảnh chuyển động, cung cấp các giao diện tương tác giữa người sử dụng và máy tính. • Giao tiếp với các ngôn ngữ khác. Matlab cho phép tương tác với các ngôn ngữ khác như C, Fortran … 1.4 Làm quen với Matlab Trước tiên để khởi động Matlab bạn kích click vào biểu tượng file Matlab.exe, trên màn hình xuất hiện cửa sổ sau. (Xem hình vẽ 1.1) Cửa sổ đó chứa các thanh công cụ (Giao diện người và máy) cần thiết cho việc quản lý các files, các biến, cửa sổ lệnh, có thể coi desktop là các panel gồm các ô, vùng, quản lý và tác dụng của từng cửa sổ nhỏ được quản lý bởi desktop. Hình 1.1: Cửa sổ làm việc của matlab 1.5 Các cửa sổ làm việc của Matlab a) Cửa sổ Command Window Là cửa sổ giao tiếp chính của Matlab bởi đây là nơi nhập giá trị các biến, hiển thị giá trị, tính toán giá trị của biểu thức, thực thi các hàm có sẵn trong thư viện (dạng lệnh), hoặc các hàm (dạng function) do người dùng lập trình ra trong M-file. Các lệnh được nhập sau dấu nhắc “>>”, và nếu có sai sót trong quá trình gõ (nhập) lệnh thì hãy nhấn phím Enter cho đến khi nhận được dấu nhắc “>>”. Thực thi lệnh bằng nhấn phím Enter. Gõ các lệnh sau: >>A=pi/2; >>B=sin(A) B = 1 Hoặc chương trình soạn thảo trong M-file dưới đây:
b)Cửa sổ command History Các dòng mà bạn nhập vào trong cửa sổ Command Window (các dòng này có thể là dòng nhập biến, hoặc có thể là dòng lệnh thực hiện hàm nào đó) được giữ Hình 1.2 Cửa sổ Command History
Là cửa sổ thể hiện tên các biến bạn sử dụng cùng với kích thước vùng nhớ (số bytes), kiểu dữ liệu(lớp), các biến được giải phóng sau mỗi lần tắt chương trình. (xem hình 1.3)
Hình 1.3 Cửa sổ Workspace
khi chọn biến (giả sử là biến b) rồi click (hoặc click chuột vào nút cạnh nút save) ta được cửa sổ sau gọi là Variable Editor (xem hình 1.4) Hình 1.4 Cửa sổ Variable Editor Tiêu đề là tên biến b, định dạng dữ liệu ở ô có tên là: Numeric format, mặc định là dạng short, kích thước size là 1 by 3 (tức là một hàng và 3 cột) ta có thể thay đổi kích thước này bằng cách thay đổi giá trị có trong ô kích thước size. Dùng cửa sổ này để lưu các biến ở dưới là dữ liệu của biến b, ta có thể thay đổi chúng bằng cách thay đổi giá trị trong các ô đó. Tất cả các biến đều được lưu trong Workspace trong đó thể hiện cả kích thước (Size), số Bytes và kiểu dữ liệu (class) (8 bytes cho mỗi phần tử dữ liệu kiểu double cụ thể là 24 bytes dành cho b và 8 bytes dành cho a). d) Cửa sổ M-file Là một cửa sổ dùng để soạn thảo chương trình ứng dụng, để thực thi chương trình viết trong M-file bằng cách gõ tên của file chứa chương trình đó trong cửa sổ Commandwindow. Khi một chương trình viết trong M-file, thì tuỳ theo ứng dụng cụ thể, tuỳ theo người lập trình mà chương trình có thể viết dưới dạng sau: • Dạng Script file: Tức là chương trình gồm tập hợp các câu lệnh viết dưới dạng liệt kê, không có biến dữ liệu vào và biến lấy giá trị ra. • Dạng hàm function: có biến dữ liệu vào và biến ra. e) Đường dẫn thư mục: Nơi lưu giữ các files chương trình. 1.2 Giới thiệu khái quát về ảnh số 1.2.1 Các khái niệm cơ bản về ảnh Ảnh số là tập hợp hữu hạn các điểm ảnh với mức xám phù hợp dùng để mô tả ảnh gần với ảnh thật. Số điểm ảnh xác định độ phân giải của ảnh. Ảnh có độ phân giải càng cao thì càng thể hiện rõ nét các đặt điểm của tấm hình càng làm cho tấm ảnh trở nên thực và sắc nét hơn. a) Điểm ảnh (Picture Element) Điểm ảnh (Pixel) là một phần tử của ảnh số tại toạ độ (x, y) với độ xám hoặc màu nhất định. Kích thước và khoảng cách giữa các điểm ảnh đó được chọn thích hợp sao cho mắt người cảm nhận sự liên tục về không gian và mức xám (hoặc màu) của ảnh số gần như ảnh thật. Mỗi phần tử trong ma trận được gọi là một phần tử ảnh. b) Mức xám của ảnh Mức xám: Là kết quả của sự biến đổi tương ứng 1 giá trị độ sáng của 1 điểm ảnh với 1 giá trị nguyên dương. Thông thường nó xác định trong [0, 255] tuỳ thuộc vào giá trị mà mỗi điểm ảnh được biểu diễn. Các thang giá trị mức xám thông thường: 16, 32, 64, 128, 256 (Mức 256 là mức phổ dụng. Lý do: từ kỹ thuật máy tính dùng 1 byte (8 bit) để biểu diễn mức xám. Mức xám dùng 1 byte biểu diễn: 28 =256 mức, tức là từ 0 đến 255). c) Độ phân giải của ảnh Định nghĩa: Độ phân giải (Resolution) của ảnh là mật độ điểm ảnh được ấn định trên một ảnh số được hiển thị. Theo định nghĩa, khoảng cách giữa các điểm ảnh phải được chọn sao cho mắt người vẫn thấy được sự liên tục của ảnh. Việc lựa chọn khoảng cách thích hợp tạo nên một mật độ phân bổ, đó chính là độ phân giải và được phân bố theo trục x và y trong không gian hai chiều. Ví dụ: Độ phân giải của ảnh trên màn hình CGA (Color Graphic Adaptor) là một lưới điểm theo chiều ngang màn hình: 320 điểm chiều dọc * 200 điểm ảnh (320*200). Rõ ràng, cùng màn hình CGA 12” ta nhận thấy mịn hơn màn hình CGA 17” độ phân giải 320*200. Lý do: cùng một mật độ (độ phân giải) nhưng diện tích màn hình rộng hơn thì độ mịn (liên tục của các điểm) kém hơn. 2.2 Các cách phân loại ảnh Ảnh nhị phân: Giá trị xám của tất cả các điểm ảnh chỉ nhận giá trị 1 hoặc 0 như vậy mỗi điểm ảnh trong ảnh nhị phân được biểu diễn bởi 1 bit. Ảnh xám: Giá trị xám nằm trong [0, 255] như vậy mỗi điểm ảnh trong ảnh nhị phân được biểu diễn bởi 1 byte. Ảnh màu: - Hệ màu RGB: Một pixel được biểu diễn bằng 3 giá trị (R, G, B) trong đó R, G, B là một giá trị xám và được biểu biểu diễn bằng 1 byte. Khi đó ta có một ảnh 24 bits. P(x, y) = (R, G, B) - Hệ màu CMY: là phần bù của hệ màu RGB (C, M, Y) = (1, 1, 1) - (R, G, B) Hay C+R=M+G=Y+B=1 => Hệ màu này thường được dùng trong máy in. - Hệ màu CMYK: trong đó K là độ đậm nhạt của màu K= min(C, M, Y) P(x, y) = (C-K, M-K, V-K, K). Ví dụ: Với (C1, M1, Y1) ta sẽ có K=min(C1, M1, Y1) vậy CMYK=(C1-K, M1-K, Y1-K, K) 3 Xử lý ảnh với Matlab 3.1 Xử lý ảnh Các bước cần thiết trong xử lý ảnh. Đầu tiên, ảnh tự nhiên từ thế giới ngoài được thu nhận qua các thiết bị thu (như Camera, máy chụp ảnh). Trước đây, ảnh thu qua Camera là các ảnh tương tự (loại Camera ống kiểu CCIR). Gần đây, với sự phát triển của công nghệ, ảnh màu hoặc đen trắng được lấy ra từ Camera, sau đó nó được chuyển trực tiếp thành ảnh số tạo thuận lợi cho xử lý tiếp theo. Máy ảnh số hiện nay là một thí dụ gần gũi. Mặt khác, ảnh cũng có thể tiếp nhận từ vệ tinh; có thể quét từ ảnh chụp bằng máy quét ảnh. Hình dưới đây mô tả các bước cơ bản trong xử lý ảnh. Hình 1.5 Các bước cơ bản trong xử lý ảnh 3.2 Các giai đoạn xử lý ảnh a) Thu nhận ảnh (Image Acquisition) - Ảnh được thu từ nhiều nguồn khác nhau:máy ảnh, máy quay phim, máy quét, ảnh vệ tinh… - Mục đích: biến đổi thông tin hình ảnh về các cấu trúc được lưu trữ trong máy tính, có thể hiển thị ra các thiết bị ngoại vi như là máy in, màn hình… - Gồm hai tiến trình: + Biến đổi năng lượng quang học thành năng lượng điện. + Tổng hợp năng lượng điện thành ảnh hoặc ma trận số. b) Tiền xử lý (Image Processing) - Là quá trình sử dụng các kỹ thuật xử lý ảnh để làm ảnh tốt lên theo mục đích sử dụng. - Mục đích: + Điều chỉnh độ chiếu sáng để khắc phục hậu quả của việc chiếu sáng không đều. + Giảm nhỏ thành phần nhiễu của ảnh tức là các đối tượng xuất hiện ngoài ý muốn. + Hiệu chỉnh giá trị độ sáng giữa nền và đối tượng. + Chuẩn hoá độ lớn, màu, dạng của ảnh. +Điều chỉnh bộ lọc để khuyếch đại và nén các tần số. c) Phân đoạn (Segmentation) - Là quá trình phân chia nội dung các đối tượng cần khảo sát ra khỏi ảnh. - Phân chia các đối tượng tiếp giáp nhau. - Phân tách các đối tượng riêng biệt thành các đối tượng con. d) Biểu diễn ảnh (Image Representation) Đầu ra ảnh sau phân đoạn chứa các điểm ảnh của vùng ảnh (ảnh đã phân đoạn) cộng với mã liên kết với các vùng lận cận. Việc biến đổi các số liệu này thành dạng thích hợp là cần thiết cho xử lý tiếp theo bằng máy tính. Việc chọn các tính chất để thể hiện ảnh gọi là trích chọn đặc trưng (Feature Selection) gắn với việc tách các đặc tính của ảnh dưới dạng các thông tin định lượng hoặc làm cơ sở để phân biệt lớp đối tượng này với đối tượng khác trong phạm vi ảnh nhận được. Ví dụ: trong nhận dạng ký tự trên phong bì thư, chúng ta miêu tả các đặc trưng của từng ký tự giúp phân biệt ký tự này với ký tự khác. e) Nhận dạng và nội suy ảnh (Image Recognition and Interpretation) Nhận dạng ảnh là quá trình xác định ảnh. Quá trình này thường thu được bằng cách so sánh với mẫu chuẩn đã được học (hoặc lưu) từ trước. Nội suy là phán đoán theo ý nghĩa trên cơ sở nhận dạng. Ví dụ: một loạt chữ số và nét gạch ngang trên phong bì thư có thể được nội suy thành mã điện thoại. Có nhiều cách phân loai ảnh khác nhau về ảnh. Theo lý thuyết về nhận dạng, các mô hình toán học về ảnh được phân theo hai loại nhận dạng ảnh cơ bản: - Nhận dạng theo tham số. - Nhận dạng theo cấu trúc. Một số đối tượng nhận dạng khá phổ biến hiện nay đang được áp dụng trong khoa học và công nghệ là: nhận dạng ký tự (chữ in, chữ viết tay, chữ ký điện tử), nhận dạng văn bản (Text), nhận dạng vân tay, nhận dạng mã vạch, nhận dạng mặt người… f) Cơ sở tri thức (Knowledge Base) Như đã nói ở trên, ảnh là một đối tượng khá phức tạp về đường nét, độ sáng tối, dung lượng điểm ảnh, môi trường để thu ảnh phong phú kéo theo nhiễu. Trong nhiều khâu xử lý và phân tích ảnh ngoài việc đơn giản hóa các phương pháp toán học đảm bảo tiện lợi cho xử lý, người ta mong muốn bắt chước quy trình tiếp nhận và xử lý ảnh theo cách của con người. Trong các bước xử lý đó, nhiều khâu hiện nay đã xử lý theo các phương pháp trí tuệ con người. Vì vậy, ở đây các cơ sở tri thức được phát huy.
Các hàm xử lý ảnh trong matlab Các kiểu ảnh trong Matlaba) Ảnh được định chỉ số (Indexed Images) Một bản đồ màu thường được chứa cùng với ảnh chỉ số và được tự động nạp cùng với ảnh khi sử dụng hàm imread để đọc ảnh. Tuy nhiên, ta không bị giới hạn khi sử dụng bản đồ màu mặc định, ta có thể sử dụng bất kì bản đồ màu nào. b) Ảnh cường độ (Intensity Images) Những phần tử trong ma trận cường độ đại diện cho các cường độ khác nhau hoặc độ xám. Những điểm có cường độ bằng 0 thường được đại diện bằng màu đen và cường độ 1,255 hoặc 65535 thường đại diện cho cường độ cao nhất hay màu trắng. c) Ảnh nhị phân (Binary Images) d) Ảnh RGB (RGB Images) Các hàm xử lý ảnh cơ bản trong Matlaba) Đọc và ghi dữ liệu ảnh
- Hàm imread đọc một ảnh từ bất kì định dạng nào được trợ giúp trong bất kì chiều sâu bit nào được trợ giúp. Hầu hết các file ảnh sử dụng 8 bit để chứa giá trị của pixel. Khi chúng được đọc vào bộ nhớ, Matlab chứa chúng dưới dạng uint8. Với các file trợ giúp 16 bít dữ liệu, PNG và TIFF, Matlab chứa chúng dưới dạng uint16. Chú ý: Với ảnh chỉ số, imread luôn luôn đọc bản đồ màu vào trong một chuỗi thuộc lớp double, thậm chí
mảng ảnh tự nó thuộc lớp uint8 hay uint16 RGB=imread(‘football.jpg’); Trong ví dụ này, imread sẽ nhận ra định dạng file để sử dụng từ tên file. Ta cũng có thể chỉ ra định dạng file như một tham số trong hàm imread. Matlab trợ giúp rất nhiều định dạng đồ hoạ thông dụng chẳng hạn: BMP, GIF, JPEG, PNG, TIFF … Để biết thêm các kiểu gọi hàm và tham số truyền vào, xem trợ giúp online của Matlab.
- Matlab trợ giúp một số định dạng file đồ hoạ chẳng hạn như: HDF và TIFF, chúng chứa nhiều ảnh. Theo mặc định, imread chỉ trợ giúp ảnh đầu tiên trong file. Để nhập thêm các ảnh từ file, sử dụng cú pháp được trợ giúp bởi định dạng file. Chẳng hạn, khi được sử dụng với TIFF, ta có thể sử dụng một giá trị chỉ số với imread để chỉ ra ảnh mà ta muốn nhập
vào. mri = uint8(zeros(128,128,1,27)); % preallocate 4-D array - Khi file chứa nhiều ảnh theo một số kiểu nhất định chẳng hạn theo thứ tự thời gian, ta có thể lưu ảnh trong Matlab dưới dạng mảng 4 chiều. Tất cả các ảnh phải có cùng kích thước.
-
Hàm imwrite sẽ ghi một ảnh tới một file đồ hoạ dưới một trong các định dạng được trợ giúp. Cấu trúc cơ bản nhất của imwrite sẽ yêu cầu một biến ảnh và tên file. Nếu ta gộp một phần mở rộng trong tên file, Matlab sẽ nhận ra định dạng mong muốn từ nó. load clown whos Name Size Bytes Class X 200x320 512000 double array caption 2x1 4 char array map 81x3 1944 double array Grand total is 64245 elements using 513948 bytes imwrite(X,map,'clown.bmp')
- Khi sử dụng imwrite với một số định dạng đồ hoạ, ta có thể chỉ ra các tham số phụ. Chẳng hạn, với định dạng PNG ta có thể chỉ ra độ sâu bit như một tham số phụ. Ví dụ sau sẽ chi một ảnh cường độ I với một file ảnh 4 bit PNG. imwrite(I,'clown.png','BitDepth',4 ); - Để biết thêm các cấu trúc khác của hàm xem phần trợ giúp trực tuyến của Matlab.
- Trong
một số định dạng file, một ảnh nhị phân có thể được lưu trong một định dạng 1 bit. Nếu định dạng file trợ giúp nó, Matlab ghi ảnh nhị phân như ảnh 1 bit theo mặc định. Khi ta đọc một ảnh nhị phân với định dạng 1 bit, Matlab đại diện nó trong không gian làm việc như một mảng lôgic. BW = imread('text.png');
Để kiểm tra chiều sâu bit của file test.tif, gọi hàm iminfo và kiểm tra trường BitDepth của nó: info = imfinfo('test.tif');info.BitDepth ans =1 Chú ý: Khi ghi file nhị phân, Matlab thiết lập trường ColorType thành ‘grayscale’.
- Hàm imwrite sử dụng luật sau đây để quyết định lớp lưu trữ được sử dụng trong ảnh kết quả: + logical: Nếu định dạng ảnh ra (Output Image) được chỉ rõ là trợ giúp ảnh 1 bit, hàm imwrite tạo một file ảnh 1 bit. Nếu định dạng ảnh ra được chỉ rõ là không trợ giúp ảnh 1 bit (như JPEG), hàm imwrite chuyển ảnh tới một ảnh thuộc lớp uint8. + uint8: Nếu định dạng ảnh ra được chỉ rõ là trợ giúp ảnh 8 bit, hàm imwrite tạo một ảnh 8 bit + uint16: Nếu định dạng ảnh ra được chỉ rõ trợ giúp ảnh 16 bit (PNG hoặc TIFF), hàm imwrite tạo một ảnh 16 bit. Nếu định dạng ảnh ra không trợ giúp ảnh 16 bit, hàm chuyển đổi dữ liệu ảnh tới lớp uint8 và tạo một ảnh 8 bit. + double: Matlab chuyển dữ liệu ảnh tới dạng uint8 và tạo một ảnh 8 bit bởi vì hầu hết các file ảnh sử dụng định dạng 8 bit.
- Hàm imfinfo cho phép ta có thể nhận được thông tin về một file ảnh được trợ giúp bởi toolbox.
b) Hiển thị ảnh
- Để hiển thị một ảnh sử dụng hàm imview, dùng hàm imview, chỉ rõ ảnh mà ta muốn hiển thị. Ta có thể sử dụng imview để hiển thị một ảnh mà đã được nhập vào trong không gian làm việc của Matlab. moonfig = imread('moon.tif'); imview(moonfig); Ta cũng có thể chỉ định tên của file ảnh như trong ví dụ sau: imview('moon.tif'); - File ảnh phải có mặt trong thư mục hiện tại hoặc trong đường dẫn của Matlab. Cấu trúc này có thể hữu ích cho việc quét qua nhiều ảnh. Tuy nhiên, lưu ý, khi sử dụng cấu trúc này, dữ liệu ảnh không được lưu trong không gian làm việc của Matlab. - Nếu ta gọi hàm imview mà không chỉ ra mất kì tham số nào, nó sẽ hiển thị một hộp chọn file cho phép ta chỉ ra tên file muốn hiển thị.
- Nếu ta chỉ ra một file mà chứa nhiều ảnh, hàm imview chỉ hiển thị ảnh đầu tiên trong file đó. Để xem tất cả các ảnh trong file, sử dụng hàm imread để nhập mỗi ảnh vào trong không gian làm việc của Matlab sau đó gọi hàm imview nhiều lần để hiển thị mỗi ảnh riêng biệt.
- Để xem ảnh, ta có thể sử dụng hàm imshow thay cho imview. Ta sử dụng imshow để hiển thị một ảnh đã được nhập vào trong không gian làm việc như ví dụ sau: moon = imread('moon.tif'); Ta cũng có thể chỉ ra tên của file ảnh như một tham số truyền vào cho hàm như ví dụ sau: imshow('moon.tif'); Khi sử dụng cấu trúc này thì dữ liệu ảnh không được nhập vào trong không gian làm việc. Tuy nhiên, ta có thể mang ảnh vào trong không gian làm việc bằng cách sử dụng hàm getimage. Hàm này sẽ nhận dữ liệu ảnh từ handle của một đối tượng ảnh hiện tại. Chẳng hạn: moon = getimage; Sẽ gán dữ liệu ảnh từ moon.tif vào biến moon. c) Các hàm chuyển đổi kiểu ảnh - Với các thao tác nhất định sẽ thật hữu ích khi có thể chuyển đổi ảnh từ dạng này sang dạng khác. Chẳng hạn, nếu ta muốn lọc một màu ảnh được lưu trữ
dưới dạng ảnh chỉ số đầu tiên ta nên chuyển đổi nó thành dạng ảnh RGB. - Danh sách sau đây sẽ liệt kê các hàm được sử dụng trong việc chuyển đổi kiểu ảnh:
- Ta cũng có thể thực hiện các phép chuyển đổi kiểu chỉ sử dụng cú pháp của Matlab. Chẳng hạn, ta có thể chuyển đổi một ảnh cường độ sang ảnh RGB bằng cách ghép nối 3 phần copy của ma trận ảnh gốc giữa 3 chiều: RGB=cat(3,I,I,I ); - Ảnh RGB thu được có các
ma trận đồng nhất cho các mặt phẳng R, G, B vì vậy ảnh hiển thị giống như bóng xám.
- Toolbox xử lý ảnh biểu diễn màu sắc như các giá trị RGB ( trực tiếp trong ảnh RGB hoặc gián tiếp trong ảnh chỉ số ). Tuy nhiên, có các phương
pháp khác cho việc biểu diễn màu sắc. Chẳng hạn, một màu có thể được đại diện bởi các giá trị hue, saturation và các giá trị thành phần (HSV). Các phương pháp khác cho việc biểu diễn màu được gọi là không gian màu. d) Chuyển đổi định dạng các file ảnh bitmap = imread('mybitmap.bmp','bmp'); imwrite(bitmap,'mybitmap.png','png'); e) Số học ảnh - Số học ảnh sự ứng dụng của các phép toán số học chuẩn như: cộng, trừ, nhân, chia lên ảnh. Số học ảnh được sử dụng nhiều trong xử lý ảnh trong cả các bước ban đầu lẫn các thao tác phức tạp hơn. Chẳng hạn, trừ ảnh có thể được sử dụng để phát hiện sự khác nhau giữa hai hoặc nhiều ảnh của cùng một cảnh hoặc một vật.
- Kết quả của số học nguyên có thể dễ dàng tràn số dùng cho lưu trữ. Chẳng hạn, giá trị cực đại ta có thể lưu trữ trong uint8 là 255. Các phép toán số học có thể trả về giá trị phân số - không được biểu diễn bởi một chuỗi số nguyên. + Giá trị vượt quá khoảng của kiểu số nguyên bị cắt bỏ tới khoảng đó
- Ta có thể sử dụng các hàm số học ảnh kết hợp để thực hiện một chuỗi các phép toán. Chẳng hạn để tính giá trị trung bình của hai ảnh: I = imread('rice.png'); I2 = imread('cameraman.tif'); K = imdivide(imadd(I,I2), 2); % not recommended - Khi được sử dụng với kiểu uint8 hay uint16, mỗi hàm số học cắt kết quả của nó trước khi truyền nó cho hàm thiếp theo. Sự cắt bỏ này có thể giảm đáng kể lượng thông tin trong ảnh cuối cùng. Một cách làm tốt hơn để thực hiện một chuỗi các tính toán là sử dụng hàm imlincomb. Hàm này thi hành tất cả các phép toán số học trong sự kết hợp tuyến tính của độ chính xác kép và chỉ cắt bỏ kết quả cuối cùng: K = imlincomb(.5,I,.5,I2); % recommended
Biến đổi không gian ảnh Biến đổi không gian ảnh là thực hiện ánh xạ giữa vị trí các pixel trong ảnh vào với các pixel trong ảnh ra. a) Bảng thuật ngữ Aliasing : Răng cưa - xuất hiện khi giảm kích thước ảnh. Khi kích thước của một ảnh bị giảm, các pixel gốc bị lấy mẫu giảm để tạo ra ít pixel hơn. Aliasing xảy ra như kết quả của việc giảm kích thước ảnh thường xuất hiện dưới dạng bậc thang ( đặc biệt trong các ảnh có độ tương phản cao ) Antialiasing : Các biện pháp chống răng cưa cho ảnh Bicubic interpolation : Giá trị của các pixel ra được tính toán từ giá trị trung bình của 4x4 pixel lân cận Bilinear interpolation : Gía trị của pixel ra được tính toán từ giá trị trung bình của 2x2 pixel lân cận Geometric operation : Một thao tác sửa đổi quan hệ hình học gữa các pixel trong một ảnh. Chẳng hạn thay đổi kích thước ảnh, quay ảnh và xén ảnh Interpolation : Quá trình được sử dụng để ước lượng giá trị ảnh ở một vị trí giữa các pixel Nearest-neighbor interpolation : Các giá trị pixel ra được gán giá trị của pixel nằm trong một vùng gần pixel đó. b) Nội suy Nội suy là quá trình sử dụng để ước lượng một giá trị ảnh ở một vị trí giữa các pixel. Chẳng hạn, nếu ta thay đổi kích thước một ảnh, nó sẽ chứa nhiều pixel hơn ảnh gốc, toolbox sử dụng sự nội suy để tính giá trị cho các pixel thêm vào. Hàm imresize và imrotate sử dụng nội suy hai chiều để thực hiện thao tác của mình. Hàm improfile cũng sử dụng sự nội suy hoá.
- Toolbox sử lý ảnh cung cấp 3 cách nội suy hoá + Với nội suy các pixel gần nhất: pixel ra được gán giá trị của các pixel ở gần nó nhất. Các pixel khác không được xem xét. + Nội suy song tuyến tính, giá trị của pixel ra là giá trị trung bình theo trọng số của 2x2 pixel lân cận. + Nội suy song khối: giá trị của pixel ra là trung bình có trọng số của 4x4 pixel lân cận.
- Các hàm sử dụng tuyến tính yêu cầu một tham số chỉ ra phương pháp nội suy. Với hầu hết các hàm, phương pháp mặc định được sử dụng là nearest-neighbor interpolation. Phương pháp này tạo ra một kết quả có thể chấp nhận được cho hầu hết các ảnh và là phương pháp duy nhất thích hợp với ảnh chỉ số. Với ảnh cường độ hay RGB, tuy nhiên ta thường chỉ ra kiểu song tuyến tính hoặc song khối bởi vì những phương pháp này cho kết quả tốt hơn + Nếu lớp ảnh vào là double, ảnh ra là một ảnh đen trắng thuộc lớp double. Ảnh ra không là ảnh nhị phân bởi vì nó bao gồm các giá trị khác 0 và 1. + Nếu ảnh vào là uint8, ảnh ra là một ảnh nhị phân thuộc lớp uint8. Giá trị của các pixel được nội suy được làm tròn thành 0 hoặc 1. Vì vậy , ảnh ra thuộc lớp uint8. Nếu sử dụng phương pháp nearest-neighbor interpolation, ảnh ra luôn là ảnh nhị phân bởi vì những giá trị của pixel được nội suy được lấy trực tiếp từ ảnh vào. c) Thay đổi kích thước ảnh - Để thay đổi kích thước của một ảnh,
sử dụng hàm imresize. Sử dụng hàm này ta có thể:
- Sử dụng hàm imresize, ta chó thể chỉ ra kích thước của ảnh kết quả theo hai cách:
- Để mở rộng một ảnh, chỉ ra hệ số phóng đại lớn hơn 1. Để thu nhỏ một ảnh, chỉ ra hệ số phóng đại nằm giữa 0 và 1. Chẳng hạn, lệnh sau tăng kích thước của ảnh I lên 1.25 lần: Hình 1 Ảnh trước và sau khi imresize I = imread('circuit.tif');
- Ta có thể chỉ ra kích thước của ảnh ra bằng cách truyền một véc tơ chứa số lượng hàng và cột của ảnh sau cùng. Những lệnh sau đây tạo một ảnh ra Y với 100 hàng và 150 cột. Y = imresize(X,[100 150]) Chú ý: Nếu kích thước được chỉ ra không có cùng tỉ lệ với ảnh vào, ảnh ra sẽ bị biến dạng
- Theo mặc định, hàm imresize sử dụng phương pháp nội suy các pixel gần nhất (nearest – neighbor interpolation) để tính giá trị các pixel của ảnh ra. Tuy nhiên, ta có thể chỉ định các phương pháp nội suy khác. Bảng sau đây liệt kê các phương pháp nội suy được trợ giúp theo thứ tự của độ phức tạp.
Trong ví dụ sau, hàm imresize sử dụng phương pháp nội suy song tuyến tính: Y=imresize(X, [100 150],’bilinear’);
- Việc giảm kích thước (hình học) của một ảnh có thể gây ra những ảnh hưởng nhất định lên ảnh chẳng hạn như hiện tượng xuất hiện răng cưa tại biên của ảnh . Điều này là do thông tin luôn bị mất khi ta giảm kích thước một ảnh. Răng cưa xuất hiện như những gợn sóng trong ảnh sau
cùng. B = imresize(A,m) B = imresize(A,m,method) B = imresize(A,[mrows ncols],method) B = imresize(...,method,n) B = imresize(...,method,h)
+ B=imresize(A,m): Trả lại một ảnh B lớn gấp m lần ảnh A (kích thước hình học) sử
dụng phương pháp nội suy mặc định (nearest - neighbor interpolcation). A có thể là một ảnh chỉ số, ảnh đen trắng, RGB hoặc ảnh nhị phân. Nếu m nằm giữa 0 và 1, B sẽ nhỏ hơn A. Nếu m lớn hơn 1, B sẽ lớn hơn A. d) Quay ảnh - Để quay một ảnh, sử dụng hàm imrotate. Hàm này chấp nhận hai tham số
chính: J=imrotate(I,35 ) ; - Một số tham số tuỳ chọn ta có thể truyền vào cho hàm bao gồm:
- Theo mặc định, hàm imrotate sử dụng phương pháp nội suy thứ nhất (nearest-neighbor interpolation) để tính giá trị các pixel trong ảnh ra. Tuy nhiên, ta có thể chỉ ra các phương pháp nội suy khác như: ‘bilinear ‘,’bicubic’ I = imread('circuit.tif'); J = imrotate(I,35,'bilinear'); imshow(I) figure, imshow(J) Hình 2 Ảnh trước và sau khi imrotate
Theo mặc định, hàm imrotate tạo một ảnh ra đủ lớn để có thể bao gồm toàn bộ các pixel của ảnh gốc. Các pixel nằm ngoài biên của ảnh gốc được gán giá trị 0 như thể nền màu đen trong ảnh ra. Nếu ta chỉ ra chuỗi ‘crop’ như một tham số, hàm imrotate sẽ xén ảnh ra tới kích thước như ảnh vào.
Cú pháp của nó như sau: B = imrotate(A,angle) B = imrotate(A,angle,method) B = imrotate(A,angle,method,bbox)
+ B=imrotate(A,angle): Quay ảnh A một góc angle độ theo chiều ngược chiều kim đồng hồ, sử dụng phương pháp nội suy các pixel gần nhất. Để quay theo chiều kim đồng hồ hãy
truyền giá trị âm cho tham số angle I = fitsread('solarspectra.fts'); I = mat2gray(I); J = imrotate(I,-1,'bilinear','crop'); imshow(I) figure, imshow(J) Hình 3 Ảnh được quay theo chiều ngang e) Xén ảnh (image cropping) - Để trích một vùng chữ nhật của một ảnh, sử dụng hàm imcrop. Hàm imcrop chấp nhận hai tham số chính: imshow circuit.tif I=imcrop; Imshow(I); Hình 4 Ảnh trước và sau khi imcrop
- Cú pháp của nó như sau: I2 = imcrop(I) X2 = imcrop(X,map) RGB2 = imcrop(RGB) I2 = imcrop(I,rect) X2 = imcrop(X,map,rect) RGB2 = imcrop(RGB,rect) [...] = imcrop(x,y,...) [A,rect] = imcrop(...) [x,y,A,rect] = imcrop(...)
- Hàm imcrop xén một ảnh theo một hình chữ nhật được chỉ định. I2=imcrop(I) ; X2=imcrop(X,map); RGB2=imcrop(RGB); Hàm
imcrop sẽ hiển thị ảnh I và đợi ta chỉ ra hình chữ nhật cần xén bằng chuột I2 = imcrop(I,rect) X2 = imcrop(X,map,rect) RGB2 = imcrop(RGB,rect) Trong đó: rect là một vector bốn phần tử dạng [xmin ymin width height], những giá trị này được chỉ ra trong toạ độ không gian. Để chỉ định các toạ độ không theo toạ độ không gian cho ảnh vào, đặt trước các tham số khác với 2 vector hai phần tử chỉ ra Xdata và Ydata. Chẳng hạn: […]=imcrop(x,y,…) - Nếu ta cung cấp các tham số ra phụ, hàm imcrop sẽ trả lại thông tin về vùng chữ nhật được chọn và hệ toạ độ của ảnh vào. Chẳng hạn: [A,rect] = imcrop(...) A là ảnh ra, x và y là Xdata và Ydata của ảnh vào
-
Do rect là một tập hợp các toạ độ không gian, các phần tử width và height trong rect không luôn luôn tương ứng chính xác với kích thước của ảnh ra. Chẳng I = imread('circuit.tif'); I2 = imcrop(I,[75 68 130 112]); imview(I), imview(I2) Hình 5 Ảnh trước và sau khi imcrop theo 1 tọa độ cho trước f) Các biến đổi ảnh thông dụng - Để thực hiện các biến đổi không gian ảnh 2 chiều, sử dụng hàm imtransform. Hàm này chấp nhận hai tham số chính:
- Ta chỉ ra kiểu biến đổi trong cấu trúc TFORM. Có hai cách để tạo một cấu trúc TFORM:
- Khi sử dụng hàm này, ta chỉ ra kiểu biến đổi ta muốn thực hiện. Các kiểu biến đổi mà maketform trợ giúp bao gồm:
- Ta sử dụng hàm này để tạo ra cấu trúc TFORM khi ta muốn thi hành một biến đổi cần khít với các điểm dữ liệu như một biến đổi đa thức.
- Khi ta đã định nghĩa một cấu trúc TFORM, ta có thể thi hành một sự biến đổi bằng cách gọi hàm imtransform. Chẳng hạn, đoạn mã sau sử dụng hàm này để thi hành một biến đổi projective cho một ảnh bàn cờ: I = checkerboard(20,1,1); figure; imshow(I) T = maketform('projective',[1 1; 41 1; 41 41; 1 41],... [5 5; 40 5; 35 30; -10 30]); R = makeresampler('cubic','circular'); K = imtransform(I,T,R,'Size',[100 100],'XYScale',1); figure, imshow(K) Hình 6 Ảnh trước và sau khi imtransforms - Các tuỳ chọn của hàm imtransform cho phép ta điều khiển nhiều khía cạnh của việc biến đổi. Chẳng hạn, chú ý rằng ảnh bị biến đổi xuất hiện nhiều bản copy của ảnh gốc. Điều này nhận được bởi tuỳ chon ‘size’.Xem thêm Help Online
- Áp đặt một biến đổi không gian 2 chiều lên một ảnh
B = imtransform(A,TFORM)
+ B=imtransform(A,TFORM ): biến đổi ảnh A theo cấu trúc được định nghĩa trong TFORM. Cấu trúc này được trả về từ hàm maketform hoặc cp2tform. Nếu ndims(A)>2 như các ảnh RGB thì cùng một biến đổi không gian 2
chiều được áp đặt tới tất cả các mặt phẳng theo chiều cao hơn.
Ví dụ I = imread('cameraman.tif'); tform = maketform('affine',[1 0 0;.5 1 0; 0 0 1]); J = imtransform(I,tform); imshow(I), figure, imshow(J) Hình 7 Ảnh trước và sau khi imtransforms với 1 cường độ ảnh
|