Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

CH(cid:1132)(cid:1130)NG I:

TÌM HI(cid:1222)U C(cid:1130) B(cid:1190)N V(cid:1220) MATLAB VÀ GUI

I) C(cid:1131) b(cid:1191)n v(cid:1221) Matlab:

1) Giới thiệu chung v(cid:1221) Matlab:

Matlab là một công cụ tính toán trong kỹ thuật, đặc biệt là các bài toán về ma trận. Matlab còn cung cấp các toolboxes chuyên dụng để gi(cid:1191)i quyết những vấn đề cụ thể như xử lý (cid:1191)nh, xử lý số tín hiệu, neuron, mô phỏng…

Matlab cung cấp Image Processing toobox, chuyên về xử lý (cid:1191)nh. Có thể nói Matlab là một công cụ lợi h(cid:1189)i giúp cho việc thực hiện các gi(cid:1191)i thuật xử lý (cid:1191)nh nhanh chóng và dễ hiểu.

2) Khởi động Matlab:

2.1) Mở ch(cid:1133)(cid:1131)ng trình:

-Click vào biểu tượng để m(cid:1251) chương trình.

2.2) Nhập lệnh trong Matlab:

- Cửa sổ Command line hiện ra, đây là nơi chúng ta sẽ nhập lệnh và Matlab đưa ra kết qu(cid:1191).

- Lệnh sẽ thực hiện ngay và thể hiện kết qu(cid:1191) thực thi trên màn hình.

Vd: >> 5+3

ans =

8

- Trong nhiều trư(cid:1249)ng hợp ta không muốn thể hiện kết qu(cid:1191) thì sau khi gõ lệnh ph(cid:1191)i thêm dấu “;”.

2.3) S(cid:1265) d(cid:1257)ng công c(cid:1257) giúp đ(cid:1253):

-Đánh lệnh help ten_lenh để biết được cách sử dụng và công dụng của ten_lenh.

Ví dụ: help convert

-Nếu không biết chính xác tên lệnh là gì, ta có thể dùng lệnh lookfor.

-Ví dụ: lookfor convert sẽ cho ta danh sách các lệnh có từ convert trong phần trợ giúp.

Trang 1

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

3) Phép toán với vector và ma trận:

3.1) Các toán t(cid:1265):

-Trong Matlab, không cần khai báo biến. Matlab phân biệt biến chữ hoa và thư(cid:1249)ng Ví dụ: A và a là hai biến khác nhau

-Các phép toán số học: +,-,*,/,\(chia đ(cid:1191)o), ^.

-Các toán tử quan hệ :< , <= , > , >= , == , ~=

-Các toán tử logic : & , | (or) , ~ (not)

-Các hằng : pi 3.14159265

i số (cid:1191)o

j tương tự i

eps sai số 2-52

inf vô cùng lớn

NaN Not a number

3.2) Làm việc với vector và ma trận:

-Trong Matlab, tất c(cid:1191) các đối tượng đều xem là ma trận. Một chữ số là một ma trận 1*1 . Một vector là ma trận một hàng hay một cột.

Ví dụ: >> a=[5 10 2;10 2 4; 2 4 5]

a =

5 10 2

10 2 4

4 5 2

-Chỉ số : Phần tử (cid:1251) hàng i cột j của ma trận có kí hiệu là A(i,j). Tuy nhiên ta cũng có thể tham chiếu tới phần tử của m(cid:1191)ng nh(cid:1249) một chỉ số A(k). Ví dụ: A(6) là tham chiếu của A(3,2).

-Toán tử “:” là một toán tử quan trọng, xuất hiện (cid:1251) nhiều d(cid:1189)ng khác nhau

Ví dụ: >> 5:10

Trang 2

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

ans =

5 6 7 8 9 10

>> 1:2:10

ans=

1 3 5 7 9

 A(:,j) để trích ra cột thứ j của A

 A(i,:) để trích ra hàng thứ i

 A(k:l,m:n) trích ra ma trận con của A

 V(i:j) trích ra một phần vector V

Ví dụ: >> A=[2 4 6; 1 3 5; 3 1 4];

>> A(3,:)

ans =

3 1 4

-Chuyển vị: Dùng dấu „ để t(cid:1189)o ma trận chuyển vị

Ví dụ: > > a=[1 3; 2 4]

a =

1 3

2 4

>> a„

ans =

1 2

4 3

-Phép toán số học với ma trận:

Cộng, trừ ma trận: >> a=[2 3];

Trang 3

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

>> b=[1 2];

>> a+b

ans =

3 5

Nhân hai ma trận: >> a*b„

ans =

8

>> a.*b

ans =

2 6

Chia các thành phần của ma trận này cho một ma trận khác: >> a./b

ans =

2.0000 1.5000

Lũy thừa của ma trận: >> a.^2

ans =

4 9

>> c=[1 2; 3 4];

>> c^2

ans =

7 10

15 22

-Ma trận đặc biệt:

 zeros(m,n): ma trận toàn 0

 eye(n):ma trận đơn vị

Trang 4

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

 ones(m,n): Ma trận toàn 1

4) Lập trình trong matlab:

4.1) Bi(cid:1223)u th(cid:1261)c đi(cid:1221)u kiện: Gần giống trong C

-If, else , elseif.

-switch( chỉ thực thi duy nhất một nhóm lệnh)

4.2) Vòng lập:

-for, while.

5)Hàm m-file:

 Hàm m-file là một chương trình con do chúng ta yêu cầu các đối số ngõ vào và có thể tr(cid:1191) về đối số ngõ ra

 Cú pháp:

function[outputArgs]=function_name(inputArgs)

-Chú thích(đặt sau dấu %, chú thích sẽ hiện ra khi dùng lệnh help)

-Các lệnh.

-return;

Ph(cid:1191)i lưu l(cid:1189)i với tên giống tên hàm.

Ví dụ:Vẽ hàm sau trong kho(cid:1191)ng [-10,10]

Gi(cid:1191)i:

function f = function1(x)

y = 1./((x-0.3).^2+0.01)+1./((x-0.9).^2+0.04)-6 ;

Lưu l(cid:1189)i với tên function1.m

>>fplot(„function1‟,[-10,10]);

6)V(cid:1217) hình trong Matlab:

-Matlab cung cấp nhiều hàm để biểu diễn đồ thị 2D và 3D.

 plot: vẽ đồ thị 2D

 plot3: vẽ đồ thị 3D

Trang 5

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

loglog: vẽ đồ thị các trục là logarit 

 semilogx, semilogy: vẽ đồ thị với 1 trục là logarit

-Sử dụng hàm figure để t(cid:1189)o nhiều cửa sổ hình vẽ

-Sử dụng lệnh subplot để vẽ nhiều hình trên một cửa sổ

-Hàm chú thích hình vẽ:

title: Nhãn hình vẽ 

 xlabel, ylabel,zlabel: nhãn các trục.

legend: thêm chú thích vào hình vẽ 

Ví dụ:

x = -pi:.1:pi;

y = sin(x);

>>plot(x,y)

xlabel('t = 0 to 2\pi','Fontsize',16)

ylabel('sin(t)','Fontsize',16)

title('\it{Gia tri cua sin tu zero den 2 pi}','Fontsize',16)

II) Matlab GUI:

1) Giới thiệu:

 Gui-là giao diện bằng hình (cid:1191)nh của chương trình

 Gui-bao gồm các nút nhấn, hộp liệt kê, thanh trượt, menu… chúng cung cấp cho ngư(cid:1249)i dùng sử dụng một môi trư(cid:1249)ng làm việc thân thiện để họ tập trung vào các ứng dụng của chương trình hơn là đi tìm hiểu cách thức làm việc của chương trình đó.

Trang 6

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

 Để m(cid:1251) công cụ t(cid:1189)o Gui : File New GUI

 Khi lưu giao diện vừa t(cid:1189)o, Matlab sẽ t(cid:1189)o ra hai file có cùng tên nhưng khác phần m(cid:1251) rộng:

- File có phần m(cid:1251) rộng .fig chứa nội dung của giao diện

- File có phần m(cid:1251) rộng .m chứa những đo(cid:1189)n mã liên quan đến giao diện

Trang 7

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

Trang 8

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

 Khi thiết kế bất cứ thành phần nào của Gui ta cần thiết lập thuộc tính cho thành phần đó.

 Để thiết lập các thuộc tính ta có thể chọn mục “ Property Inspector” trên thanh công cụ hoặc right-click vào đối tượng và chọn mục “Inspector Properties”

 Hai thuộc tính quan trọng mà ta cần xác lập là “String Property” và “ Tag Property”.

- String property : dòng ký tự xuất hiện trên đối tượng.

- Tag property : tên của đối tượng.

Khi click chuột vào 1 đối tượng, Matlab sẽ gọi hàm tương ứng với đối tượng đó. Tên của hàm chính là tên của đối tượng cộng với “_Callback”

2) Các hƠm th(cid:1133)ờng đ(cid:1133)(cid:1255)c s(cid:1265) d(cid:1257)ng trong Gui:

Set : Thay đổi giá trị của các thuộc tính của một đối tượng giao diện set(handles.TextBox,‟String‟,str)

Get : Truy xuất giá trị của thuộc tính của một đối tượng giao diện get(handles.EditBox,‟String‟)

Ngoài ra còn có các hàm như axes, guide, num2str(), str2num()… 

Trang 9

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

CH(cid:1132)(cid:1130)NG II:

C(cid:1130) B(cid:1190)N V(cid:1220) (cid:1190)NH VÀ CÁC HÀM

X(cid:1264) LÝ (cid:1190)NH C(cid:1130) B(cid:1190)N TRONG MATLAB

I) Các ki(cid:1223)u (cid:1191)nh trong Matlab: 1) (cid:1190)nh Index:

(cid:1190)nh được biểu diễn b(cid:1251)i hai ma trận, một ma trận dữ liệu (cid:1191)nh X và một ma trận màu (còn gọi là b(cid:1191)n đồ màu) map. Ma trận dữ liệu có thể thuộc kiểu uint8, uint16 hoặc double. Ma trận màu là một ma trận kich thước m x 3 gồm các thành phần thuộc kiểu double có giá trị trong kho(cid:1191)ng [0 1]. Mỗi hàng của ma trận xác định thành phần red, green, blue của một màu trong tổng số m màu được sử dụng trong (cid:1191)nh. Giá trị của một phần tử trong ma trận dữ liệu (cid:1191)nh cho biết màu của điểm (cid:1191)nh đó nằm (cid:1251) hàng nào trong ma trận màu.

Trang 10

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

2) (cid:1190)nh grayscale:

Mỗi (cid:1191)nh được biểu diễn b(cid:1251)i một ma trận hai chiều, trong đó giá trị của mỗi phần tử cho biết độ sang (hay mức xám) của điểm (cid:1191)nh đó. Ma trận này có thể một trong các kiểu uint8, uint16 hoặc double. (cid:1190)nh biểu diễn theo kiểu này còn gọi là (cid:1191)nh „trắng đen‟.

3) (cid:1190)nh nh(cid:1231) phơn:

(cid:1190)nh được biểu diễn b(cid:1251)i một ma trận hai chiều thuộc kiểu logical. Mỗi điểm (cid:1191)nh chỉ có thể nhận một trong hai giá trị là 0 (đen) hoặc 1 (trắng)

Trang 11

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

4) (cid:1190)nh RGB:

Còn gọi là (cid:1191)nh “truecolor” do tính trung thực của nó. (cid:1190)nh này được biểu diễn b(cid:1251)i một ma trận ba chiều kích thước m x n x 3, với m x n là kích thước (cid:1191)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 (cid:1191)nh, các phần tử của nó có thể thuộc kiểu uint8, uint16 hoặc double.

Trang 12

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

II) Các phép bi(cid:1219)n đổi (cid:1191)nh: 1) Bi(cid:1219)n đổi Fourier:

jnw

2

Phép biến đổi Fourier biểu diễn (cid:1191)nh dưới d(cid:1189)ng tổng của các lũy thừa phức của các thành phần biên độ, tần số, pha khác nhau của (cid:1191)nh. Nếu f(m,n) là một hàm của hai biến không gian r(cid:1249)i r(cid:1189)c m và n, thì biến đổi Fourier hai chiều của f(m,n) được định nghĩa :

F

(w1,w2)=

f m n e , )

(

1 jmw e

m

n

M N 1

1

j

(2 /

M pm )

j

(2 /

N qn )

Nếu f(m,n) biểu diễn độ sáng của (cid:1191)nh X (cid:1251) vị trí pixel (m,n) thì F(w1,w2) chính là biến đổi Fourier của (cid:1191)nh X. Do các dữ liệu trên máy tính được lưu trữ dưới d(cid:1189)ng r(cid:1249)i r(cid:1189)c, cụ thể là dữ liệu (cid:1191)nh được tổ chức theo đơn vị pixel nên phép biến đổi Fourier cũng được r(cid:1249)i r(cid:1189)c hóa thành biến đổi Fourier r(cid:1249)i r(cid:1189)c (DFT). Gi(cid:1191) sử hàm f(m,n) chỉ khác 0 trong miền (0<=m<=M-1,0<=n<=N-1), các phép biến đổi DFT thuận và nghịch kích thước M x N được định nghĩa như sau :

F p (

,q) =

f m n e ( , )

e

m n 0

0

(0<=p<=M-1,0<=q<=N-1)

Trang 13

M N 1

1

j

(2 /

)

(2 /

N qn )

M pm j e

f m (

,n) =

F p q e ( , )

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

q

p

0

0 F(p,q) gọi là các hệ số của biến đổi DFT. Với các ứng dụng trong xử lý (cid:1191)nh, chúng ta chỉ quan tâm đến các hàm fft2 và ifft2. Cú pháp : F=fft2(X,Mrows,Ncols) f=ifft2(F,mrows,ncols) Nếu (cid:1191)nh ban đầu có kích thước nhỏ hơn thì Matlab tự động thêm vào các zero pixel trước khi biến đổi. Sau khi thực hiện biến đổi DFT bằng fft2, thành phần DC sẽ nằm (cid:1251) góc trên bên trái của (cid:1191)nh. Ta có thể dùng hàm fftshift để dịch thành phần DC này về trung tâm của (cid:1191)nh.

(0<=m<=M-1,0<=n<=N-1)

2) Phép bi(cid:1219)n đổi DCT:

M N 1

1

q

p

1)

1)

c os

cos

Am

Bpq =

q

p

Biến đổi DCT (Discrete Cosine Transform) biểu diễn (cid:1191)nh dưới d(cid:1189)ng tổng của các cosine của các thành phần biên độ và tần số khác nhau của (cid:1191)nh. Hầu hết các thông tin về (cid:1191)nh chỉ tập trung trong một vài hệ số của biến đổi DCT, trong khi các hệ số còn l(cid:1189)i chứa rất ít thông tin. Biến đổi DCT 2 chiều của một ma trận A kích thước M x N là:

n (2 N 2

q

p

0

0

1

M N 1

1)

