Đồ á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

pdf99 trang | Chuyên mục: MATLAB | Chia sẻ: dkS00TYs | Lượt xem: 4774 | Lượt tải: 1download
Tóm tắt nội dung Đồ án Matlab ứng dụng hỗ trợ cho môn xử lý ảnh, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
ở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:

  • pdfĐồ án Matlab ứng dụng hỗ trợ cho môn xử lý ảnh.pdf