xử lý ảnh trong matlab

83 2K 5
xử lý ảnh trong  matlab

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

TỔNG QUAN VỀ CÔNG CỤ MATLAB 2 TÍN HIỆU RỜI RẠC 20 PHÉP BIẾN ĐỔI FOURIER 35 BIỂU DIỄN HỆ THỐNG VÀ TÍN HIỆU RỜI RẠC TRONG MIỀN Z 56 BỘ LỌC SỐ 67 XỬ LÝ ẢNH TRONG MATLAB 74 1 TỔNG QUAN VỀ CÔNG CỤ MATLAB 1.1. Giới thiệu MatLab (Matrix Laboratory) là một ngôn ngữ lập trình cấp cao dạng thông dịch, được phát triển bởi MathWorks. Matlab được ứng dụng để giải quyết các bài toán khác nhau đặt biệt là các hệ phương trình tuyến tính, phi tuyến và đặc biệt là các bài toán ma trận với kết quả nhanh chóng và chính xác. Matlab là một công cụ mạnh và đáp ứng được cho nhiều lĩnh vựng đa dạng như các ngành về kỹ thuật như điện, điện tử, vật lý, hóa học v.v cho đến các ngành về kinh tế như thống kê, kế toán v.v Cửa sổ chính làm việc trong Matlab bao gồm 3 cửa sổ chính là: Cửa sổ lệnh (Command Window), cửa sổ thư mục – vùng làm việc (Current Directory – Workspace) và cửa sổ chứa tập lệnh đã được sử dụng (Command History) Matlab cho phép tính toán số, tính toán ma trận, vẽ đồ thị hàm số để biểu diễn thông tin dưới dạng 2D hay 3D. Matlab chứa các toolbox, cỏc gói chương trình (thư viện) sử dụng cho các lĩnh vực rất đa dạng như: xử lý tín hiệu, nhận dạng hệ thống, xử lý 2 ảnh, mạng nơron, tối ưu hóa v.v… Matlab có thể giao tiếp với các chương trình và các và các ngôn ngữ khác. Matlab có thể gọi các hàm được viết bằng C hay Java. 1.2. Sử dụng biến trong matlab 1.2.1. Quy cách đặt tên Cũng giống như trong các ngôn ngữ lập trình khác, Matlab có những quy định riêng về cách đặt tên biến: • Tên biến phải là một từ, không chưa dấu cách, tên biến tối đa là 31 ký tự • Tên biến phân biệt chữ hoa và chữ thường • Tên biến bắt đầu bằng chữ cái • Ký tự dấu chấm “.” không được sử dụng để trong đặt tên biến. Trong Matlab có những biến đặc biệt trong bảng sau: Các biến đặc biệt Giá trị ans Biến mặc định trả về kết quả pi số pi esp Số nhỏ nhất lớn hơn 0 inf Để chỉ số vô cùng NaN hoặc nan Để chỉ số ko xác định như kết quả của 0/0 i và j Số phức, i=j=sqrt(-1) realmin Số dấu chấm động nhỏ nhất (2 -1022 = 2.2251e-308) realmax Số dấu chấm động lớn nhất (2 1024 = 1.7977e+308) 1.2.2. Véc tơ và matrận Các bài toán trong Matlab thông thường được quy về việc tính toán và xử lý trên ma trận. Các biến, dữ liệu trong Matlab được coi như một ma trận thực hoặc phức. Ví dụ, một giá trị vô hướng được coi là một mà trận có kích thước 1x1, một vector cột là một chỉ có 1 cột, một véc tơ hàng, hay một chuỗi số là một ma trận chỉ có một hàng. Một ma trận có kích thước (m x n) trong Matlab là một ma trận có m hàng và n cột. 3 Ví dụ, tạo một ma trận trong Matlab: >> M=[3 4 5 ; 2 1 4] M = 3 4 5 2 1 4 Như vậy giá trị nhập đã được gán cho các thành phần của ma trận, các phần tử trong mỗi cột được cách nhau bằng một dấu cách (space) hoặc một dấu phảy, Các hàng được cách nhau bằng dấu “;”. Về cỏch đỏnh chỉ số, trong Matlab, các phần tử được đánh chỉ số từ 1. Xét trong ví dụ trên: >> M(1,1) ans = 3 >> M(2,3) ans = 4 Xâu ký tự cúng có thể được gán vào phần tử của ma trận, tuy nhiên số ký tự trên mỗi hàng phải bằng nhau Ví dụ: >> M=['John','Peter';'David','Joe'] ??? Error using ==> vertcat All rows in the bracketed expression must have the same number of columns. Ví dụ: >> M=['John','pete21';'adam3','ever4'] M = Johnpete21 adam3ever4 M sẽ là một ma trận chứa ký tự của 2 xâu, và các phần tử ma trận sẽ là các ký tự của 2 xõu đú. 4 Ví dụ: >> M(1,1) ans = J >> M(2,2) ans = e Trong trường hợp chúng ta muốn tạo một vector, trong đó các giá trị cách đều nhau ví dụ (1,2,3,4,5,6…20) chúng ta có thể sử dụng công thức: M=(start:step:end) Ví dụ: >> M=(1:2:10) M = 1 3 5 7 9 Trong trường hợp step=1, ta có thể sử dụng công thức thu gọn: M=(start:end) Ví dụ: >> M=[1:3;4:6] M = 1 2 3 4 5 6 Kích thước của ma trận cũng có thể thay đổi, xét trong ví dụ trên nếu ta gán M(3,3)=1, ta sẽ có: >> M(3,3)=1 M = 1 2 3 4 5 6 0 0 1 Tương tự ma trận có thể mở rộng kích thước bằng cách gộp các ma trận lại. Ví dụ: 5 >> N=ones(3) N = 1 1 1 1 1 1 1 1 1 >> M=[M,N] M = 1 2 3 1 1 1 4 5 6 1 1 1 0 0 1 1 1 1 Hoặc: >> M=[M;N] M = 1 2 3 4 5 6 0 0 2 1 1 1 1 1 1 1 1 1 1.3. Một số lệnh thông dụng trong Matlab • clc: Xóa màn hình cửa sổ lệnh • who: xem tên biến trong không gian làm việc của Matlab Ví dụ: >> who Your variables are: A M N • whos: xem chi tiết hơn về các biến Ví dụ: >> whos Name Size Bytes Class A 1x10 80 double array 6 M 6x3 144 double array N 3x3 72 double array Grand total is 37 elements using 296 bytes • clear: Xúa các biến trong bộ nhớ của Matlab • help: yêu cầu sự giúp đỡ 1.4. Các toán tử và hàm 1.4.1. Các toán tử và các hàm cơ bản Tương tự như máy tính đơn gản thông thường, Matlab có thể thực hiện các phép toán đơn giản, cụ thể như trong bảng dưới đây: Toán tử Ký hiệu Phép cộng + Phép trừ - Phép nhân * Phép chia / hoặc \ Phép lũy thừa ^ Chuyển vị ma trận ' Các toán tử quan hệ =, >, <, >=, <=, == Các toán tử logic &, |, ~ Matlab cũng cung cấp hàm toán học, các hàm đặc biệt và các thuật toán hữu ich, dưới đây là một số hàm thông dụng nhất: Tên hàm Ý nghĩa sin(x), cos(x), tan(x) Các hàm lượng giác asin(x), acos(x), atan(x) Các hàm lượng giác ngược exp(x) Hàm mũ e x log(x), log10(x), log(2) Logarit cơ số e, 10, 2 abs(x) Hàm lấy trị tuyệt đối Round(x), floor(x), fix(x), ceil(x) Các hàm làm tròn 1.4.2. Các toán tử và các hàm thao tác với ma trận Có thể dựng cỏc hàm sau để tạo các ma trận đặc biệt 7 • zeros(N): Tạo ma trận các phần tử đều bằng 0 có kích thước N • ones(N): Tạo ma trận các phần tử đều bằng 1 có kích thước N • rand(N): Tạo ma trận ngẫu nhiên có kích thước N, các phần tử phân bố đều. • randn(N): Tạo ma trận ngẫu nhiên có kích thước N, các phần tử tuân theo phân bố chuẩn • magic(N): Tạo ma trận magic (tổng giá trị trong 1 hàng bằng tổng giá trị trong 1 cột bằng tổng giá trị đường chéo) có kích thước N • eye(N): Tạo ma trận đơn vị Các thao tác khác • Cộng: X=A+B • Trừ: X=A-B • Nhân: X=A*B (nhân 2 ma trận, số hàng của A phải bằng số hàng của B) X=A.*B (nhõn cỏc phần tử tương ứng với nhau, 2 ma trận có kích thước bằng nhau) • Chia: X=A/B (khi đó A=X*B) hoặc X=A\B (khi đó B=A*X) • Lũy thừa: X=A^2 (X=A*A), X=A.^2 (lũy thừa các số hạng của A) • Xóa cột: A(:,3)=[] để xóa cột 3 trong ma trận A • Xóa hàng: A(3,:)=[] để xóa hàng 3 trong ma trận A Các hàm thông dụng với ma trận • Tính kích thước: d=size(A) • Tính định thức: d=det(A) • Tính ma trận nghịch đảo: X=inv(A) 8 1.5. Sử dụng đồ thị trong Matlab 1.5.1. Đồ thị trong hệ tọa độ phẳng Phần lớn cỏc cõu lệnh vẽ đồ thị trong hệ tọa độ phẳng được thực hiện bằng lệnh plot. Ví dụ: >> x=linspace(0,2*pi,30); >> y=sin(x); >> plot(,y) Kết quả: Trong ví dụ trên hàm lớnpace(0,2*pi,30) tạo ra 30 điểm dữ liệu trong đoạn [0:2*pi]. Và tớnh cỏc thành phần của vector y = sin(x). Lệnh plot sẽ nối các điểm này lại. Trong trường hợp lệnh plot không có các tham số cấu hình, Matlab sẽ vẽ đồ thị với nét liền như trên, để cấu hình thêm ta bổ sung thờm cỏc tham số theo định dạng như sau plot(x,y,'tham số). trong đó tham số có thể là: Tham số Màu sắc Tham số Các điểm Tham số Nối các điểm b xanh da trời . điểm - nét liền g xanh lá cây 0 tròn : đường chấm r đỏ x dấu x đường gạch chấm c xanh xám + dấu + đường gạch gạch 9 m đỏ tím * hoa thị y vàng s vuông k đen d kim cương w trắng v, ^,<,> tam giác p,h ngôi sao Ví dụ: >> plot(x,y,' *b') Kết quả: Ngoài ra có thể chỉnh sửa cách trình bày đồ thị bằng cách lệnh sau: • grid on/off: thờm/bỏ đường lưới vào đồ thị • box on/off: thờm/bỏ hộp chứa đồ thị • asix on/off: thờm/bỏ trục tọa độ • xlabel('Trục x'): thờm nhãn cho trục x • ylabel('Truc y'): thờm nhãn cho trục y • title('Do thi ham sin'): thêm tiêu đề ở đỉnh cho đồ thị Để vẽ nhiều đồ thị trên một hình ta có thể sử dụng lệnh plot(x,y,m,n) khi đó đồ thị với tọa độ x,y và đồ thị với tọa độ m,n sẽ được vẽ trên một hình. Ngoài ra có thể sử dụng lệnh hold on: 10 [...]... điểm ảnh (pixel) Chú ý trong một số sách về xử lý ảnh x có giá trị 0>M-1 và y có giá trị 0->N-1 Nhưng trong Image processing toolbox giá trị của x là từ 1->M và y là 1->N 28 Một ma trận tọa độ ảnh trong Matlab được biểu diễn: 1.13.2.Đọc ảnh, hiển thị và lưu ảnh a Đọc ảnh Trong Matlab sử dụng hàm imread(‘filename’) để đọc một ảnh: >> I = imread('cameraman.tif'); Khi đó I sẽ là ma trận ảnh số Trong matlab. .. 1 b Hiển thị ảnh Hàm imshow trong Matlab được sử dụng để hiện ảnh % Hiển thị một ảnh từ file >> imshow('cameraman.tif') 30 % Hiển thị một ảnh và phóng to 150% >> imshow('cameraman.tif','InitialMagnification',150); c Lưu ảnh Lưu một ảnh từ ma trận I ra một file, sử dụng hàm imwrite(I,’filename’): >> imwrite (I, 'pout2.png'); 1.13.3.Cải thiện sự tương phản của ảnh Biểu đồ histogram của ảnh I >> figure,... imadjust(I); 1.13.4.Tạo ảnh nhị phân từ ảnh đã cho >>level = graythresh(I3); graythresh: xác định mức xám của ảnh sử dụng phương pháp Otsu >>bw = im2bw(I3,level); >>figure, imshow(bw) Có thể xác định số đối tượng có trong ảnh nhị phân đó bằng lệnh: >>[labeled,numObjects] = bwlabel(bw,4); Khi đó numObjects là số đối tượng trong ảnh bw 1.14 Bài tập chương 2 Bài 1 Biểu diễn các tín hiệu sau trong Matlab, và vẽ... cường độ sáng của ảnh tại điểm đó Đối với ảnh số đơn sắc, giá trị f tại (x,y) được gọi là mức xám (gray level) Ảnh màu là tổ hợp của ánh sáng đơn sắc, trong máy tính thường sử dụng hệ màu RGB, khi đó mỗi điểm ảnh được thể hiện trong bộ nhớ máy tính như các giá trị độc lập của các màu đỏ, xanh lá cây và xanh lam Kết quả của quá trình lấy mẫu và lượng tử hóa là một ma trận số liệu Một ảnh có kích thước... lưới chữ nhật trong mặt phẳng x-y Z là một hàm số theo x,y cuối cùng, sử dụng hàm mesh(x,y,z) để vẽ đồ thị Ví dụ: >> [X,Y] = meshgrid(-8:.5:8); >> R = sqrt(X.^2 + Y.^2) + eps; >> Z = sin(R)./R; >> mesh(X,Y,Z) Kết quả: 1.6 Lập trình trong Matlab Trong Matlab, ta thực hiện các yêu cầu tại dấu nhắc trong cửa sổ lệnh nhanh và hiệu quả, tuy nhiên với những lệnh được sử dụng nhiều lần, hoặc trong những chương... n=k và bằng 0 khi n khác k 20 Trong Matlab ta có thể biểu diễn như sau: 1, n = n0 δ ( n − n0 ) =  , n1 ≤ n ≤ n2 , n1 ≤ n0 ≤ n2 0, n ≠ n0  Hàm delta có giá trị bằng 1 tại n 0, như vậy ta có thể tạo trong Matlab, tạo hàm xung đơn vị trên khoảng [n1,n2] ta viết một hàm trong matlab như sau: function [x,n]=impseq(n0,n1,n2) n=[n1:n2]; x=[(n-n0)==0]; Ví dụ: Tạo dãy xung đơn vị trong khoảng [-5:5] n=[-5:5]... trình sai phân Biểu diễn trong Matlab, người ta sử dụng một hàm filter, hàm này có định dạng: y=filter(b,a,x), trong đó a, b là các ma trận hệ số trong công thức trên: Ví dụ: y(n)-y(n-1)+0.9y(n-2)=x(n) hóy tớnh đáp ứng xung của hệ thống h(n) a=[1,-1,0.9]; b=[1]; x=impseq(0,-10, 100); h=filter(b,a,x); stem(h); Kết quả: 27 1.13 Tín hiệu hai chiều (ảnh số) 1.13.1.Biểu diễn ảnh Một ảnh được biểu diễn dưới... 1.7.4 Debug trong Matlab Khi đã viết xong chương trình hoàn chỉnh, để chạy chương trình có thể bấm nút Play trên thanh công cụ hoặc F5 trong cửa sổ lập trình Trong trường hợp muốn debug chương trình, ta đặt breakpoint bằng phím F12, rồi chạy chương trình, khi đó tại cửa sổ lệnh của Matlab con trước con trỏ để gõ lệnh sẽ trở thành K>> Muốn chuyển sang lệnh tiếp theo sử dụng phím tắt F10 Trong quá trình... hold on >> plot(m,n) Một số đồ loại khác trong Matlab • pie: vẽ đồ thị tròn • pareto: đồ thị pareto • bar: đồ thị dạng cột 1.5.2 Đồ thị trong không gian ba chiều Đồ thị trong không gian ba chiều gồm 2 loại chính là đồ thị đường và đồ thị mặt (lưới) Để vẽ đồ thị đường trong không gian ba chiều ta sử dụng lệnh plot3, khuôn dạng lệnh plot3 như sau: plot3(x,y,z) trong đó x,y,z là các vector hoặc ma trận... thức trên ta nhận thấy đối với đối với tín hiệu e-mũ phức tuần hoàn, chỉ cần xột cỏc tần số trong khoảng dài 2π Trong miền tín hiệu rời rạc, tín hiệu e-mũ phức sẽ lặp lại với chu kỳ 2π/ω Xét trong ví dụ trên: trong khoảng N=2π/0.1π=20 tín hiệu sẽ được lặp lại, tức là x[n]=x[n+20] 1.11 Các phép toán trên tín hiệu Xử lý tín hiệu số là sử dụng các phép toán tác động lên tín hiệu lối vào để tạo ra một tín . VỀ CÔNG CỤ MATLAB 2 TÍN HIỆU RỜI RẠC 20 PHÉP BIẾN ĐỔI FOURIER 35 BIỂU DIỄN HỆ THỐNG VÀ TÍN HIỆU RỜI RẠC TRONG MIỀN Z 56 BỘ LỌC SỐ 67 XỬ LÝ ẢNH TRONG MATLAB 74 1 TỔNG QUAN VỀ CÔNG CỤ MATLAB 1.1 vực rất đa dạng như: xử lý tín hiệu, nhận dạng hệ thống, xử lý 2 ảnh, mạng nơron, tối ưu hóa v.v… Matlab có thể giao tiếp với các chương trình và các và các ngôn ngữ khác. Matlab có thể gọi các. 1.7977e+308) 1.2.2. Véc tơ và matrận Các bài toán trong Matlab thông thường được quy về việc tính toán và xử lý trên ma trận. Các biến, dữ liệu trong Matlab được coi như một ma trận thực hoặc phức.