1)

p

q

cos

c os

A = mn

B pq

p

q

với 0<=p<=M-1

n (2 N 2

0

0

p

q

m (2 M 2 0<=q<=N-1 m (2 M 2 0<=n<=N-1 Phép biến đổi DCT thuận và nghịch được thực hiện bằng các hàm dtc2 và idtc2. Các hàm này sử dụng gi(cid:1191)i thuật dựa theo FFT để tăng tốc độ tính toán. Cú pháp : B=dtc2(A,M,N) A=idtc2(B,M,N)

với 0<=m<=M-1

3) Bi(cid:1219)n đổi Radon:

Phép biến đổi Radon được thực hiện b(cid:1251)i hàm radon trong Matlab, biểu diễn (cid:1191)nh dưới d(cid:1189)ng các hình chiếu của nó dọc theo các hướng xác định. Hình chiếu của một hàm hai biến f(x,y) là tập hợp các tích phân đư(cid:1249)ng. Hàm radon tính các tích phân đư(cid:1249)ng từ nhiều điểm nguồn dọc theo các đư(cid:1249)ng dẫn song song, gọi là các tia chiếu, theo một hướng xác định nào đó. Các tia chiếu này nằm cách nhau 1 pixel. Để biểu diễn toàn bộ (cid:1191)nh, hàm radon sẽ lấy nhiều hình chiếu song song của (cid:1191)nh từ các góc quay khác nhau bằng cách xoay các điểm nguồn quanh tâm của (cid:1191)nh.

Trang 14

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

là tích phân đư(cid:1249)ng của f dọc theo Biến đổi Radon của f(x,y) tương ứng với góc quay trục y‟ :

Trong Matlab, biến đổi Radon được tính bằng hàm Radon có cú pháp như sau : [R,Xp] = radon(I,theta)

Trang 15

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

Phép biến đổi Radon với nhiều góc thư(cid:1249)ng được hiển thị dưới d(cid:1189)ng (cid:1191)nh.

Trang 16

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

III) Các hƠm x(cid:1265) lý c(cid:1131) b(cid:1191)n: 1) Đ(cid:1233)c vƠ ghi dữ liệu (cid:1191)nh:

 Hàm imread đọc các file (cid:1191)nh với bất kỳ các định d(cid:1189)ng (cid:1191)nh đã biết hiện nay và lưu l(cid:1189)i dưới d(cid:1189)ng một ma trận biểu diễn (cid:1191)nh trong Matlab. Cú pháp : A=imread(filename,fmt)

 Hàm imwrite cho phép lưu một (cid:1191)nh biểu diễn bằng một ma trận trong Matlab thành một file (cid:1191)nh dưới một trong các định d(cid:1189)ng đã biết. Cú pháp : imwrite(A,filename,fmt)

 Hàm imfinfo dùng để xem các thông số của một file (cid:1191)nh nào đó. Cú pháp :

2.1)Chuy(cid:1223)n đổi giữa các ki(cid:1223)u dữ liệu (cid:1191)nh: imfinfo(filename,fmt) Các thông tin được cung cấp b(cid:1251)i hàm imfinfo là : filename, filemoddate, filesize, format, formatversion, width, height, bitdepth, colortype. 2) Chuy(cid:1223)n đổi giữa các ki(cid:1223)u dữ liệu, ki(cid:1223)u (cid:1191)nh:

Matlab cung cấp sẵn các hàm thực hiện chuyển kiểu cho các ma trận biểu diễn (cid:1191)nh, bao gồm : im2double, im2uint8 và im2uint16. Tuy nhiên, khi thực hiện chuyển kiểu giữa các dữ liệu (cid:1191)nh cần lưu ý một số điều sau:

 Khi chuyển từ một kiểu dữ liệu dùng nhiều bit sang một kiểu dữ liệu dùng it bit hơn thì một số thông tin chi tiết về bức (cid:1191)nh ban đầu sẽ bị mất.  Không ph(cid:1191)i lúc nào cũng có thể chuyển đổi kiểu dữ liệu đối với kiểu (cid:1191)nh indexed, vì các giá trị của ma trận (cid:1191)nh xác định một địa chỉ trong b(cid:1191)n đồ màu chứ không ph(cid:1191)i là giá trị màu, do đó không thể lượng tử hóa được.

2.2) Chuy(cid:1223)n đổi gi(cid:1265)a các ki(cid:1223)u (cid:1191)nh:

 Dither : dither(RGB,map) dither(I)

 Gray2ind : [X,Map] = gray2ind(I,N) [X,Map] = gray2ind(BW,N)

 Grayslice : x=grayslice(I,N) x=grayslice(I,V) Im2bw : bw=im2bw(I,level) 

bw=im2bw(x,map,level) bw=im2bw(rgb,level)

Ind2gray : i=ind2gray(x,map) Ind2rgb : rgb=ind2rgb(x,map)

   Mat2gray : i=mat2gray(a,[amin amax])  Rgb2gray : i=rgb2gray(rgb)  Rgb2ind : [x, map]=rgb2ind(rgb,n)

Trang 17

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

x=rgb2ind(rgb,map) [x,map]=rgb2ind(rgb,tol) 3)Các phép toán số h(cid:1233)c c(cid:1131) b(cid:1191)n đối với dữ liệu (cid:1191)nh:

Imabsdiff : z=imabsdiff(x,y) Imadd : z=imadd(x,y,out_class) Imcomplement : im2=imcomplement(im) Imdivide : z=imdivide(x,y) Imlincomb : z=imlincomb(k1,a1,k2,a2,…,kn,an,k,out_class) Immultiply : z=immultiply(x,y) Imsubstract : z=imsubstract(x,y) Các phép toán số học cơ b(cid:1191)n trên các dữ liệu (cid:1191)nh bao gồm các phép cộng, trừ, nhân và chia. Tuy nhiên, Matlab chỉ hỗ trợ các phép toán này trên kiểu double nên cần thực hiện chuyển đổi kiểu trước khi thực hiện. Để gi(cid:1191)m bớt thao tác này, trong IPT có cung cấp các hàm thực hiện các phép toán số học trên (cid:1191)nh mà có thể chấp nhận bất kỳ kiểu dữ liệu (cid:1191)nh nào và tr(cid:1191) về kết qu(cid:1191) thuộc cùng kiểu với các toán h(cid:1189)ng. Các hàm này cũng xử lý các dữ liệu tràn một cách tự động.       

4) Các hƠm hi(cid:1223)n th(cid:1231) (cid:1191)nh trong Matlab:

Matlab cung cấp hai hàm hiển thị cơ b(cid:1191)n là image và imagesc. Ngoài ra trong IPT cũng có hai hàm hiển thị (cid:1191)nh khác, đó là imview và imshow.

 Hàm image(X,Y,C) hiển thị hình (cid:1191)nh biểu diễn b(cid:1251)i ma trận C kích thước M x N lên trục tọa độ hiện hành. X, Y là các vector xác định vị trí các pixel C(1,1) và C(M,N) trong hệ trục hiện hành.  Hàm imagesc có chức năng tương tự như hàm image, ngo(cid:1189)i trừ việc dữ liệu (cid:1191)nh sẽ được co giãn để sử dụng toàn bộ b(cid:1191)n đồ màu hiện hành.  Hàm imview cho phép hiển thị hình (cid:1191)nh trên một cửa sổ riêng, nền Java, gọi là image Viewer. Image Viewer cung cấp các công cụ dò tìm và xác định các giá trị pixel một cách linh ho(cid:1189)t.  Hàm imshow cũng t(cid:1189)o một đối tượng đồ họa thuộc lo(cid:1189)i image và hiển thị (cid:1191)nh trên một figure. Hàm imshow sẽ 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 (cid:1191)nh.

5.1) Phép nội suy (cid:1191)nh: 5) Các phép bi(cid:1219)n đổi hình h(cid:1233)c:

Nội suy là quá trình ước lượng giá trị của một điểm nằm giữa hai pixel có giá trị đã biết. IPT cung cấp 3 phương pháp nội suy (cid:1191)nh : nội suy theo các lân cận gần nhất, nội suy song tuyến tính và nội suy bicubic. C(cid:1191) 3 phương pháp đểu thực hiện theo nguyên tắc chung : để

Trang 18

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

xác định giá trị của một pixel (cid:1191)nh nội suy, ta tìm một điểm trong (cid:1191)nh ban đầu tương ứng với pixel đó, sau đó giá trị của pixel (cid:1251) (cid:1191)nh mới sẽ được tính bằng trung bình có trọng số của một tập các pixel nào đó (cid:1251) lân cận của điểm vừa xác định, trong đó trọng số của các pixel phụ thuộc vào kho(cid:1191)ng cách tới điểm này. Phương pháp lân cận gần nhất (nearest neighbor) : pixel mới sẽ được gán giá trị

Phương pháp song tuyến tính (bilinear interpolation) : pixel mới sẽ được gán là

Phương pháp bicubic, pixel mới sẽ được gán là trung bình có trọng số của các

 của pixel chứa điểm tương ứng của nó trong (cid:1191)nh ban đầu  trung bình có trọng số của các pixel trong một lân cận kích thước 2 x 2.  pixel trong một lân cận kích thước 4 x 4. 5.2) Thay đổi kích th(cid:1133)ớc (cid:1191)nh:

Hàm imresize cho phép ngư(cid:1249)i sử dụng thay đổi kích thước (cid:1191)nh. Ngoài kích thước (cid:1191)nh mới, ngư(cid:1249)i sử dụng còn có thể xác định phương pháp nội suy sẽ dùng và lo(cid:1189)i bộ lọc dùng để chống aliasing. Cú pháp : b=imresize(a,m, method) :t(cid:1189)o (cid:1191)nh gấp m lần (cid:1191)nh a. b=imresize(a,[mrows mcols],method) b=imresize(a,[mrows mcols],method,N) b=imresize(a,[mrows mcols],method,h) 5.3) Phép quay (cid:1191)nh:

Để thực hiện phép quay (cid:1191)nh, ta có thể sử dụng hàm imrotate. Ngoài hai thông số cơ b(cid:1191)n là (cid:1191)nh gốc và góc quay, ngư(cid:1249)i sử dụng cũng có thể xác định phương pháp nội suy sẽ dùng và kích thước của (cid:1191)nh mới. Cú pháp : b=imrotate(a,angle,method,Bbox) 5.4) Trích xu(cid:1193)t (cid:1191)nh:

Khi cần trích xuất một phần (cid:1191)nh gốc, ta dùng hàm imcrop.

 Xác định cụ thể vị trí của phần (cid:1191)nh cần trích xuất (dưới d(cid:1189)ng hình chữ nhật)

Cú pháp : x2=imcrop(x,map,rect) % indexed x2=imcrop(a,rect) % grayscale or RGB trong đó rect=[Xmin Ymin width height] Sử dụng mouse để chọn phần (cid:1191)nh cần trích xuất. 

Ta không cần cung cấp thông số rect, khi thực hiện hàm này, con trỏ sẽ chuyển sang d(cid:1189)ng chữ thập, ngư(cid:1249)i dùng sẽ kéo chuột để chọn phần (cid:1191)nh cần trích xuất sau đó th(cid:1191) chuột.

Trang 19

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

CH(cid:1132)(cid:1130)NG III:

NÂNG CAO CH(cid:1192)T L(cid:1132)(cid:1254)NG (cid:1190)NH

I) Mở đầu: Nâng cao chất lượng (cid:1191)nh số là quá trình xử lý trên (cid:1191)nh ban đầu để t(cid:1189)o ra kết qu(cid:1191) là một bức (cid:1191)nh tốt hơn xét theo một tiêu chí cụ thể. Ví dụ xử lý để nâng cao chất lượng của (cid:1191)nh chụp X- quang sẽ khác với việc nâng cao chất lượng của (cid:1191)nh chụp của một vệ tinh địa tĩnh. Có nhiều phương pháp nhằm tăng cư(cid:1249)ng chất lượng của (cid:1191)nh, nhưng tập trung vào hai nhánh chính là xử lý (cid:1191)nh trong miền không gian và xử lý (cid:1191)nh trong miền tần số. Trong miền không gian, (cid:1191)nh được xử lý trực tiếp trên các pixels. Miền tần số sử dụng biến đổi Fourier để xử lý. II) X(cid:1265) lý (cid:1191)nh trong mi(cid:1221)n không gian: 1) Giới thiệu: Miền không gian là tập hợp các pixels trong một bức (cid:1191)nh. Chúng ta sẽ tiến hành xử lý trực tiếp trên các pixels này. Quá trình xử lý này có thể được mô t(cid:1191) thông qua biểu thức sau: g(x,y)=T[f(x,y)] Với f(x,y) là (cid:1191)nh gốc, g(x,y) là (cid:1191)nh sau xử lý, và T là phép toán biến đổi, dựa trên các điểm (cid:1191)nh xung quanh (x,y).

Các điểm (cid:1191)nh xung quanh có thể có các kích cỡ khác nhau, có thể là d(cid:1189)ng vuông hoặc chữ nhật, trong đó điểm (cid:1191)nh cần xử lý (cid:1251) vị trí trung tâm. Trên hình là một khung có kích thước 3*3. Tùy mục đích cụ thể mà ta dùng các phép biến đổi khác nhau.

Trang 20

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

s=T(r)

2)Phép bi(cid:1219)n đổi m(cid:1261)c xám: Trong phép biến đổi này, giá trị g(x,y) chỉ phụ thuộc vào giá trị của f(x,y), và T tr(cid:1251) thành hàm biến đổi mức xám. Ta có biểu thức đơn gi(cid:1191)n sau: Với r là mức xám ban đầu t(cid:1189)i (x,y), s là mức xám sau biến đổi t(cid:1189)i (x,y). Ví dụ: Xét hai phép biến đổi mức xám sau:

Với hình a, phép biến đổi cho ta (cid:1191)nh sau xử lý có độ tương ph(cid:1191)n cao hơn so với (cid:1191)nh ban đầu. Các giá tri mức xám rm nhưng được nén l(cid:1189)i gần mức 1( sáng hơn) làm (cid:1191)nh sau xử lý có độ tương ph(cid:1191)n cao. Phép biến đổi (cid:1251) hình b nhằm biến 1 (cid:1191)nh grayscale thành 1 (cid:1191)nh nhị phân. Ta xét mức ngưỡng m, với rm xét thành mức 1. (cid:1190)nh ơm b(cid:1191)n: 2.1) Một số phép bi(cid:1219)n đổi m(cid:1261)c xám c(cid:1131) b(cid:1191)n: a) Với 1 (cid:1191)nh có các giá trị mức xám nằm trong kho(cid:1191)ng [0,L-1], ta có:

s=L-1-r

Ta sử dụng phép biến đổi này trong trư(cid:1249)ng hợp muốn làm nổi bật các chi tiết có màu sáng (cid:1251) trong một vùng tối, đặc biệt với các bức (cid:1191)nh có vùng tối lớn.

