Đồ án Matlab ứng dụng hỗ trợ cho môn xử lý ảnh
-Trong Matlab, không cần khai báo biến. Matlab phân biệt bi ến chữ hoa và thường
Ví dụ: A và a là hai biến khác nhau
-Các phép toán số học: +,-,*,/,\(chia đả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ố ảo
j tương t ự i
eps sai số 2-52
inf vô cùng lớn
NaN Not a number
ởng bở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ưởng cơ bản đằng sau tách biên là tìm các nơi trong ảnh có cườ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 đạo hàm bậc nhất của cường độ sáng có biên độ hơn một ngưỡng.
Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành
Trang 77
Tìm các nơi đạo hàm bậc hai của cường độ sáng có sự thay đổi qua mức 0
II) Tách biên ả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.
1) Bộ tách biên Sobel:
Bộ tách biên Sobel sử dụng các mặt nạ trong hình dưới để xấp xỉ đạo hàm bậc nhất
xG và
yG . Nói cách khác, gradient tại điểm tâm trong một lân cận được tính theo bộ tách Sobel:
2/12
741963
2
321987
2/122 })]2()2[()]2()2{[( zzzzzzzzzzzzGGg yx
Khi đó, ta nói rằng vị trí (x,y) là pixel biên nếu Tg tại vị trí đó, trong đó T là một
ngưỡng được chỉ định.
Mặt lạ 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:
Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành
Trang 78
Bộ tách biên Prewitt sử dụng mặt nạ:
để xấp xỉ theo phương pháp số đạo hàm bậc nhất
xG và yG
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ả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ạ :
để xấp xỉ theo phương pháp số đạo hàm bậc nhất xG và yG .
Cú pháp gọi tổng quát là:
Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành
Trang 79
[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ý ảnh số v nó cũng đơn
giả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ạ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
45
0). Tuy nhiên, nó vẫn được dùng thường xuyên trong hiện thực phần cứng khi tính đơn
giản và tốc độ là các yếu tố chi phối.
4) Bộ tách biên Laplace của hàm Gauss (LoG):
Xét hàm Gauss
2
2
2)(
r
erh
Trong đó
222 yxr và là độ lệch chuẩn. Đây là hàm trơn, nếu nó chập với một ảnh,
sẽ làm mờ ảnh. Độ mờ được xác định bởi giá trị .
Toán tử Laplace của hàm này (đạo hàm bậc 2 theo r):
2
2
2
4
22
2 )(
r
e
r
rh (Được gọi l hm Laplace của Gaussian LoG)
Vì đạo hàm bậc hai là toán tử tuyến tính, chập (lọc) với một ảnh bằng )(
2 rh giống như
đầu tiên chập ảnh với hàm trơn và sau đó tính kết quả của toán tử Laplace. Chúng ta chập
ảnh bằng )(
2 rh biết nó có 2 tác động: nó làm mịn ảnh (do đó giảm nhiễu) và nó tính toán
tử Laplace, làm cong một ả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ể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:
Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành
Trang 80
Là bộ tách biên mạnh nhất cung cấp bởi hàm edge. Có thể tóm tắt phương pháp này như
sau:
1. Ảnh được làm trơn sử dụng một bộ lọc Gauss với độ lệch chuẩn , để giảm nhiễu
2. Gradient cục bộ,
2/122),( yx GGyxg và hướng biên )(tan),(
1
x
y
G
G
yx
được tính toán tại mỗi điểm. Một điểm biên được định nghĩa là điểm có độ dài là cực
đạ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 độ ả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ả pixel không thật sự nằm
trên đỉnh vì vậy tạo ra một đường mỏng ở ngõ ra, một quá trình được biết là sự nén lại
không cực đại. Các pixel đỉnh được đặt ngưỡng dùng hai ngưỡng, 1T và 2T . Các
pixel đỉnh lớn hơn 2T được gọi là các pixel biên “mạ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ạng kết nối-8 với các pixel mạnh.
Cú pháp bộ tách biên Canny là:
[g , t ] = edge(f, „canny‟, T, sigma)
Trong đó T là một vectơ, 21 TTT là 2 ngưỡng được giải thích trong bước 3 của thủ
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.
Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành
Trang 81
CHƢƠNG VI:
CHƢƠNG TRÌNH LỌC ẢNH KẾT HỢP GUI
I) Giới thiệu về giao diện của chƣơng trình và chức năng của các thành phần:
1) Giao diện tổng quát của chƣơng trình:
2) Nút “Add image”:
Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành
Trang 82
3) Nút “Reset”:
Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành
Trang 83
4) Add Noise:
5) Lựa chọn kiểu bộ lọc:
Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành
Trang 84
6) Kích thƣớc bộ lọc:
Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành
Trang 85
7) Tần số trung tâm của bộ lọc Bandreject:
Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành
Trang 86
8) Bậc của bộ lọc Butterworth bandreject:
Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành
Trang 87
9) Độ rộng dải băng của bộ lọc Bandreject:
Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành
Trang 88
10) Nút “Apply”:
Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành
Trang 89
11) Nút “Close”:
Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành
Trang 90
12) Nút “Save”:
Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành
Trang 91
13) Nút “Save as”:
Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành
Trang 92
14) Nút “Noise image”:
Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành
Trang 93
15) Nút “Im spectrum”:
Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành
Trang 94
16) Nút “Filtered Im”:
Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành
Trang 95
II) Giải thuật của các hàm M-file trong chƣơng trình:
1) Hàm “padaddedsize”:
Mục đích: Ả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ở rộng ảnh với các giá trị 0 để loại bỏ nhiễu này.
Giả 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ường ta xét ả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 ả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
Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành
Trang 96
error('Wrong number of inputs');
end
2) Hàm “changeclass”:
Tạo ảnh sau lọc có cùng kiểu với ả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ả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ả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”:
Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành
Trang 97
6) Hàm “bandreject”:
III) Các bƣớc tính toán trong nút “Apply”:
global image1 H filimage PQ value noiseimage
Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành
Trang 98
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]);
Báo cáo đồ án ĐTVT1 GVHD : Bùi Minh Thành
Trang 99
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
File đính kèm:
Đồ án Matlab ứng dụng hỗ trợ cho môn xử lý ảnh.pdf