Ngày đăng: 10/01/2015, 09:52

Mục lục

  • 1.2. Sử dụng biến trong matlab

    • 1.2.1. Quy cách đặt tên

    • 1.2.2. Véc tơ và matrận

    • 1.3. Một số lệnh thông dụng trong Matlab

    • 1.4. Các toán tử và hàm

      • 1.4.1. Các toán tử và các hàm cơ bản

      • 1.4.2. Các toán tử và các hàm thao tác với ma trận

      • 1.5. Sử dụng đồ thị trong Matlab

        • 1.5.1. Đồ thị trong hệ tọa độ phẳng

        • 1.5.2. Đồ thị trong không gian ba chiều

        • 1.6. Lập trình trong Matlab

        • 1.7. Matlab GUI

          • 1.7.1. Môi trường làm việc

          • 1.7.2. Thuộc tính của các điều khiển

          • 1.7.3. Viết sự kiện cho các điều khiển

          • 1.7.5. Vẽ đồ thị - sử dụng component AXES

          • 1.7.6. Điều khiển Toggle – nút bấm 2 trạng thái

          • 1.7.7. Điều khiển Slider – thanh trượt

          • 1.9. Khái niệm về tín hiệu rời rạc và lấy mẫu tín hiệu

          • 1.10. Các tín hiệu cơ sở

            • 1.10.1. Dãy xung đơn vị

            • 1.10.2. Dãy nhảy bậc đơn vị

            • 1.10.3. Dãy tín hiệu hình sin

            • 1.11.2. Phép nhân, cộng tín hiệu

            • 1.11.3. Phép nhân chập 2 tín hiệu

Tài liệu cùng người dùng

Tài liệu liên quan