Trang 21

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

Hình trên là hình chụp một mô ngực, với (cid:1191)nh bên trái là (cid:1191)nh gốc và bên ph(cid:1191)i là (cid:1191)nh âm b(cid:1191)n. Ta có thể dễ dàng thấy được việc phân tích sẽ dễ dàng hơn với (cid:1191)nh âm b(cid:1191)n.

s=c*log(1+r)

b) Phép bi(cid:1219)n đổi log: Biểu thức:

trước và Ảnh sau xử lý dung phép biến đổi log, c=0.8

Các giá trị r mức thấp d(cid:1191)i hẹp qua phép biến đổi sẽ t(cid:1189)o ra d(cid:1191)i rộng hơn, trong khi đó các giá trị r mức cao sẽ nén l(cid:1189)i thành 1 d(cid:1191)i hẹp (cid:1251) ngõ ra. Phép biến đổi này nhằm mục đích tăng chi tiết hóa (cid:1251) vùng tối.

c) Bi(cid:1219)n đổi theo quy tắc lũy th(cid:1263)a: Biểu thức:

Trang 22

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

<1, phép biến đổi tương tự với hàm log, nhưng giá trị của

- Với có thể thay đổi được, trong khi hàm log là cố định. Với phép biến đổi này, các giá trị r mức thấp d(cid:1191)i hẹp qua phép biến đổi sẽ t(cid:1189)o ra d(cid:1191)i rộng hơn, trong khi đó các giá trị r mức cao sẽ nén l(cid:1189)i thành 1 d(cid:1191)i hẹp (cid:1251) ngõ ra. - Với =1, phép biến đổi là một hàm tuyến tính giữa ngõ vào và ngõ ra. Đặc biệt khi c= =1, (cid:1191)nh ra và (cid:1191)nh vào là giống nhau.

Trang 23

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

Ảnh gốc

- Với >1, ta có phép biến đổi ngược so với

Trang 24

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

Ta nhận thấy làm tăng độ tương ph(cid:1191)n của hình (cid:1191)nh.

Trong Matlab cũng có các hàm giúp biến đổi mức xám của (cid:1191)nh grayscale.

g=imadjust(f,[low_in high_in], [low_out high_out],gamma])

[low_in, high_in], [low_out, high_out] nằm trong kho(cid:1191)ng [0,1]. Các giá trị nhỏ hơn hoặc bằng low_in sẽ được gán bằng low_out và cũng tương tự với các giá trị high_in và high_out.. Giá trị mặc định của gamma=1.

Ví dụ: >>g=imadjust(f,[0.5 0.75],[0 1],2);

Ta cũng có thể dùng hàm imadjust để t(cid:1189)o (cid:1191)nh âm b(cid:1191)n:

>>g=imadjust(f,[0 1],[1 0]);

Ngoài ra ta có thể dùng hàm imcomplement để t(cid:1189)o (cid:1191)nh âm b(cid:1191)n: >>g=imcomplement(f);

Trang 25

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

2.2) X(cid:1265) lý histogram:

. Ví dụ với đo(cid:1189)n [0,255], r0=0, r1=1…

Histogram của 1 (cid:1191)nh grayscale có L mức xám khác nhau là một hàm r(cid:1249)i r(cid:1189)c, có biểu thức h(rk)=nk, trong đó rk là giá trị mức xám thứ k trong đo(cid:1189)n [0,L-1] và nk là số pixels có giá trị mức xám là rk

Histogram thư(cid:1249)ng được chuẩn hóa. Với n là tổng số pixels của (cid:1191)nh, histogram chuẩn hóa được tính qua biểu thức:

Ta có thể xem p(rk) là hàm mật độ xác suất của rk, cho biết kh(cid:1191) năng xuất hiện tương ứng của từng giá trị mức xám.

Trong Matlab, ta có thể sử dụng hàm imhist để làm việc với histogram

>>h=imhist(f,b)

f là (cid:1191)nh ban đầu, b là số đo(cid:1189)n biểu diễn(mặc định giá trị là 256). Với b là 1 giá trị nhỏ hơn, gi(cid:1191) sử như 2, thì thang cư(cid:1249)ng độ sẽ chia làm 2 kho(cid:1191)ng : 0 đến 127, 128 đến 255, trong đó h(1) là số pixels có giá trị trong đo(cid:1189)n [0,127] và h(2) là số pixels có giá trị trong đo(cid:1189)n [127,255].

Nếu không có thông số đầu ra: >>imhist(f) cho ta đồ thị histogram của (cid:1191)nh.

Ngoài ra ta có thể có được hàm p(rk) qua biểu thức:

>>p=imhist(f,b)/numel(f);

Với numel là tổng số pixels có trong (cid:1191)nh f.

Trang 26

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

Cân bằng histogram: Gi(cid:1191) sử ta có phép biến đổi sau:

Ta có được hàm mật độ xác suất của s:

Do pr là hàm r(cid:1249)i r(cid:1189)c, ta có: Với phép biến đổi này, (cid:1191)nh sau xử lý sẽ có biểu đồ histogram gần giống với (cid:1191)nh ban đầu nhưng tr(cid:1191)i rộng trên toàn đo(cid:1189)n [0,1],làm cho d(cid:1191)i động lớn hơn và độ tương ph(cid:1191)n cao hơn Matlab cung cấp cho ta hàm histeq để thực hiện cân bằng histogram. g=histeq(f, nlev) Với f là (cid:1191)nh vào và nlev là số mức cư(cid:1249)ng độ của (cid:1191)nh ra. Giá trị mặc định của nlev là 64, thư(cid:1249)ng ta chọn là 256 để cùng mức với histogram (cid:1191)nh ban đầu.

Trên là (cid:1191)nh trước và sau cân bằng histogram cùng với biểu đồ histogram tương ứng

Trang 27

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

Hình dưới cho ta biết giá trị của s thay đổi theo r. Ta nhận thấy sau khi thực hiện cân bằng histogram, d(cid:1191)i hẹp của mức xám (cid:1191)nh ban đầu được m(cid:1251) ra toàn kho(cid:1191)ng của (cid:1191)nh ra.

Phối hợp histogram: Trong phân trước, chúng ta thấy được cân bằng histogram là một hàm có tính thích nghi với (cid:1191)nh đầu vào. Phương pháp cân bằng histogram tương đối đơn gi(cid:1191)n, có thể đoán trước histogram của (cid:1191)nh sau xử lý và có thể cho (cid:1191)nh ra có chất lượng được nâng cao rõ rệt. Tuy nhiên, histogram sau cân bằng l(cid:1189)i cố định với mỗi (cid:1191)nh đầu vào và không thể thay đổi được. Trong một số trư(cid:1249)ng hợp, việc cân bằng histogram không cho kết qu(cid:1191) như ý, hình (cid:1191)nh sau cân bằng histogram không được c(cid:1191)i thiện hoặc không đáp ứng được yêu cầu. Xét một ví dụ cụ thể sau:

Trang 28

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

Hình trên là (cid:1191)nh ban đầu và sau khi xử lý dùng cân bằng histogram. Ta thấy rằng (cid:1191)nh ban đầu có vùng tối chiếm diện tích rất lớn, do đó histogram có sự tập trung cư(cid:1249)ng độ về phía phần tối. Sau khi cân bằng histogram,do sự tập trung lớn của các thành phần nằm gần 0 của histogram (cid:1191)nh gốc nên histogram (cid:1191)nh sau tập trung cư(cid:1249)ng độ về phía nửa trên, làm chất lượng (cid:1191)nh không được c(cid:1191)i thiện, mà còn gi(cid:1191)m độ tương ph(cid:1191)n của (cid:1191)nh.

Ta có thể gi(cid:1191)i quyết vấn đề này bằng cách thực hiện một quá trình gọi là phối hợp histogram(histogram matching). Phối hợp histogram là quá trình biến đổi mức xám của (cid:1191)nh để histogram của (cid:1191)nh mới có một hình d(cid:1189)ng cụ thể định trước. Ta đã biết phép biến đổi

cho ta kết qu(cid:1191) là mức xám s tr(cid:1191)i rộng trên . Khi đó z ph(cid:1191)i thỏa phương . T(r) có thể tìm được từ (cid:1191)nh ban đầu. Nếu ta có pz(z) đã biết thì

toàn miền. Gi(cid:1191) sử ta có một biến z sao cho trình ta có thể tìm thấy H-1. Trong Matlab ta dùng hàm histeq để thực hiện phối hợp histogram. >>g=hiseq(f,hgram) hgram là một vector gồm các số nguyên đếm số giá trị mức xám với mỗi kho(cid:1191)ng chia trong d(cid:1191)i mức xám [0,G].

Trang 29

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

Tr(cid:1251) l(cid:1189)i với ví dụ trên. Ta thấy histogram của (cid:1191)nh ban đầu có các thành phần mức xám tập trung (cid:1251) hai phần. Phần đầu chiếm tỉ lệ lớn tập trung gần 0, và một phần nhỏ hơn nằm về phía bên ph(cid:1191)i của histogram. Ta đã biết rằng do sự tập trung mức xám t(cid:1189)i gần 0 nên histogram (cid:1191)nh ra không tr(cid:1191)i trên toàn miền, vì thế ta có thể dùng phối hợp histogram để gi(cid:1191)m sự tập trung này mà vẫn giữ được hình d(cid:1189)ng tổng thể ban đầu của histogram gốc.

(cid:1190)nh sau phối hợp histogram có độ tương ph(cid:1191)n tốt hơn. Ta có thể thấy rằng các thành phần mức xám tr(cid:1191)i đều trên kho(cid:1191)ng [0,255].

3)L(cid:1233)c (cid:1191)nh không gian:

Nhiễu thư(cid:1249)ng xuất hiện trên (cid:1191)nh do nhiều nguyên nhân khác nhau. Để gi(cid:1191)m nhiễu và nâng cao chất lượng (cid:1191)nh ta sử dụng những phương pháp lọc khác nhau, phù hợp với mỗi lo(cid:1189)i nhiễu cụ

Trang 30

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

thể. Trong chương này ta sẽ xét đến lọc (cid:1191)nh trong không gian. Chương tiếp theo sẽ đề cập đến lọc (cid:1191)nh trong miền tần số.

Lọc không gian(spatial filtering) cũng là một quá trình xử lý trên các điểm (cid:1191)nh, dựa trên một phép toán với các điểm (cid:1191)nh xung quanh. Phương pháp lọc (cid:1191)nh bao gồm các bước: (1)xác định điểm (cid:1191)nh trung tâm (x,y); (2) thực hiện các phép toán với các điểm xung quanh (x,y); (3) kết qua ta được đáp ứng của quá trình lọc t(cid:1189)i (x,y); (4) lập l(cid:1189)i các bước trên với tất c(cid:1191) các điểm (cid:1191)nh khác.

3.1)L(cid:1233)c tuy(cid:1219)n tính:

Lọc tuyến tính là phương pháp lọc trong đó mức xám mỗi pixel của (cid:1191)nh mới là tổ hợp tuyến tính của các mức xám của các pixels lân cận,tức là mỗi pixel lân cận sẽ được nhân với một hệ số tương ứng rồi được cộng l(cid:1189)i để được đáp ứng t(cid:1189)i điểm (cid:1191)nh trung tâm. Nếu vùng lân cận có kích thước m n thì ta có m*n hệ số tương ứng. Trong Matlab,các hệ số này được sắp xếp trong một ma trận kích thước m n,gọi là bộ lọc. Cơ chế lọc được thực hiện bằng cách di chuyển tâm của mặt n(cid:1189) qua lần lượt từng điểm (cid:1191)nh và thực hiện tính tổng các tích của mức xám các điểm (cid:1191)nh xung quanh với hệ số bộ lọc. Kích thước bộ lọc là lẻ. Kích thước nhỏ nhất có ý nghĩa là 3 3.

Gi(cid:1191) thiết rằng m=2a+1, n=2b+1, với a,b 1. Ta có biểu thức tính mức xám t(cid:1189)i (x,y):

Trang 31

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

Có hai khái niệm khi chúng ta thực hiện phương pháp lọc tuyến tính, đó là tương quan(correlation) và tích chập(convolution).Tương quan là quá trình dịch bộ lọc qua từng điểm (cid:1191)nh như ta đã đề cập. Tích chập cũng sử dụng quá trình tương tự, ngo(cid:1189)i trừ bộ lọc w quay 180 trước khi tiến hành dịch bộ lọc.

so với biên (cid:1191)nh. Một vấn đề khác ta cũng cần quan tâm là tiến hành lọc t(cid:1189)i các điểm nằm gần biên (cid:1191)nh. Với một bộ lọc vuông n n, t(cid:1189)i vị trí cách biên một kho(cid:1191)ng cách bộ lọc sẽ có biên trùng khít với biên (cid:1191)nh, nhưng đối với các điểm (cid:1191)nh nằm gần biên thì một hoặc một số hàng hoặc cột của ma trận lọc sẽ nằm bên ngoài (cid:1191)nh. Có nhiều gi(cid:1191)i pháp để gi(cid:1191)i quyết vấn đề này. Một gi(cid:1191)i pháp đơn gi(cid:1191)n là ta chỉ tiến hành xử lý t(cid:1189)i các điểm có kho(cid:1191)ng cách không nhỏ hơn

Kết qu(cid:1191) là (cid:1191)nh sau lọc có kích thước nhỏ hơn so với (cid:1191)nh gốc nhưng toàn bộ điểm (cid:1191)nh đều được xử lý. Trong trư(cid:1249)ng hợp cần (cid:1191)nh sau xử lý có cùng kích thước với (cid:1191)nh gốc, một gi(cid:1191)i pháp là tiến hành xử lý các điểm (cid:1191)nh (cid:1251) gần biên với các hệ số bộ lọc phủ trong (cid:1191)nh và bỏ qua các hệ số nằm bên ngoài (cid:1191)nh. Một gi(cid:1191)i pháp khác là thêm một số mức xám vào (cid:1191)nh gốc, gọi là đệm(padding) để mặt n(cid:1189) phủ toàn bộ (cid:1191)nh. Miếng đệm có thể là một số hàng và cột có giá trị 0(hoặc một hằng số nào đó), hoặc thêm các hàng và cột lặp l(cid:1189)i các giá trị mức xám trên biên (cid:1191)nh, hoặc đối xứng với các điểm (cid:1191)nh bên trong qua biên (cid:1191)nh. Điều dễ thấy là kích thước mặt n(cid:1189) càng lớn, (cid:1191)nh sau lọc sẽ có độ sai lệch càng lớn so với (cid:1191)nh gốc, do đó để (cid:1191)nh không bị biến d(cid:1189)ng thì cách duy nhất là thực hiện lọc đối với các điểm (cid:1191)nh có kích thước không nhỏ hơn

Xét một ví dụ sau:

Trang 32

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

