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