Ta có một hàm f và một mặt n(cid:1189) w. Ta tiến hành thêm miếng đệm vào f, cụ thể là các số 0 để mặt n(cid:1189) w quét toàn bộ các điểm của f. Đối với phép toán tương quan ta tiến hành dịch mặt n(cid:1189) w theo từng điểm của f, t(cid:1189)i mỗi điểm ta tiến hành cộng các tích số của hai hàm f và w. Đối với tích chập, ta quay w một góc 180 rồi tiến hành như trên. Kết qu(cid:1191) cuối cùng được thể hiện, chia ra làm hai d(cid:1189)ng full và same. D(cid:1189)ng full là kết qu(cid:1191) của quá trình tính toán như trên, trong khi đó d(cid:1189)ng same cho ta kết qu(cid:1191) có cùng kích thước với f.

Xét 1 ví dụ tương tự nhưng là m(cid:1191)ng 2 chiều:

Trang 33

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

Matlab cung cấp cho ta hàm imfilter để thực hiện lọc tuyến tính. Cú pháp của hàm như sau:

>>g=imfilter(f,w,filtering_mode, boundary_options,size_options)

Trong đó f là (cid:1191)nh gốc, g là (cid:1191)nh sau xử lý, các thông số tùy định:filtering_mode có gồm „corr‟ thực hiện phép toán tương quan và „conv‟ thực hiện phép chập, mặc định là „corr‟, size_options có thể là „same‟ và „full‟ giống như cách thực hiện ví dụ trên, mặc định là „same‟.

Thông số boundary_options cho ta cách thức chèn đệm(padding). Matlab cho ta 4 cách thức:

P: Biên (cid:1191)nh gốc sẽ được thêm padding có giá trị mức xám là P, mặc định là 0

„replicate‟: các mức xám bên ngoài lặp l(cid:1189)i giá trị của biên.

„symmetric‟: các mức xám bên ngoài đối xứng gương với các điểm (cid:1191)nh bên trong qua biên.

„circular‟: (cid:1191)nh được thêm padding trên cơ s(cid:1251) gi(cid:1191) thiết (cid:1191)nh đầu vào là một hàm tuần hoàn.

Trang 34

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

Ta xét một ví dụ cụ thể sử dụng hàm imfilter: Gi(cid:1191) sử ta có một (cid:1191)nh f (cid:1251) class double, kích thước 512 512

>>w=ones(31);

b

c

a

d

e

f

cho ta mặt n(cid:1189) lọc là ma trận vuông 31 31. Do đây là ma trận đối xứng nên toán tương quan và chập là như nhau.

Hình a là (cid:1191)nh ban đầu. Hình b là kết qu(cid:1191) của quá trình lọc (cid:1191)nh dùng padding là các mức xám giá trị 0(màu đen), ta thấy (cid:1191)nh bị làm m(cid:1249) đi (cid:1251) c(cid:1189)nh giữa 2 vùng trắng và đen, cũng như giữa phần biên (cid:1191)nh với vùng trắng. Điều này có thể gi(cid:1191)i thích như sau: Do mức xám t(cid:1189)i một điểm là tổng của các tích mức xám các điểm vùng lân cận với hệ số của bộ lọc, (cid:1251) đây các hệ số bộ lọc là 1, do đó mỗi điểm (cid:1191)nh xem như là giá trị trung bình của các điểm (cid:1191)nh xung quanh, dẫn đến kết qu(cid:1191) như trên. Ta có thể lo(cid:1189)i bỏ phần m(cid:1249) (cid:1251) vùng biên bằng cách dùng thông số „replicate‟ hoặc „symmetric‟ như (cid:1251) kết qu(cid:1191) c và d. Với hình e, ta sử dụng thông số „circular‟. Do sự lập l(cid:1189)i có tính chu kỳ làm cho vùng sáng và tối nằm c(cid:1189)nh nhau, dẫn đến kết qu(cid:1191) là toàn bộ biên (cid:1191)nh cũng như phần c(cid:1189)nh giữa 2 vùng sáng và tối bên trong bức (cid:1191)nh bị m(cid:1249).

Nếu ta sử dụng (cid:1191)nh ban đầu là class uint8 và sử dụng bộ lọc w như trên, ta nhận được kết qu(cid:1191) là hình f với một phần dữ liệu (cid:1191)nh gốc bị mất. Lý do là các giá trị lớn hơn 255 đều bị gán giá trị 255. Để gi(cid:1191)i quyết vấn đề đó, cửa sổ lọc cần được chuẩn hóa trước khi tiến hành lọc:

Trang 35

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

>>w=w/(sum(w(:)));

Ta có công thức tính mức xám của (cid:1191)nh sau xử lý qua bộ lọc chuẩn hóa:

3.2)L(cid:1233)c phi tuy(cid:1219)n:

Cũng như lọc tuyến tính, lọc phi tuyến sử dụng một cửa sổ lọc và trượt qua các pixels của (cid:1191)nh gốc. Tuy nhiên nếu lọc tuyến tính dựa theo việc lấy tổng có trọng số các pixels lân cận thì lọc phi tuyến sẽ thực hiện một phép toán phi tuyến với các pixels đó. Ví dụ, gắn giá trị t(cid:1189)i mỗi pixel bằng giá trị lớn nhất của các pixel lân cận là một phép toán phi tuyến.

Matlab cung cấp cho ta 2 hàm nlfilter và colfilt để thực hiện lọc phi tuyến một cách tổng quát. Hàm nlfilter thực hiện trực tiếp trên ma trận 2 chiều, trong khi hàm colfilt lọc theo từng cột. Hàm colfilt đòi hỏi nhiều bộ nhớ hơn nlfilter, nhưng tốc độ thực thi l(cid:1189)i nhanh hơn đáng kể. Các ứng dụng thư(cid:1249)ng đòi hỏi tốc độ cao nên hàm colfilt được sử dụng nhiều hơn. Ta nói rõ hơn về cách dùng hàm colfilt.

Gi(cid:1191) sử ta có một (cid:1191)nh f kích thước M N, và một cửa sổ lọc kích thước m n, colfilt sẽ t(cid:1189)o ra mộ ma trận, gi(cid:1191) sử tên là A, với kích thước lớn nhất có thể là mn MN, trong đó mỗi cột sẽ tương ứng với các phần tử điểm (cid:1191)nh lân cận điểm (cid:1191)nh cần lọc. Ví dụ như cột đầu tiên sẽ tương ứng với các pixels lân cận điểm (cid:1191)nh (cid:1251) vị trí đầu tiên của (cid:1191)nh. Đối với các các điểm (cid:1191)nh gần biên thì cột tương ứng của ma trận A sẽ có thêm các thành phần padding, colfilt sử dụng padding là 0. Thông thư(cid:1249)ng A có kích thước các cột nhỏ hơn MN vì hàm colfilt thư(cid:1249)ng chia (cid:1191)nh f ra làm nhiều (cid:1191)nh nhỏ để tiết kiệm bộ nhớ.

>>g=colfilt(f,[m n], „sliding‟, @fun);

Trong đó f là (cid:1191)nh gốc, g là (cid:1191)nh sau xử lý, cửa sổ lọc có kích thước m n, „sliding‟ là thông số sử dụng trong lọc phi tuyến, chỉ ra quá trình xử lý là trượt cửa sổ lọc qua các pixels của (cid:1191)nh f, fun là một hàm phi tuyến đã được định nghĩa từ trước.

Do cách sắp xếp của ma trận A như trên, hàm fun ph(cid:1191)i tiến hành trên mỗi cột của A, t(cid:1189)o ra một vector hàng v, trong đó mỗi phần tử là kết qu(cid:1191) của phép toán trên mỗi cột của A. Ta có thể suy ra là vector v có kích thước lớn nhất có thể là 1 MN.

Do colfilt tự t(cid:1189)o padding cho (cid:1191)nh có giá trị là 0 và không thể thay đổi được. Do đó, không như lọc tuyến tính dùng hàm imfilter có thể tùy biến padding, đối với lọc phi tuyến ta ph(cid:1191)i tiến hành thêm padding ngay lúc đầu cho (cid:1191)nh trước khi tiến hành lọc. Matlab cung cấp cho ta hàm padarray để thực hiện việc này.

>> fp=padarray(f, [r c], method, direction);

Trang 36

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

Trong đó f là (cid:1191)nh ban đầu, fp là (cid:1191)nh sau khi thêm padding, [r c] là số hàng và cột mà ta muốn thêm vào (cid:1191)nh, thông số method có các lựa chọn P(giá trị mức xám), „symmetric‟, „replicate‟ và „circular‟ với cách thức thực hiện đã được đề cập (cid:1251) trên, giá trị mặc định là 0 , direction có thể là „pre‟, ‟post‟, ‟both‟(mặc định) cho phép thêm padding vào trước phần tử đầu tiên, sau phần tử đầu tiên của mỗi chiều, hoặc c(cid:1191) hai.

Xét ví dụ sau:

>>f= [ 1 2; 3 4];

>>fp=padarray(f, [3 2], „replicate‟, „post‟)

fp =

1 2 2 2

3 4 4 4

3 4 4 4

3 4 4 4

3 4 4 4

Bây gi(cid:1249) chúng ta sẽ định nghĩa một hàm lọc phi tuyến và lấy hàm này làm tham số cho hàm colfilt

function v=gmean(A)

mn= size(A,1);

v=prod(A,1).^(1/mn);

Hàm trên dùng để tính trung bình nhân(geometric mean) của các giá trị mức xám lân cận điểm (cid:1191)nh xử lý. Công thức tính trung bình nhân tổng quát là:

Trang 37

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

Tiếp theo ta tiến hành thêm padding cho (cid:1191)nh gốc:

>>f=padarray(f,[m n], „replicate‟);

Cuối cùng ta dùng hàm colfilt để t(cid:1189)o (cid:1191)nh mới:

>>g=colfilt(f, [m n], „sliding‟, @gmean);

Hàm colfilt sẽ lấy kết qu(cid:1191) thực hiện từ hàm gmean, t(cid:1189)o ra một vector hàng chứa kết qu(cid:1191) phép toán trung bình nhân thực hiện với mỗi cột của A, sau đó sắp xếp l(cid:1189)i thành một ma trận 2 chiều là (cid:1191)nh ra của bộ lọc.

Phép toán lấy trung bình nhân ta sẽ gặp trong phần phục hồi (cid:1191)nh.

3.3)(cid:1260)ng d(cid:1257)ng l(cid:1233)c (cid:1191)nh không gian:

3.3.1)Các bộ l(cid:1233)c làm m(cid:1231)n (cid:1191)nh:

Các bộ lọc làm mịn (cid:1191)nh được sử dụng để làm m(cid:1249) và gi(cid:1191)m nhiễu. Làm m(cid:1249) (cid:1191)nh được sử dụng trong quá trình tiền xử lý (cid:1191)nh, nhằm mục đích lo(cid:1189)i bỏ các chi tiết nhỏ ra khỏi (cid:1191)nh trước khi tiến hành tách các thành phần lớn hơn khỏi (cid:1191)nh, làm m(cid:1249) còn được sử dụng để làm liền l(cid:1189)i những đứt quãng nhỏ của đư(cid:1249)ng thẳng hoặc đư(cid:1249)ng cong. Chúng ta cũng có thể gi(cid:1191)m nhiễu bằng cách làm m(cid:1249) (cid:1191)nh bằng các bộ lọc tuyến tính cũng như phi tuyến.

a)L(cid:1233)c tuy(cid:1219)n tính:

Như ta đã biết, lọc tuyến tính là một quá trình trong đó mỗi điểm (cid:1191)nh có giá trị bằng trung bình của các điểm (cid:1191)nh lân cận xác định b(cid:1251)i bộ lọc. Do đó (cid:1191)nh sau xử lý tr(cid:1251) nên mượt hơn, gi(cid:1191)m độ sắc nét so với (cid:1191)nh gốc. Kết qu(cid:1191) là các thành phần nhiễu ngẫu nhiên, thư(cid:1249)ng có mức xám khác biệt với các vùng lân cận sẽ được lo(cid:1189)i bỏ. Tuy nhiên một h(cid:1189)n chế dễ thấy khi tiến hành làm mượt (cid:1191)nh là t(cid:1189)i các vị trí biên( chi tiết được sử dụng nhiều trong xử lý (cid:1191)nh), nơi có sự thay đổi nhanh chóng của các mức xám, l(cid:1189)i bị làm m(cid:1249) đi (cid:1191)nh hư(cid:1251)ng đến các bước tiếp theo trong xử lý (cid:1191)nh. Tuy nhiên nếu sử dụng cửa sổ lọc thích hợp, ta có thể gi(cid:1191)m nhiễu mà chỉ ít (cid:1191)nh hư(cid:1251)ng đến biên (cid:1191)nh.

Một cửa sổ lọc chuẩn hóa thư(cid:1249)ng thấy và đã được đề cập là cửa sổ có các hệ số giống nhau:

Trang 38

1

1

1

1

1

1

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

1

1

1

w= 1/9

2

1

1

Một lo(cid:1189)i cửa sổ lọc chuẩn hóa khác có các hệ số khác nhau:

4

2

2

2

1

1

w= 1/16

Bộ lọc trên tiến hành lấy trung bình có trọng số đối với các điểm (cid:1191)nh lân cận, tức là mỗi điểm (cid:1191)nh được nhân với một hệ số khác nhau, hệ số càng lớn thì điểm (cid:1191)nh đó có trọng số càng lớn. (cid:1250) bộ lọc trên, điểm (cid:1191)nh trung tâm có vai trò quan trọng nhất trong phép toán tính trung bình, càng ra xa điểm (cid:1191)nh trung tâm trọng số của các điểm (cid:1191)nh cũng gi(cid:1191)m dần. Mục đích của việc làm này là h(cid:1189)n chế (cid:1191)nh bị m(cid:1249) khi tiến hành làm mượt. Tuy nhiên ta rất khó thấy sự khác biệt giữa hai bộ lọc trên do cửa sổ lọc có kích thước nhỏ hơn nhiều so với kích thước (cid:1191)nh

Trang 39

a

b

c

e

d

f

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

Ta xét ví dụ trên với việc sử dụng các bộ lọc trung bình có kích cỡ khác nhau, (cid:1251) đây ta dùng padding là các giá trị 0. Hình a là (cid:1191)nh gốc. Hình b sử dụng bộ lọc 3 3, hình bị m(cid:1249) đi chút ít, với các chi tiết nhỏ như chữ a nhỏ và thành phần nhiễu bị m(cid:1249) nhiều hơn so với các chi tiết khác. Kết qu(cid:1191) tương tự cũng x(cid:1191)y ra với hình c sử dụng bộ lọc kích thước 5 5. Ta thấy các chi tiết nhỏ như nhiễu đã gi(cid:1191)m dần, các mép hình răng cưa cũng đã được làm mượt hơn, nhưng vẫn đ(cid:1191)m b(cid:1191)o cách thành phần kích thước lớn không bị (cid:1191)nh hư(cid:1251)ng nhiều. (cid:1190)nh d dùng cửa sổ 9 9, (cid:1191)nh m(cid:1249) hơn, các chi tiết nhiễu đã được gi(cid:1191)m khá nhiều. (cid:1190)nh e và (cid:1191)nh f dùng các bộ lọc tương ứng 16 16 và 35 35, các chi tiết nhỏ gần như đã bị lo(cid:1189)i khỏi (cid:1191)nh, do đó có thể dễ dàng lấy được các thành phần có kích thước lớn.

Xét một ví dụ khác:

Trang 40

a

c

b

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

Hình a là (cid:1191)nh gốc. Hình b là (cid:1191)nh sau lọc với bộ lọc kích thước 15 15, cho ta thấy các chi tiết nhỏ gần như bị lo(cid:1189)i bỏ. Để thu các thành phần kích thước lớn của (cid:1191)nh ta có thể biến đổi (cid:1191)nh b thành (cid:1191)nh nhị phân. (cid:1250) đây ta cho mức ngưỡng là 25% giá trị mức xám lớn nhất của (cid:1191)nh b. Kết qu(cid:1191) ta được (cid:1251) (cid:1191)nh c, tất c(cid:1191) các chi tiết nhỏ bị lo(cid:1189)i bỏ, chỉ còn các thành phần kích thước lớn.

b) Bộ l(cid:1233)c h(cid:1189)ng(Order-Statistics filters):

Lọc h(cid:1189)ng là phương pháp lọc trong đó mức xám t(cid:1189)i một điểm được tính dựa trên sự xếp h(cid:1189)ng các điểm (cid:1191)nh lân cận. Trong Matlab, hàm ordfilt2 cung cấp cho ta bộ lọc d(cid:1189)ng này.

>>g= ordfilt2(f, order, domain)

Hàm ordfilt sắp xếp thứ tự từ nhỏ đến lớn các điểm nằm trong một miền xác định domain, domain là một ma trận có kích thước của cửa sổ lọc, gồm có các phần tử có giá trị 0 hoặc 1 dùng để xác định các điểm (cid:1191)nh lân cận được sử dụng, các điểm (cid:1191)nh ứng với 0 sẽ không được xếp h(cid:1189)ng. Pixel của (cid:1191)nh gốc sẽ được thay thế bằng giá trị mức xám thứ oder. Gi(cid:1191) sử muốn lấy phần tử nhỏ nhất trong lân cận m n, ta dùng lệnh:

>>g=ordfilt2(f,1,ones(m,n));

hoặc muốn lấy phần tử lớn nhất:

>>g=ordfilt2(f,m*n,ones(m,n));

Một trư(cid:1249)ng hợp đặc biệt của lọc h(cid:1189)ng là bộ lọc trung vị, trong đó phần tử được chọn là phần tử xếp h(cid:1189)ng chính giữa. Bộ lọc này thư(cid:1249)ng được sử dụng trong thực tế.

>>g=ordfilt2(f,median(1:m*n),ones(m,n));

Matlab cũng cung cấp hàm medfilt2 để thực hiện lọc trung vị.

>>g=medfilt2(f, [m n], padopt);

Trang 41

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

Trong đó [m n] cho ta các thành phần nằm lân cận có kích thước m n, padopt có thể là „zeros‟, „symmetric‟ và „index‟, khi đó các pixels thêm vào là 1 nếu (cid:1191)nh thuộc kiểu double và 0 nếu thuộc các kiểu khác.

Bộ lọc trung vị sử dụng hiệu qu(cid:1191) trong những trư(cid:1249)ng hợp có các giá trị pixel lớn hơn hoặc nhỏ hơn hẳn các giá trị lân cận, ví dụ như nhiễu “salt and pepper”, khi đó các thành phần nhiễu này do có mức xám khác biệt với các điểm lân cận sẽ được thay thế bằng mức xám gần bằng các điểm xung quanh.

a

b

c

Xét ví dụ:

Trang 42

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

Hình a là (cid:1191)nh chụp của một board m(cid:1189)ch bị nhiễu salt and pepper. Sử dụng bộ lọc trung bình kích thước 3 3 cho ta kết qu(cid:1191) hình b, (cid:1191)nh đã bớt nhiễu nhưng bị m(cid:1249) đi.Hình c là kết qu(cid:1191) của phép lọc trung vị dùng cửa sổ lọc 3 3 cho ta hình (cid:1191)nh được c(cid:1191)i thiện một cách rõ rệt.

3.3.2) Các bộ l(cid:1233)c làm sắc nét (cid:1191)nh:

Mục đích của việc làm sắc (cid:1191)nh là nổi bật các chi tiết trong (cid:1191)nh hoặc làm sắc các chi tiết bị m(cid:1249) b(cid:1251)i quá trình làm mượt (cid:1191)nh. Ta đã biết quá trình làm mượt (cid:1191)nh là thực hiện phép lấy trung bình các giá trị lân cận điểm (cid:1191)nh cần xử lý, tương tự như phép toán tích phân, trong khi đó quá trình làm sắc nét (cid:1191)nh tập trung vào sự sai khác giữa các chi tiết trong (cid:1191)nh, giống như phép toán vi phân. Kết qu(cid:1191) là biên (cid:1191)nh và các chi tiết nhiễu, nơi có sự khác biệt về mức xám với các điểm (cid:1191)nh xung quanh, được làm nổi bật lên.

Trong phần này, ta sẽ thực hiện làm sắc nét (cid:1191)nh dựa trên đ(cid:1189)o hàm bậc một và bậc hai của hàm r(cid:1249)i r(cid:1189)c.

Đ(cid:1189)o hàm bậc 1 của hàm r(cid:1249)i r(cid:1189)c một chiều:

Và đ(cid:1189)o hàm bậc 2 :

Để thấy được sự giống cũng như khác nhau về cơ b(cid:1191)n giữa hai phương pháp sử dụng đ(cid:1189)o hàm bậc 1 và bậc 2, ta xét một ví dụ cụ thể sau:

Trang 43

a

b

c

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

Ta để ý thấy (cid:1191)nh trên hình a có một đư(cid:1249)ng chéo và một điểm nhiễu. Hình b biểu diễn mức xám của các pixels nằm trên đư(cid:1249)ng ngang qua điểm giữa của (cid:1191)nh, bao gồm c(cid:1191) điểm nhiễu. Hình c đơn gi(cid:1191)n hóa các giá trị mức xám của hình b, chỉ gồm 8 mức xám khác nhau. Từ hình c ta có thể phân tích (cid:1191)nh hư(cid:1251)ng của phương pháp đ(cid:1189)o hàm bậc 1 và bậc 2 đối với điểm nhiễu, với đư(cid:1249)ng chéo và c(cid:1189)nh biên giữa đối tượng và nền.

Các đo(cid:1189)n có mức xám không đổi thì đ(cid:1189)o hàm bậc 1 và 2 đều cho đáp ứng là 0. Với đo(cid:1189)n dốc tho(cid:1191)i(ramp), đ(cid:1189)o hàm bậc 1 cho ta các mức khác 0 trên toàn đo(cid:1189)n, đ(cid:1189)o hàm bậc 2 chỉ cho các giá trị khác 0 (cid:1251) đầu và cuối đo(cid:1189)n, điều đó chứng tỏ với các đo(cid:1189)n chuyển tiếp như thì đ(cid:1189)o hàm bậc 1 t(cid:1189)o ra c(cid:1189)nh dày hơn và đ(cid:1189)o hàm bậc 2 t(cid:1189)o ra c(cid:1189)nh sắc hơn . Với điểm nhiễu( isolated point), đáp ứng xung quanh và t(cid:1189)i điểm nhiễu đ(cid:1189)o hàm bậc 2 lớn hơn so với đ(cid:1189)o hàm bậc 1, do đó đ(cid:1189)o hàm bậc 2 t(cid:1189)o ra chi tiết sắc hơn đối với nhiễu và các giá trị mức xám thay đổi nhanh. Đư(cid:1249)ng chéo(thin line) cũng tương tự với điểm nhiễu. Còn l(cid:1189)i với bước nh(cid:1191)y(step) thì đáp ứng của đ(cid:1189)o hàm bậc 1 và 2 là tương tự nhau.

Ta có thể kết luận: (1) Đ(cid:1189)o hàm bậc 1 t(cid:1189)o ra các c(cid:1189)nh dày hơn so với đ(cid:1189)o hàm bậc 2, (2)Đ(cid:1189)o hàm bậc 2 (cid:1191)nh hư(cid:1251)ng nhiều hơn đến các chi tiết tinh.

Trang 44

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

Đ(cid:1189)o hàm bậc 2 được sử dụng nhiều hơn trong xử lý (cid:1191)nh do nó làm nổi bật các chi tiết sắc, do đó chúng ta sẽ tập trung vào phương pháp này để làm sắc nét (cid:1191)nh.

Do (cid:1191)nh là một hàm r(cid:1249)i r(cid:1189)c hai chiều nên ta cần có đ(cid:1189)o hàm bậc hai của hàm 2 chiều.

Toán tử Laplace của hàm 2 biến là:

Ta cũng có công thức tính đ(cid:1189)o hàm bậc 2 cho hàm r(cid:1249)i r(cid:1189)c hai chiều thư(cid:1249)ng sử dụng là:

Và:

Toán tử Laplace trong không gian r(cid:1249)i r(cid:1189)c 2 chiều là:

0

1

0

0

-1

0

hoặc

1

-4

1

-1

4

-1

0

1

0

0

-1

0

Biểu thức trên có thể thực hiện đối với các phần tử của (cid:1191)nh bằng cách nhân chập (cid:1191)nh với ma trận:

Một định nghĩa khác về đ(cid:1189)o hàm bậc 2 có sử dụng thêm các phần tử đư(cid:1249)ng chéo:

Trang 45

1

1

1

-1

-1

-1

hoặc

1

-8

1

-1

8

-1

1

1

1

-1

-1

-1

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

Do Laplace là toán tử đ(cid:1189)o hàm, nó làm sắc bén các chi tiết tinh hay các thành phần mức xám biến đổi nhanh, nhưng l(cid:1189)i dẫn đến giá trị 0 cho những vùng có cùng một mức xám cũng như gi(cid:1191)m giá trị của các thành phần mức xám ít biến đổi. Một cách đơn gi(cid:1191)n phục hồi l(cid:1189)i các vùng này nhưng vẫn giữ cho các chi tiết sắc bén là cộng (cid:1191)nh gốc với (cid:1191)nh thực hiện phép lọc bằng toán tử Laplace.

Trong đó c=1 nếu hệ số trung tâm của mặt l(cid:1189) lọc là dương, c=-1 nếu ngược l(cid:1189)i.

a

b

d

c

Xét ví dụ:

Trang 46

c

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

Hình a là (cid:1191)nh gốc. Hình b là (cid:1191)nh sau xử lý dùng mặt n(cid:1189) Laplace, (cid:1251) đây ta thấy vùng có thành phần mức xám biến đổi chậm sau khi lọc sẽ bị gi(cid:1191)m giá trị. Trong khi đó phần c(cid:1189)nh biên và các chi tiết có mức xám biến đổi nhanh được thể hiện rõ nét hơn. Hình c là kết qu(cid:1191) của việc cộng (cid:1191)nh gốc với (cid:1191)nh Laplace, phục hồi l(cid:1189)i phần bị gi(cid:1191)m mức xám nhưng vẫn giữ được sự sắc nét của các chi tiết. Hình d sử dụng mặt n(cid:1189) có thêm các giá trị đư(cid:1249)ng chéo, cho hình (cid:1191)nh sắc nét hơn c.

Mặt n(cid:1189) Laplace có thể t(cid:1189)o ra trong Matlab nh(cid:1249) hàm fspecial

>>fspecial(„laplacian‟, alpha)

cho phép chỉnh mức độ sắc nét của hình (cid:1191)nh. Trong đó hệ số

0

-1

0

-1

-1

-1

-1

5

-1

-1

9

-1

0

-1

0

-1

-1

-1

Ta có thể dùng mặt n(cid:1189) lọc trực tiếp như sau:

Trang 47

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

Bộ lọc tăng cường(high-boost filter):

-1

-1

-1

0

-1

0

-1

A+8

-1

-1

A+4

-1

-1

-1

-1

0

-1

0

Bộ lọc tăng cư(cid:1249)ng cũng là một ứng dụng của toán tử Laplace:

Với A

Với A bằng 1, bộ lọc tăng cư(cid:1249)ng giống như mặt n(cid:1189) lọc trực tiếp (cid:1251) trên. A>1 thì kh(cid:1191) năng làm sắc nét (cid:1191)nh gi(cid:1191)m dần, nếu A đủ lớn thì (cid:1191)nh sau xử lý gần như giống (cid:1191)nh ban đầu nhân với 1 hằng số.

Một ứng dụng của bộ lọc tăng cư(cid:1249)ng là làm sáng (cid:1191)nh vì nó nâng mức xám trung bình của (cid:1191)nh ban đầu mà vẫn giữ được tính chất làm nét (cid:1191)nh.

A=1

Ảnh gốc

A=1.7

Ví dụ:

Trang 48

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

4) L(cid:1233)c (cid:1191)nh trong mi(cid:1221)n tần số:

Trong phần trước chúng ta đã đề cập đến các bộ lọc không gian để nâng cao chất lượng (cid:1191)nh số. Trong phần này,chúng ta sẽ thực hiện các bộ lọc (cid:1191)nh trong miền tần số thông qua biến đổi Fourier. Biến đổi Fourier đóng vai trò quan trọng trong xử lý (cid:1191)nh, có kh(cid:1191) năng linh ho(cid:1189)t cao trong thiết kế và tiến hành các phương pháp lọc trong việc nâng cao chất lượng (cid:1191)nh, phục hồi (cid:1191)nh, nén (cid:1191)nh… Trong phần này tao sẽ tập trung vào các bộ lọc để nâng cao chất lượng (cid:1191)nh.

4.1) Bi(cid:1219)n đổi Fourier rời r(cid:1189)c 2 chi(cid:1221)u(2-D Discrete Fourier Transform( DFT)):

Gi(cid:1191) sử ta có một (cid:1191)nh kích thước M N được mộ t(cid:1191) b(cid:1251)i hàm 2 chiều f(x,y), DFT của f là

F(u,v) được cho b(cid:1251)i biểu thức:

Với u=0,1,2,…,M-1 và v=0,1,2,…,N-1. Kết qu(cid:1191) ta được hệ trục hai chiều trong miền tần số với hai biến u,v. Các giá trị F(u,v) t(cid:1189)o thành hình chữ nhật kích thước M N, cùng kích thước với (cid:1191)nh gốc.

Biến đổi Fourier ngược:

Trong Matlab bắt đầu với giá trị 1 trong ma trận, F(1,1) và f(1,1) sẽ tương ứng với F(0,0) và f(0,0) trong biểu thức trên. F(0,0) gọi là thành phần hằng số hoặc thành phần 1 chiều(DC) của biến đổi Fourier, F(0,0) bằng MN lần tổng giá trị f(x,y).

Ta nhận thấy f(x,y) là số thực, còn F(u,v) l(cid:1189)i là số phức.

Phổ biên độ:

Và pha:

Mật độ phổ công suất:

và . Trong miền tần số ta sẽ quan tâm đến

Với f(x,y) là thực, ta được:

F(u,v) tuần hoàn nên ta có:

Trang 49

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

hoàn: Biến đổi ngược cũng cho ta f(x,y) tuần

, ta có thể dịch điểm(0,0) về

Do tính chất đối xứng qua điểm (0,0) và tuần hoàn của vị trí trung tâm tức là vị trí (M/2, N/2) của phổ. Ta có

Với uo=M/2 và vo=N/2 :

với thì F(0,0) sẽ dịch đến vị trí trung tâm. Do đó nhân

Việc dịch vị trí như vậy cho ta quan sát phổ một cách dễ dàng hơn và thực hiện lọc (cid:1191)nh một cách trực quan. Từ đây khi nói đến giá trị DC, ta xem điểm đó (cid:1251) vị trí trung tâm của phổ.

Trong Matlab, hàm fft2 cho ta biến đổi Fourier của ma trận không gian 2 chiều:

>>F=fft2(f);

Phép dịch phổ để đưa giá trị F(0,0) về trung tâm:

>>F2=fftshift(f);

Để quan sát phổ ta sử dụng hàm imshow, với lưu ý là phổ biên độ:

>>imshow(abs(F2),[ ]);

Ta còn có hàm ifft2 là phép biến đổi Fourier ngược:

>>f=ifft2(F);

Và hàm ifftshift đưa điểm vị trí trung tâm về góc trái trên cùng của phổ:

>>F=ifftshift(F2);

Trang 50

c

b

a

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

Hình b là phổ của (cid:1191)nh trong hình a, c là kết qu(cid:1191) của quá trinh dịch phổ trong hình b.

4.2) L(cid:1233)c (cid:1191)nh trong mi(cid:1221)n tần số:

Mỗi giá trị F(u,v) chứa tất c(cid:1191) các thành phần f(x,y) nhân với thành phần mũ,do đó phổ Fourier có liên quan đến sự thay đổi các giá trị mức xám của (cid:1191)nh. Tần số thấp ứng với các thành phần có sự thay đổi chậm về mức xám của (cid:1191)nh, trong khi đó tần số cao ứng với sự thay đổi mức xám nhanh hơn, ví dụ như nhiễu và c(cid:1189)nh biên. Như vậy nếu lọc đi các thành phần tần số cao và lấy thành phần tần số thấp thì (cid:1191)nh thu được sẽ mượt và gi(cid:1191)m nhiễu, trong khi đó nếu ta chỉ lấy các thành phần tần số cao thì (cid:1191)nh sau lọc sẽ sắc nhọn và các chi tiết như nhiễu sẽ nổi bật hơn. Ta có các bộ lọc tương ứng là bộ lọc thông thấp và bộ lọc thông cao.

4.2.1) Các khái niệm c(cid:1131) b(cid:1191)n:

Ta có

Ta đã biết lọc (cid:1191)nh trong không gian là phép chập giữa (cid:1191)nh f(x,y) và măt n(cid:1189) w(x,y). Nó tương đương với phép nhân F(u,v) và H(u,v) trong miền tần số. Ta có thể tiến hành lọc trong miền tần số rồi dùng IDFT để có (cid:1191)nh sau lọc

Một lưu ý là (cid:1191)nh và biến đổi của nó (cid:1251) miền tần số sẽ có tính chu kỳ như đã đề cập khi dùng DFT và IDFT, dẫn đến sự tác động lẫn nhau giữa các thành phần khác 0 của 2 chu kỳ gần nhau làm (cid:1191)nh sau xử lý bị biến d(cid:1189)ng.

Xét một ví dụ sau:

Trang 51

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

Bên trái là phép chập giữa hai tín hiệu không có tính chu kỳ, tương ứng với phép lọc trong miền tần số. Bên ph(cid:1191)i là tích chập của hai tín hiệu tương tự nhưng có tính tuần hoàn. Ta thấy kết qu(cid:1191) tích chập cũng là một hàm mang tính chu kỳ nhưng đã bị biến d(cid:1189)ng với tín hiệu bên trái.

Ta có thể gi(cid:1191)i quyết vấn đề này bằng cách thêm vào các giá trị 0 cho c(cid:1191) hai hàm f và h. Gi(cid:1191) sử f và h bao gồm A và B điểm, hàm sau khi thêm vào các giá trị 0:

để các thành phần khác 0 của 2 chu kỳ kế nhau không

Với P ph(cid:1191)i thỏa điều kiện: tác động lẫn nhau:

Trang 52

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

Ta được kết qu(cid:1191) của phép chập sau khi thêm các giá trị 0 không còn bị biến d(cid:1189)ng.

Trang 53

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

Xét (cid:1191)nh f(x,y) và bộ lọc h(x,y) có kích thước lần lượt là A B và C D, thực hiện tương tự như trên bằng cách thêm padding là các giá trị 0 cho c(cid:1191) hai hàm. Hai hàm sau khi thêm có cùng kích thước, gi(cid:1191) sử là P Q. Điều kiện (cid:1191)nh sau lọc không bị biến d(cid:1189)ng là:

Do ta sử dụng các bộ lọc cùng kích thước với (cid:1191)nh trong miền tần số nên A=C và B=D

a

b

c

Ví dụ:

Không dùng padding

Sử dụng padding

Hình a là (cid:1191)nh gốc. Các hình b và c là (cid:1191)nh sau lọc dùng bộ lọc thông thấp, như đã đề cập là bộ lọc làm mịn (cid:1191)nh. Hình b sử dụng bộ lọc nhưng không có padding, ta thấy tác động của các thành phần hai chu kỳ c(cid:1189)nh nhau tác động lẫn nhau. Còn (cid:1251) hình c, do có padding là các giá trị 0 nên ta có thể thấy kết qu(cid:1191) là với vùng sáng bị làm m(cid:1249) (cid:1251) các phần c(cid:1189)nh và biên. (cid:1190)nh dưới cho ta thấy sự lặp l(cid:1189)i của (cid:1191)nh theo chu kỳ để gi(cid:1191)i thích rõ hơn cho hình b và c.

Trang 54

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

4.2.2) L(cid:1233)c thông th(cid:1193)p:

Quá trình lọc (cid:1191)nh trong miền tần số có thể tóm tắt như sau:

Biến đổi Fourier để xử lý (cid:1191)nh (cid:1251) miền tần số

Tiến hành lấy Fourier ngược của kết qu(cid:1191) (c)

a) Nhân f(x,y) với (-1)(x+y) b) c) Nhân F(u,v) với bộ lọc H(u,v) d) e) Lấy phần thực của kết qu(cid:1191) (d) f) Nhân kết qu(cid:1191) từ (e) với (-1)x+y cho ta (cid:1191)nh sau lọc

Sơ đồ quá trình lọc (cid:1191)nh trong miền tần số:

Ta đã biết bộ lọc thông thấp giúp làm mịn (cid:1191)nh, tương đương với bộ lọc trung bình trong miền không gian.

Ta sẽ xét 3 lo(cid:1189)i bộ lọc thông thấp là bộ lọc lý tư(cid:1251)ng, bộ lọc Butterworth và bộ lọc Gauss.

Bộ lọc thông thấp lý tư(cid:1251)ng có hàm truyền đ(cid:1189)t:

là một giá trị khác 0, gọi là ngưỡng cắt và D(u,v) là kho(cid:1191)ng cách từ điểm (u,v) đến tâm.

Với Bộ lọc này không có trong thực tế, nhưng có thể mô phỏng bằng Matlab.

Bộ lọc Butterworth bậc n, với ngưỡng cắt Do, có d(cid:1189)ng:

Bộ lọc Gauss có d(cid:1189)ng:

Trang 55

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

Bộ lọc thông thấp lý tưởng

Bộ lọc thông thấp Gauss

Bộ lọc thông thấp Butterworth bậc 3

Bộ lọc thông thấp Butterworth bậc 2

gọi là độ lệch chuẩn, nếu thay bằng Do, ta có giá trị ngưỡng cắt là Do.

Trên là hình các bộ lọc có cùng kích thước 500 500, ngưỡng cắt là Do=50. Ta có một nhận xét là độ dốc của bộ lọc Gauss thấp nhất, t(cid:1189)i ví trí ngưỡng cắt Do biên độ gi(cid:1191)m còn 60,7% so với giá trị lớn nhất là 1, bộ lọc Butterworth có thể xem là sự chuyển tiếp giữa bộ lọc lý tư(cid:1251)ng và bộ lọc Gauss, với bậc thấp bộ lọc Butterworth có độ dốc gần giống bộ lọc Gauss, nhưng bậc càng cao thì l(cid:1189)i càng dốc. Giá trị t(cid:1189)i ngưỡng cắt bằng 50% giá trị lớn nhất.

Trang 56

D0=150

D0=10

D0=50

Ảnh gốc

D0=30

D0=10

D0=30

D0=50

D0=150

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

Ví dụ trên sử dụng bộ lọc Butterworth bậc 2 đối với các (cid:1191)nh (cid:1251) trên và bộ lọc Gauss với các hình (cid:1251) dưới. Nhận xét:

- Mức cắt Do càng nhỏ, (cid:1191)nh càng bị m(cid:1249), do bộ lọc thông thấp lọc các thành phần tần số thấp, tương ứng với các giá trị mức xám thay đổi chậm. - Cùng một mức cắt Do, bộ lọc Butterworth cho (cid:1191)nh m(cid:1249) hơn so với bộ lọc Gauss, lý do là bộ lọc Butterworth dốc hơn, chọn lọc tần số tốt hơn.

4.2.3) L(cid:1233)c thông cao:

Bộ lọc thông cao có thể suy ra từ bộ lọc thông thấp qua biểu thức:

Trang 57

Bộ lọc thông cao lý

Bộ lọc thông cao

tưở

Bộ lọc thông cao Butterworth bậc 2

Bộ lọc thông cao Butterworth bậc 9

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

Do=10

Do=30

Do=50

Ảnh ố

Do=10

Do=30

Do=50

Bộ lọc thông cao làm sắc nét (cid:1191)nh và nổi bật các chi tiết như nhiễu và c(cid:1189)nh biên.

Những hình (cid:1251) trên sử dụng bộ lọc Butterworth bậc 2, những hình (cid:1251) dưới sử dụng bộ lọc Gauss

Trang 58

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

Cũng tương tự như bộ lọc thông thấp, ta cũng có nhận xét sau:

- Do càng lớn, (cid:1191)nh sau xử lý càng sắc nét hơn, các chi tiết như c(cid:1189)nh biên và nhiễu càng được thể hiện rõ. - Cùng một giá trị Do, bộ lọc Butterworth t(cid:1189)o (cid:1191)nh sắc nét hơn bộ lọc Gauss. - Giá trị F(0,0) =0 làm (cid:1191)nh sau xử lý gi(cid:1191)m cư(cid:1249)ng độ mức xám, vấn đề này sẽ được khắc phục với bộ lọc High-Frequency Emphasis.

Biến đổi Laplace trong miền tần số:

Với là biến đổi Fourier của toán tử Laplace.

Do đó ta có bộ lọc Laplace trong miền tần số

Đáp ứng của bộ lọc có d(cid:1189)ng:

Ta cũng có bộ lọc trực tiếp áp dụng toán tử Laplace

Do H mang các giá trị âm nên ta thực hện phép trừ trong miền không gian.

Ta sẽ được kết qu(cid:1191) bộ lọc H(u,v):

Kết qu(cid:1191) của phép lọc Laplace trong miền tần số cũng tương tự trong miền không gian

Bộ lọc High-frequency emphasis:

Các bộ lọc thông cao vừa được trình bày có một đặc điểm là giá trị F(0,0)=0, do đó làm cho (cid:1191)nh sau xử lý có tổng các giá trị mức xám bằng 0. Một gi(cid:1191)i pháp là thêm vào bộ lọc thông cao mức offset lớn hơn 0. Nếu giá trị offset này kết hợp cùng với việc nhân các hệ số bộ lọc thông

Trang 59

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

cao với một giá trị >1 thì ta có bộ lọc High-frequency emphasis. Hệ số nhân này sẽ làm tăng nhanh biên độ của các giá trị tần số cao, trong khi các giá trị tần số thấp thay đổi rất ít. Do đó mức xám (cid:1191)nh sau xử lý được tăng cư(cid:1249)ng, và (cid:1191)nh vẫn sắc nét.

a

b

e

d

. và Với a là mức offset, b là hệ số nhân, thư(cid:1249)ng

Hình a là (cid:1191)nh chụp X-quang lồng ngực, (cid:1191)nh bị m(cid:1249) với thành phần mức xám tập trung gần giá trị 0(tối). Hình b là kết qu(cid:1191) sau khi lọc bằng bộ lọc thông cao Butterworth bậc 2, có Do nhỏ, ta thấy các chi tiết c(cid:1189)nh biên được làm nổi bật nhưng mức xám (cid:1191)nh bị gi(cid:1191)m xuống đáng kể. (cid:1190)nh c sử dụng bộ lọc High-Frequency Emphasis có a=0,5 và b=2, các chi tiết c(cid:1189)nh biên vẫn nổi bật và mức xám cũng tăng lên. Nhưng các giá trị mức xám vẫn tập trung chủ yếu (cid:1251) vùng tối, ta thực hiện cân bằng histogram để cho (cid:1191)nh có độ tương ph(cid:1191)n cao hơn, kết qu(cid:1191) của cân bằng histogram là hình d. Đây là ứng dụng kết hợp nâng cao chất lượng (cid:1191)nh trong miền tần số(lọc) và miền không gian(cân bằng histogram).

Trang 60

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

CH(cid:1132)(cid:1130)NG IV:

KHÔI PH(cid:1256)C (cid:1190)NH

I) Giới thiệu:

Khôi phục (cid:1191)nh tập trung vào việc lo(cid:1189)i bỏ hay gi(cid:1191)m thiểu sự biến d(cid:1189)ng x(cid:1191)y ra trong quá trình thu nhận (cid:1191)nh. Sự biến d(cid:1189)ng (cid:1191)nh có thể bao gồm : Nhiễu-là những sai khác trong giá trị của pixel, (cid:1191)nh hư(cid:1251)ng quang học : sự m(cid:1251) do việc chuyển động của cameran…Ta có d(cid:1189)ng tổng quát của (cid:1191)nh bị biến d(cid:1189)ng:

g(x,y) = f(x,y)*h(x,y) + n(x,y)

tương ứng trong miền tần số ta có :

G(i,j) = F(i,j).H(i,j) + N(i,j)

II) Nhiễu: 1) Nhiễu Salt and Pepper:

Còn gọi là nhiễu xung, nhiễu nhị phân.

Nếu b > a, mức xám b sẽ xuất hiện tương ứng là điểm sáng trên (cid:1191)nh còn mức xám a sẽ tương ứng với điểm đen xuất hiện trên (cid:1191)nh. Để cộng nhiễu “Salt and pepper” vào một (cid:1191)nh ta dùng câu lệnh sau : t = imnoise(image,’salt & pepper’) số lượng nhiễu được cộng vào mặc định là 10%. Ta có thể cung cấp thêm các thông số để thay đổi lượng nhiễu được cộng vào này.

Trang 61

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

2) Nhiễu Gaussian:

2

(

z u

2 ) / 2

Là một d(cid:1189)ng lý tư(cid:1251)ng của nhiễu trắng, được gây ra b(cid:1251)i những dao động ngẫu nhiên của tín hiệu. Nhiễu Gaussian là nhiễu trắng có phân bố chuẩn.

( ) p z

e

1 2

Nếu ta có (cid:1191)nh I, nhiễu Gaussian là N ta sẽ có (cid:1191)nh nhiễu = I +N. Để t(cid:1189)o ra (cid:1191)nh với nhiễu Gaussian ta dùng câu lệnh sau : t = imnoise(image,’gaussian’) giá trị mặc định của kỳ vọng và phương sai của nhiễu là 0 và 0.01.

Trang 62

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

3) Nhiễu Speckle:

Có thể được mô hình bằng cách nhân các giá trị ngẫu nhiên với giá trị của các pixel. Nhiễu Speckle là vấn đề quan tâm chủ yếu trong các ứng dụng radar Trong Matlab (cid:1191)nh với nhiễu Speckle được tính toán : I*(1 + N) t = imnoise(t,’speckle’) Nhiễu N có phân phối chuẩn với giá trị trung bình =0. Có thể cung cấp thêm thông số để xác định giá trị kỳ vọng của N, giá trị mặc định của nó là 0.04.

1. Nhiễu tuần hoàn (Periodic noise)

Nếu tín hiệu hình (cid:1191)nh là tín hiệu tuần hoàn, chúng ta có thể có (cid:1191)nh bị (cid:1191)nh hư(cid:1251)ng b(cid:1251)i nhiễu tuần hoàn.

Trang 63

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

^ f

( , ) g s t

1 mn

( , ) s t S

xy

Hàm imnoise không có tùy chọn để t(cid:1189)o ra nhiễu tuần hoàn. Ta có thể t(cid:1189)o ra một d(cid:1189)ng đơn gi(cid:1191)n của nhiễu tuần hoàn bằng cách cộng vào (cid:1191)nh một ma trận tuần hoàn. II)Khôi ph(cid:1257)c (cid:1191)nh với các bộ l(cid:1233)c trong mi(cid:1221)n không gian: 1) Bộ l(cid:1233)c trung bình số h(cid:1233)c (Arithmetic Mean filter):

Giá trị của (cid:1191)nh được khôi phục t(cid:1189)i tọa độ (x,y) đơn gi(cid:1191)n là trung bình số học của những pixel trong miền Sxy . Bộ lọc trên được thực hiện trong IPT như sau : w = fspecial(„average‟,[m,n]) f = imfilter(g,w)

1 mn

^ f

( , ) g s t

( , ) s t S

xy

2) Bộ l(cid:1233)c trung bình hình h(cid:1233)c ( Geometric Mean filter):

Mỗi giá trị pixel của (cid:1191)nh phục hồi : là tích của những pixel trong miền Sxy , sau đó lấy lũy thừa 1/m/n. IPT không hỗ trợ hàm để tính toán trực tiếp bộ lọc này.

Trang 64

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

( ,

)

^ f x y median g s t ( , ) s t S ( , )

xy Bộ lọc thay thế giá trị của một pixel b(cid:1251)i trị số trung bình của những giá trị mức xám trong miền lân cận của pixel này được xác định b(cid:1251)i Sxy . Trong IPT bộ lọc được thực hiện b(cid:1251)i hàm medfilt2 : f = medfilt2(g,[m,n])

3) Bộ l(cid:1233)c tr(cid:1231) số trung bình ( Median filter):

4) Bộ l(cid:1233)c MIN & MAX:  Bộ lọc Max:

Bộ lọc này hữu dụng trong việc xác định điểm sáng nhất trong (cid:1191)nh. Vì nhiễu pepper có giá trị rất thấp nên nhiễu này sẽ bị lo(cid:1189)i trừ như là kết qu(cid:1191) của quá trình lựa chọn trị max trong miền xác định b(cid:1251)i Sxy . Được thực hiện thông qua hàm ordfilt2: f = ordfilt2(g,m*n, ones(m,n))

 Bộ lọc Min:

Bộ lọc này hữu dụng trong việc xác định điểm tối nhất trong (cid:1191)nh. Do đó nó sẽ lo(cid:1189)i trừ nhiễu Salt như là kết qu(cid:1191) của quá trình lựa chọn mức tối trong miền xác định b(cid:1251)i Sxy . f = ordfilt2(g,1,ones(m,n)).

5) Bộ l(cid:1233)c trung bình hƠi ( Harmonic Mean filter):

Bộ lọc này làm việc tốt với nhiễu Salt, nhưng l(cid:1189)i không hiệu qu(cid:1191) với nhiễu Pepper.

6) Bộ l(cid:1233)c đi(cid:1223)m gi(cid:1265)a ( Midpoint filter):

Bộ lọc tính điểm trung bình giữa giá trị Max và giá trị Min trong vùng bao quanh b(cid:1251)i Sxy . Bộ lọc làm việc tốt với những nhiễu có phân phối ngẫu nhiên như nhiễu Gaussian.

Trang 65

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

III) Gi(cid:1191)m nhiễu tuần hoƠn với các bộ l(cid:1233)c trong mi(cid:1221)n tần số:

1) Bộ l(cid:1233)c chắn d(cid:1191)i:

Bộ lọc chắn d(cid:1191)i lo(cid:1189)i bỏ hay làm suy hao một d(cid:1191)i băng tần trong biến đổi Fourier ban đầu.  Bộ lọc chắn d(cid:1191)i lý tư(cid:1251)ng được biểu diễn :

 Bộ lọc chắn d(cid:1191)i Butterworth Bộ lọc chắn d(cid:1191)i butterworth bậc n được biểu diễn như sau :

 Bộ lọc chắn d(cid:1191)i Gaussian

Bộ lọc chắn d(cid:1191)i lo(cid:1189)i bỏ nhiễu trong những ứng dụng mà ta đã biết trước kho(cid:1191)ng tần số của những thành phần nhiễu. Ví dụ như một (cid:1191)nh bị (cid:1191)nh hư(cid:1251)ng của nhiễu tuần hoàn – xem tương đương như là hàm sine của hàm 2 biến.

Trang 66

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

Ta thấy (cid:1251) hình b-phổ Fourier của (cid:1191)nh nhiễu, các thành phần nhiễu xấp xỉ nằm trên một đư(cid:1249)ng tròn. Do đó một bộ lọc chắn d(cid:1191)i đối xứng suyên tâm là lựa chọn tối ưu. Hình c biểu diễn bộ lọc butterworth bậc 4, với bán kính và độ dày thích hợp để có thể bao quanh hoàn toàn các thành phần nhiễu.

2) Bộ l(cid:1233)c thông d(cid:1191)i:

Bộ lọc thông d(cid:1191)i có ho(cid:1189)t động ngược l(cid:1189)i với bộ lọc chắn d(cid:1191)i. Hàm truyền của bộ lọc thông d(cid:1191)i có thể suy ra từ bộ lọc chắn d(cid:1191)i :

Bộ lọc thông d(cid:1191)i lo(cid:1189)i bỏ nhiều chi tiết của (cid:1191)nh. Tuy nhiên bộ lọc thông d(cid:1191)i khá hữu dụng trong việc tách (cid:1191)nh hư(cid:1251)ng của một d(cid:1191)i tần số lên (cid:1191)nh.

Trang 67

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

(cid:1191)nh trên được t(cid:1189)o ra như sau :  Tính đáp ứng của bộ lọc thông d(cid:1191)i từ bộ lọc chắn d(cid:1191)i  Biến đổi ngược của biến đổi bộ lọc thông d(cid:1191)i Ta thấy hầu hết chi tiết của (cid:1191)nh đã bị mất, nhưng những thông tin còn l(cid:1189)i rất hữu dụng. Đó chính là mô hình nhiễu-giống với nhiễu tác động trong (cid:1191)nh (cid:1251) hình a. 3) Bộ l(cid:1233)c Notch:

Bộ lọc Notch lo(cid:1189)i bỏ hay cho qua những tần số lân cận xác định trước quanh tần số trung tâm.

 Bộ lọc Notch chắn d(cid:1191)i lý tư(cid:1251)ng

Trong đó :

 Bộ lọc Notch chắn d(cid:1191)i Butterworth

 Bộ lọc Notch chắn d(cid:1191)i Gaussian

Trang 68

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

Ví dụ:

Đơn gi(cid:1191)n là cho hàng và cột của thành phần phổ nhiễu bằng 0. Gi(cid:1191) sử tọa độ của các thành phần nhiễu này lần lượt là (156,170), (102,88).

>> tf(156,:)=0; >> tf(102,:)=0; >> tf(:,170)=0;

>> tf(:,88)=0; Kết qu(cid:1191) :

Trang 69

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

Nhiều nhiễu (cid:1251) trung tâm đã bị lo(cid:1189)i bỏ. T(cid:1189)o nhiều hàng và nhiều cột dịch chuyển về zero sẽ lo(cid:1189)i bỏ được nhiều nhiễu hơn.

 Bộ lọc Notch thông d(cid:1191)i

Có ho(cid:1189)t động ngược l(cid:1189)i với ho(cid:1189)t động của bộ lọc Notch chắn d(cid:1191)i. Ta dễ dàng suy ra hàm truyền của bộ lọc Notch thông d(cid:1191)i :

IV) Bộ l(cid:1233)c ng(cid:1133)(cid:1255)c:

Ta có : Y(i,j) = X(i,j)*F(i,j) Từ đó ta có thể khôi phục DFT của (cid:1191)nh ban đầu : X(i,j) = Y(i,j)/F(i,j) Tuy nhiên một số thành phần của bộ lọc rất nhỏ, nên phép chia sẽ t(cid:1189)o ra giá trị rất lớn-lấn át, quyết định giá trị ngõ ra. Nên ta sẽ khó thu được kết qu(cid:1191) (cid:1191)nh gốc chấp nhận được.

Trang 70

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

Có thể gi(cid:1191)i quyết vấn đề trên như sau:

 Áp một bộ lọc thông thấp vào phép chia :

Sẽ lo(cid:1189)i bỏ những giá trị rất nhỏ của bộ lọc F(i,j)

 Chọn một ngưỡng giá trị d, nếu |F(i,j)| < d chúng ta sẽ không thực hiện phép chia mà giữ giá trị ban đầu.

Ví dụ :

Trang 71

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

Một (cid:1261)ng d(cid:1257)ng khác c(cid:1259)a bộ l(cid:1233)c ng(cid:1133)(cid:1255)c : l(cid:1191)m rõ (cid:1191)nh b(cid:1231) mờ do chuy(cid:1223)n động. Ví dụ : >> bc=imread(‟board.tif‟); >> bg=im2uint8(rgb2gray(bc)); >> b=bg(100:355,50:305); >> imshow(b) >> m=fspecial(‟motion‟,7,0); >> bm=imfilter(b,m); >> imshow(bm) Cho ta kết qu(cid:1191) sau :

Trang 72

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

Để làm rõ (cid:1191)nh ta cần thực hiện phép chia giữa DFT của (cid:1191)nh bị làm m(cid:1249) cho DFT của bộ lọc làm m(cid:1249) (cid:1191)nh. Có nghĩa là trước tiên ta cần t(cid:1189)o ma trận tương đương với sự biến đổi làm m(cid:1249) (cid:1191)nh. >> m2=zeros(256,256); >> m2(1,1:7)=m; >> mf=fft2(m2); >> bmi=ifft2(fft2(bm)./mf); >> fftshow(bmi,‟abs‟) Kết qu(cid:1191) như sau:

Kết qu(cid:1191) không được tốt do đặc tính của bộ lọc ngược. Theo phương pháp thứ 2 để khắc phục đặc tính của bộ lọc ngược ta định nghĩa một giá trị ngưỡng d=0.02 >> mf=fft2(m2);mf(find(abs(mf)> bmi=ifft2(fft2(bm)./mf); >> imshow(mat2gray(abs(bmi))*2) Ta có kết qu(cid:1191) :

Trang 73

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

V) Bộ l(cid:1233)c Wiener:

Như trên, ta thấy bộ lọc ngược cho kết qu(cid:1191) không được tốt. Kết qu(cid:1191) sẽ tệ hơn khi (cid:1191)nh ban đầu bị tác động b(cid:1251)i nhiễu.

Nên :

Do đó không những có vấn đề trong phép chia mà còn vấn đề với nhiễu : nhiễu có thể lấn át, quyết định giá trị ngõ ra, làm cho việc sử dụng bộ lọc ngược trực tiếp là không thể. Gọi M : (cid:1191)nh ban đầu, R : (cid:1191)nh khôi phục.

Điều mong muốn là R càng gần với M càng tốt. Để xét sự chênh lệch gần nhất giữa R, M ta sét hàm :

Nếu ta có thể tối thiểu hóa giá trị của tổng trên, ta có thể chắc chắn rẳng ta sẽ thu được kết qu(cid:1191) tốt nhất có thể. Bộ lọc có đặc điểm của hàm tính “bình phương tối thiểu” gọi là bộ lọc Weiner.

Trang 74

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

Trong đó K là hằng số. K được dùng để xấp xỉ nhiễu. Nếu phương sai của nhiễu được biết

22K

.

trước thì >> K=0.01; >> wbf=fftshift(fft2(wba)); >> w1=wbf.*(abs(b).^2./(abs(b).^2+K)./b) >> w1a=abs(ifft2(w1)); >> imshow(mat2gray(w1a))

Trang 75

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

CH(cid:1132)(cid:1130)NG V:

TÁCH BIểN (cid:1190)NH

I) C(cid:1131) sở lý thuy(cid:1219)t tách biên:

G

x

f

),( yxf

Tách biên là phương pháp thông dụng nhất để tách theo nghĩa gián đo(cid:1189)n trong các giá trị cư(cid:1249)ng độ. Sự gián đo(cid:1189)n được tách sử dụng đ(cid:1189)o hàm bậc nhất và bậc hai. Đ(cid:1189)o hàm bậc nhất lựa chọn trong xử lý (cid:1191)nh l gradient (độ dốc).

G

y

f x f y

được định nghĩa dưới d(cid:1189)ng vectơ: Gradient của hm 2-D

2

2/12

f

mag

(

f

)

G

G

f

/

x

f

/

y

2 x

2/12 y

Gf

Biên độ của vectơ này:

x G

y

Để tính toán đơn gi(cid:1191)n, con số này được xấp xỉ bằng cách sử dụng giá trị tuyệt đối : chúng bằng 0 trong các vùng có cư(cid:1249)ng độ không đổi, và giá trị chúng tỷ lệ

),( yx

với bậc của sự thay đổi cư(cid:1249)ng độ trong vùng có các giá trị pixel biến thiên. Nó được xem là biên độ của gradient hoặc xấp xỉ đơn gi(cid:1191)n của nó dưới d(cid:1189)ng “gradient”.

G

y

1

,( yx )

tan

Đặc tính cơ b(cid:1191)n của vectơ gradient là tồn t(cid:1189)i hướng có tỷ lệ thay đổi hàm f t(cid:1189)i tọa độ

G

x

lớn nhất. Góc x(cid:1191)y ra tỷ lệ thay đổi lớn nhất là:

2

2

) ,( yxf

tính sử dụng toán tử Laplace :

Toán tử Laplace ít khi được dùng để tách biên vì, vi Đ(cid:1189)o hàm bậc hai trong xử lý (cid:1191)nh được 2 ,( ) ,( ) yxf yxf 2 2 x y

phân bậc hai, dễ bị (cid:1191)nh hư(cid:1251)ng b(cid:1251)i nhiễu, biên độ của nó sinh ra các biên kép, và không thể tách hướng biên.

Ý tư(cid:1251)ng cơ b(cid:1191)n đằng sau tách biên là tìm các nơi trong (cid:1191)nh có cư(cid:1249)ng độ thay đổi nhanh, sử dụng một trong hai tiêu chuẩn tổng quát sau:

Tìm các nơi đ(cid:1189)o hàm bậc nhất của cư(cid:1249)ng độ sáng có biên độ hơn một ngưỡng.

Trang 76

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

Tìm các nơi đ(cid:1189)o hàm bậc hai của cư(cid:1249)ng độ sáng có sự thay đổi qua mức 0

II) Tách biên (cid:1191)nh trong Matlab:

Cấu trúc tổng quát của hàm này là

[g, t] = edge (f, „method‟, parameters)

Trong đo „method‟ gồm : Sobel, Prewitt, Roberts, LoG, Zero Crossing, Canny.

xG và

1) Bộ tách biên Sobel:

2

2/12

{[(

2

)

(

2

)]

[(

2

)

(

2

})]

2 GGg x

2/12 y

z 7

z 8

z 9

z 1

z 2

z 3

z 3

z 6

z 9

z 1

z 4

z 7

Tg

Bộ tách biên Sobel sử dụng các mặt n(cid:1189) trong hình dưới để xấp xỉ đ(cid:1189)o hàm bậc nhất yG . Nói cách khác, gradient t(cid:1189)i điểm tâm trong một lân cận được tính theo bộ tách Sobel:

t(cid:1189)i vị trí đó, trong đó T là một

Khi đó, ta nói rằng vị trí (x,y) là pixel biên nếu ngưỡng được chỉ định.

Mặt l(cid:1189) của bộ lọc Sobel :

Cú pháp gọi bộ tách Sobel tổng quát là

[g , t ] = edge(f, „sobel‟, T, dir)

g = edge (f), hoặc là [g, t] = edge(f).

2) Bộ tách biên Prewitt:

Trang 77

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

Bộ tách biên Prewitt sử dụng mặt n(cid:1189):

yG

xG và

để xấp xỉ theo phương pháp số đ(cid:1189)o hàm bậc nhất

Cú pháp gọi tổng quát là:

[g , t ] = edge(f, „prewitt‟, T, dir)

Bộ tách Prewitt hơi đơn gi(cid:1191)n hơn để hiện thực bằng máy tính so với bộ tách Sobel, nhưng nó có khuynh hướng sinh ra một chút nhiễu. (Nó có thể được thể hiện qua hệ số 2 trong bộ tách biên Sobel ).

3) Bộ tách biên Roberts:

Bộ tách biên Roberts sử dụng mặt n(cid:1189) :

yG .

xG và

để xấp xỉ theo phương pháp số đ(cid:1189)o hàm bậc nhất

Cú pháp gọi tổng quát là:

Trang 78

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

[g , t ] = edge(f, „roberts‟, T, dir)

Bộ tách Roberts là một trong những bộ tách biên xưa nhất trong xử lý (cid:1191)nh số v nó cũng đơn gi(cid:1191)n nhất. Bộ tách biên này được dùng ít hơn đáng kể các bộ tách khác do chức năng giới h(cid:1189)n của nó (nó không đối xứng và không thể được tổng quát hóa để tách biên là thừa số của 450). Tuy nhiên, nó vẫn được dùng thư(cid:1249)ng xuyên trong hiện thực phần cứng khi tính đơn gi(cid:1191)n và tốc độ là các yếu tố chi phối.

4) Bộ tách biên Laplace c(cid:1259)a hƠm Gauss (LoG):

2

r

2

2

rh )(

e

2

2

2

Xét hàm Gauss

r

x

y

và là độ lệch chuẩn. Đây là hàm trơn, nếu nó chập với một (cid:1191)nh,

. Trong đó sẽ làm m(cid:1249) (cid:1191)nh. Độ m(cid:1249) được xác định b(cid:1251)i giá trị

2

r

2

2

2

r

2

2

e

rh )(

Toán tử Laplace của hàm này (đ(cid:1189)o hàm bậc 2 theo r):

4

)(2 rh

)(2 rh

(Được gọi l hm Laplace của Gaussian LoG)

giống như Vì đ(cid:1189)o hàm bậc hai là toán tử tuyến tính, chập (lọc) với một (cid:1191)nh bằng đầu tiên chập (cid:1191)nh với hàm trơn và sau đó tính kết qu(cid:1191) của toán tử Laplace. Chúng ta chập biết nó có 2 tác động: nó làm mịn (cid:1191)nh (do đó gi(cid:1191)m nhiễu) và nó tính toán (cid:1191)nh bằng tử Laplace, làm cong một (cid:1191)nh biên kép. Định vị các biên sau đó tìm các điểm giao zero giữa các biên kép. Cú pháp gọi tổng quát là:

[g , t ] = edge(f, „log‟, T, sigma)

Trong đó sigma là độ lệch chuẩn, giá trị mặc định của sigma là 2.

5) Bộ tách biên đi(cid:1223)m giao zero:

Bộ tách biên này dựa trên khái niệm giống phương pháp LoG, nhưng phép chập được thực hiện sử dụng hàm lọc được chỉ định H. Cú pháp gọi hàm :

[g , t ] = edge(f, „zerocross‟, T, H)

6) Bộ tách biên Canny:

Trang 79

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

Là bộ tách biên m(cid:1189)nh nhất cung cấp b(cid:1251)i hàm edge. Có thể tóm tắt phương pháp này như sau:

1. (cid:1190)nh được làm trơn sử dụng một bộ lọc Gauss với độ lệch chuẩn

y

1

yxg ,( )

G

yx ) ,(

tan

(

)

2 x G

2/12 y

G

x

, để gi(cid:1191)m nhiễu G và hướng biên 2. Gradient cục bộ,

1T và

được tính toán t(cid:1189)i mỗi điểm. Một điểm biên được định nghĩa là điểm có độ dài là cực đ(cid:1189)i địa phương theo hướng của gradient.

3. Điểm biên được xác định tăng lên đến các đỉnh trong gradient biên độ (cid:1191)nh. Sau đó thuật toán tìm đỉnh của các đỉnh này và đặt giá trị 0 vào tất c(cid:1191) pixel không thật sự nằm trên đỉnh vì vậy t(cid:1189)o ra một đư(cid:1249)ng mỏng (cid:1251) ngõ ra, một quá trình được biết là sự nén lại 2T . Các không cực đại. Các pixel đỉnh được đặt ngưỡng dùng hai ngưỡng, pixel đỉnh lớn hơn 2T được gọi là các pixel biên “m(cid:1189)nh”. Các pixel đỉnh nằm giữa 1T và 2T được gọi là các pixel biên “yếu”.

4. Cuối cùng, thuật toán thực hiện biên kết nối bằng cách kết hợp các pixel yếu mà có d(cid:1189)ng kết nối-8 với các pixel m(cid:1189)nh. Cú pháp bộ tách biên Canny là:

[g , t ] = edge(f, „canny‟, T, sigma)

1 TTT 2

là 2 ngưỡng được gi(cid:1191)i thích trong bước 3 của thủ

Trong đó T là một vectơ, tục trước và sigma là độ lệch chuẩn của bộ lọc làm trơn. Giá trị mặc định của sigma là 1.

Trang 80

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

CH(cid:1132)(cid:1130)NG VI:

CH(cid:1132)(cid:1130)NG TRÌNH L(cid:1232)C (cid:1190)NH K(cid:1218)T H(cid:1254)P GUI

I) Giới thiệu v(cid:1221) giao diện c(cid:1259)a ch(cid:1133)(cid:1131)ng trình vƠ ch(cid:1261)c năng c(cid:1259)a các thành phần:

1) Giao diện tổng quát c(cid:1259)a ch(cid:1133)(cid:1131)ng trình:

2) Nút “Add image”:

Trang 81

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

3) Nút “Reset”:

Trang 82

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

4) Add Noise:

5) Lựa ch(cid:1233)n ki(cid:1223)u bộ l(cid:1233)c:

Trang 83

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

6) Kích th(cid:1133)ớc bộ l(cid:1233)c:

Trang 84

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

7) Tần số trung tơm c(cid:1259)a bộ l(cid:1233)c Bandreject:

Trang 85

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

8) Bậc c(cid:1259)a bộ l(cid:1233)c Butterworth bandreject:

Trang 86

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

9) Độ rộng d(cid:1191)i băng c(cid:1259)a bộ l(cid:1233)c Bandreject:

Trang 87

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

10) Nút “Apply”:

Trang 88

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

11) Nút “Close”:

Trang 89

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

12) Nút “Save”:

Trang 90

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

13) Nút “Save as”:

Trang 91

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

14) Nút “Noise image”:

Trang 92

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

15) Nút “Im spectrum”:

Trang 93

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

16) Nút “Filtered Im”:

Trang 94

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

II) Gi(cid:1191)i thuật c(cid:1259)a các hƠm M-file trong ch(cid:1133)(cid:1131)ng trình: 1) HƠm “padaddedsize”:

Mục đích: (cid:1190)nh sau biến đổi Fourier có tính tuần hoàn, do đó để tránh nhiễu giữa các chu kỳ kế cận nhau, ta cần m(cid:1251) rộng (cid:1191)nh với các giá trị 0 để lo(cid:1189)i bỏ nhiễu này. Gi(cid:1191) sử với f(x,y) và h(x,y) có kích thước A×B và C×D, ta sẽ thêm các giá trị 0 vào f(x,y) và h(x,y) để có kích thước như nhau là: P ≥ A+C-1 Q≥ B+D-1 Thông thư(cid:1249)ng ta xét (cid:1191)nh và hàm lọc có cùng kích thước, do đó P ≥ 2M – 1, Q ≥ 2N – 1, với M và N là kích thước của (cid:1191)nh và hàm lọc. Xét hàm sau với AB,CD,PQ là các vector lần lượt gồm các thành phần [A B], [C D], [P Q]

function PQ=paddedsize(AB,CD) if nargin==1 PQ=2*AB; % Neu chi anh va bo loc co cung kich thuoc elseif nargin==2 PQ=AB+CD-1; % Neu anh va bo loc khac kich thuoc PQ=2*ceil(PQ/2); % PQ co cac thanh phan la cac so chan else

Trang 95

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

error('Wrong number of inputs'); end

2) HƠm “changeclass”: T(cid:1189)o (cid:1191)nh sau lọc có cùng kiểu với (cid:1191)nh đầu vào.

switch class case 'uint8' image = im2uint8(image); case 'uint16' image = im2uint16(image); case 'double' image = im2double(image); otherwise error('Unsupported IPT data class.'); end

3) HƠm “gmean”: Thực hiện gi(cid:1191)i thuật của bộ lọc Geometric Mean Filter.

function f=gmean(image,m,n) inclass=class(image); image=im2double(image); warning off; f=exp(imfilter(log(image),ones(m,n),'replica')).^(1/m/n); warning on; f=changeclass(inclass,f);

4) HƠm “harmean”: Thực hiện gi(cid:1191)i thuật của bộ lọc Harmonic Filter.

function f=harmean(image,m,n) inclass=class(image); image=im2double(image); f=m*n./imfilter(1./(image+eps),ones(m,n),'replicate'); f=changeclass(inclass,f);

5) HƠm “phoanh”:

Trang 96

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

6) HƠm “bandreject”:

III) Các b(cid:1133)ớc tính toán trong nút “Apply”:

global image1 H filimage PQ value noiseimage

Trang 97

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

PQ=paddedsize(size(image1)); D0=str2num(get(handles.cutoff,'String')); if D0<=0 msgbox('Please input meaningful cut off frequency') return end n=str2num(get(handles.order,'String')); if n<=0 msgbox('Invalid order number for Butterworth Filter!') return end W=str2num(get(handles.bandwidth,'String')); if W<=0 msgbox('Please input meaningful width of band-reject') end filsize=get(handles.size,'Value'); switch filsize case 1 m=3; n=3; case 2 m=5; n=5; case 3 m=7; n=7; end value=get(handles.filtertype,'Value'); switch value case 1 %Arithmetic Mean Filter H=fspecial('average',[m n]); filimage=imfilter(noiseimage,H); case 2 %Geometric Mean Filter filimage=gmean(noiseimage,m,n); case 3 %Median Filter filimage=medfilt2(noiseimage,[m n],'symmetric'); case 4 %Harmonic Filter filimage=harmean(noiseimage,m,n); case 5 %Max Filter filimage=ordfilt2(noiseimage,m*n,ones(m,n),'symmetric'); case 6 %Min Filter filimage=ordfilt2(noiseimage,1,ones(m,n),'symmetric'); case 7 %Adaptive Filter (Weiner) filimage=wiener2(noiseimage,[m n]);

Trang 98

Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành

case 8 %Ideal Bandreject Filter type='ideal'; H=bandreject(PQ,D0,W,type,n); F=fftshift(fft2(image1,PQ(1),PQ(2))); J=F.*H; filimage=real(ifft2(J)); filimage=filimage(1:size(image1,1),1:size(image1,2)); case 9 %Gaussian Bandreject Filter type='butter'; H=bandreject(PQ,D0,W,type,n); F=fftshift(fft2(image1,PQ(1),PQ(2))); J=F.*H; filimage=real(ifft2(J)); filimage=filimage(1:size(image1,1),1:size(image1,2)); case 10 %Butterworth Bandreject Filter type='Gaussian'; H=bandreject(PQ,D0,W,type,n); F=fftshift(fft2(image1,PQ(1),PQ(2))); J=F.*H; filimage=real(ifft2(J)); filimage=filimage(1:size(image1,1),1:size(image1,2)); end

Trang 99