5. Ý nghĩa khoa học của đề tài
3.4 Thử nghiệm chƣơng trình lọc nhiễu muối tiêu và gauss
3.4.1 Đặt bài toán
Yêu cầu : Đầu vào là một ảnh bất kỳ, sau khi cho vào chương trình làm hư hại ảnh dạng muối tiêu, sau đó dùng các bộ lọc để khôi phục lại hình ảnh ban đầu.
3.4.2. Các hàm chức năng a) Lọc cấp độ thấp
Giả dụ rằng các điểm ảnh bị hỏng bởi nhiễu muối - hạt tiêu là các thành phần tần số cao của một hình ảnh, một bộ lọc cấp thấp có thể giảm bớt chúng. Vì vậy, chúng ta có thể thử lọc với mức trung bình
a3 = fspecial ('average'); t_sp_a3 = filter2 (a3, t_sp);
Tuy nhiên, nhiễu được không quá nhiều gỡ bỏ như bôi qua hình ảnh, kết quả không phải là chú ý tốt hơn hơn so với hình ảnh nhiễu. Hiệu quả là thậm chí còn rõ rệt hơn nếu chúng ta sử dụng một bộ lọc trung bình lớn hơn :
a7 = fspecial ('average', [7, 7]); t_sp_a7 = filter2 (a7, t_sp);
Hình 3. 2. Lấy trung bình 5×5
b) Lọc trung bình
Lọc trung bình dường như thích hợp cho loại bỏ các nhiễu muối và hạt tiêu. Nhớ lại rằng trung bình của một tập là giá trị trung bình khi chúng được sắp xếp. Nếu có một số thậm chí của các giá trị, trung bình là trung bình giữa hai. Một bộ lọc trung bình là một ví dụ của một bộ lọc không gian phi tuyến tính; bằng cách sử dụng một ma trận mặt lạ 3*3. Giá trị sản lượng trung bình của các giá trị trong mặt nạ. Ví dụ
50 52 57 58 61 63 65 255 60
Các hoạt động để có được trung bình có nghĩa là giá trị rất lớn hoặc rất nhỏ, giá trị nhiễu sẽ kết thúc ở trên cùng hoặc dưới cùng của danh sách được sắp xếp. Như vậy, trung bình nói chung sẽ thay thế một nhiễu giá trị với một gần gũi hơn với môi trường xung quanh của nó.
Trong MATLAB , lọc trung bình được thực hiện bởi hàm medfilt2 : t_sp_m3=medfilt2 (t_sp);
và kết quả được hiển thị trong hình (3.3). Kết quả là một cải tiến lớn trên bằng cách sử dụng các bộ lọc trung bình.
Hinh 3. 3. Xóa muối-hạt tiêu với hàm medfilt
Như với hầu hết các chức năng, medfilt2 có một tham số tùy chọn, trong trường hợp này là 2 yếu tố vector cho kích thước của mặt nạ được sử dụng. Nếu bị hỏng các điểm ảnh nhiều hơn với nhiễu.
t_sp2 = imnoise (t, 'salt & pepper', 0. 2);
Hàm medfilt2 vẫn làm một công việc khá tốt, như trong hình 3. 3 Để loại bỏ nhiễu tuần hoàn chúng ta có thể thử một ứng dụng thứ 2 của 2 ma trân 3*3 của bộ lọc trung bình.
t_sp2_m5 = medfilt2 (t_sp2, [5, 5]); Kết quả đó được hiển thị trong hình
Hình 3. 5. Lọc
c) Lọc theo thứ tự
Lọc trung bình là trường hợp đặc biệt của quá trình tổng quát gọi là quá trình lọc theo thứ tự. Hơn nữa để tìm trung bình của một tập hợp ta cần sắp xếp tập hợp, chọn n-th giá trị cho một vài giá trị ức tính của n. Do vậy lọc trung bình mức độ 3x3 mặt nạ tương đương với lọc theo thứ tự với giá trị n=5 tương tự lọc trung bình 5x5 tương đương với n=13. MATLAB thực hiện phép lọc theo thứ tự bằng hàm ordfilt2 trên thực tế thủ tục cho hàm medfilt2 là tạo một wrapper cho thủ tục hàm ordfilt2. lí do duy nhất để thay thế lọc trung bình bằng lọc theo thứ tự là nó cho phép ta tùy chọn lọc trung bình hay lọc không phải khối chữ thập mặt lạ. Ví dụ ta chọn lọc 3x3 khối chữ thập mặt lạ. kết quả là giá trị trung bình sẽ rơi vào giá trị thứ 3 của chuỗi sắp xếp. Lệnh thực hiện là :
ordfilt2 (t_sp, 3, [0 1 0;1 1 1;0 1 0]);
Một cách tổng quát đối số thứ 2 của hàm ordfilt2 đưa ra giá trị của tập giá trị sắp xếp, thành phần thứ 3 đưa ra domain (miền). Giá trị chỉ định khác 0, chúng ta sử dụng cross với kích thước và chiều rộng 5 (gồm 9 thành phần) chúng ta có thể viết :
3.5 Kết quả thử nghiệm
3.5.1 Giao diện chính của chƣơng trình
3.5.2 Thử nghiệm với bộ lọc trung bình
Ý tưởng của bộ lọc : Giá trị điểm ảnh lỗi sẽ được thay thế bằng giá trị trung bình lấy từ các pixels kế cận.
Ví dụ : Bằng cách xác định một mặt nạ, người ta giới hạn vùng liên quan cần tính toán giá trị trung bình cần tìm của pixel lỗi. Điểm ảnh bất thường ở trung tâm của cửa sổ có giá trị cao hơn các pixel kế cận. Có thể sử lỗi cho pixel này bằng cách thay giá trị trung bình của 8 pixel lân cận : 1/8(23+25+24+22+25+25+23+23)=23. 75 vào mức xám của nó. Vì vậy giá trị của điểm ảnh bị lỗi sẽ là 24 (được làm tròn).
Giải thuật
B1 : Tìm điểm ảnh bị lỗi trong xử lý
B2 : Chọn kích thước của cửa sổ(mặt nạ)(là một ma trận vuông nxn thường là chiều dài lẻ ví dụ 3x3, 5x5).
B4 : Thay giá trị điểm ảnh lỗi phát hiện được tính bằng trung bình vừa tính được
B5 : Dịch cửa sổ sang cột (hàng) kế tiếp B6 : Quay lại B3.
Các đoạn mã lệnh a. Chọn ảnh
function chonanh_Callback(hObject, eventdata, handles)
[filename,pathname]=uigetfile({'*.tif;*.bmp;*.gif;*.jpg;*.png'},'pick an
image file');
S=imread([pathname,filename]); handles.axes = S;
t=rgb2gray(S);
subplot(handles.axes1); imshow(t),title('ANH GOC'); guidata(hObject,handles);
b. Ảnh bị nhiễu muối-tiêu
function anhhuhai_Callback(hObject, eventdata, handles)
f=handles.axes; t=rgb2gray(f);
g=imnoise(t, 'salt & pepper', 0.07); figure% cong nhieu muoi tieu vao anh f
imshow(g),title('anh hu hai muoi tieu voi d=0,07'); guidata(hObject,handles);
c. Hàm lọc trung bình
function loctrungbinh_Callback(hObject, eventdata, handles)
t=rgb2gray(f);
g=imnoise(t, 'salt & pepper', 0.07);%cong nhieu muoi tieu vao anh
f2 = medfilt2(g, [m n]); figure
imshow(f2),title('loc nhieu voi bo loc trung binh (diem giua) voi ham
medfilt2 ');
d. Lọc cấp độ thấp với mặt nạ (3×3)
function locdiemgiua_Callback(hObject, eventdata, handles)
f=handles.axes; t=rgb2gray(f);
g=imnoise(t, 'salt & pepper', 0.07); m = 3; n = 3;
w = fspecial('average', [m, n]); f1 = imfilter(g, w);
figure
imshow(f1),title('loc nhieu voi bo loc trung binh cap do thap voi ma tran
3x3');
e. Lọc cấp độ thấp với mặt nạ(5×5)
function locdiemgiua5_Callback(hObject, eventdata, handles)
f=handles.axes; t=rgb2gray(f);
g=imnoise(t, 'salt & pepper', 0.07); e = fspecial('average', [5,5]);
f1 = imfilter(g, e); figure
imshow(f1),title('loc nhieu voi bo loc trung binh cap do thap voi ma tran
f. Lọc theo thứ tự với mặt nạ 3×3
function locthutu3_Callback(hObject, eventdata, handles)
f=handles.axes; t=rgb2gray(f);
g=imnoise(t, 'salt & pepper', 0.07); f3 = ordfilt2(g,3,[0 1 0;1 1 1;0 1 0]); figure
imshow(f3),title('loc theo tu tu voi ham ordfilt2 voi mat la 3x3');
g. Lọc theo thứ tự với mặt nạ 5×5
function locthutu5_Callback(hObject, eventdata, handles)
f=handles.axes; t=rgb2gray(f);
g=imnoise(t, 'salt & pepper', 0.07);
f4 = ordfilt2(g,5,[0 0 1 0 0;0 0 1 0 0;1 1 1 1 1;0 0 1 0 0;0 0 1 0 0]);%loc theo thu tu voi mat la 5x5
figure
imshow(f4),title('loc theo tu tu voi ham ordfilt2 voi mat la 5x5');
h. Ảnh bị nhiễu Gauss
function anhhuhaigauss_Callback(hObject, eventdata, handles)
f=handles.axes; t=rgb2gray(f);
g=imnoise(t, 'gauss');% cong nhieu muoi tieu vao anh f
figure
imshow(g),title('Anh hu hai Gauss'); guidata(hObject,handles);
f=handles.axes; t=rgb2gray(f);
g=imnoise(t,'Gauss'); a3=fspecial ('average'); tg3=imfilter (g, a3) ;
figure,imshow(tg3);title('Anh loc trung binh voi mat la 3x3');
j. Lọc trung bình mặt nạ 5×5
function Loctrungbinhgauss_Callback(hObject, eventdata, handles)
f=handles.axes; t=rgb2gray(f);
g=imnoise(t,'Gauss');
a5=fspecial ('average', [5, 5]) ; tg5=imfilter (g, a5) ;
figure,imshow(tg5);title('Anh Loc Trung Binh mat la 5x5');
k. Lọc thích nghi mặt nạ 5×5
function loctuongthich5_Callback(hObject, eventdata, handles)
f=handles.axes; t=rgb2gray(f);
t2=imnoise (t, 'Gauss', 0, 0.005) ; t2w=wiener2 (t2, [5, 5]) ;
figure, imshow (t2w) ;title('Anh loc tuong thich voi mat la 5x5');
l. Lọc thích nghi mặt nạ 7×7
function loctuongthickgauss7_Callback(hObject, eventdata, handles)
f=handles.axes; t=rgb2gray(f);
t2=imnoise (t, 'Gauss', 0, 0.005) ; t2w=wiener2 (t2, [7, 7]) ;
figure, imshow (t2w) ;title('Anh loc tuong thich voi mat la 7x7');
3.6 Kết quả khi chạy chƣơng trình 3.6.1 Chọn ảnh
3.6.3 Lọc trung bình mặt nạ 3×3
3.6.4 Lọc trung bình mặt nạ 5×5
3.6.6 Lọc thích nghi mặt nạ 7×7
3..6.7 Lọc thích nghi mặt nạ 9×9
3.6.9 Lọc trung bình
3.6.10 Lọc cấp độ thấp 3×3
3.6.12 Lọc thứ tự 3×3
KẾT LUẬN VÀ HƢỚNG PHÁT TRIỂN
Những kết quả nghiên cứu của luận văn cho phep rut ra các kết luận sau:
Về mặt nghiên cứu lý thuyết: Đề tài đã nghiên cứu, tìm hiểu và trình bày một cách tổng quan về xử lý ảnh, phục hồi ảnh và các kỹ thuật lọc ảnh nhằm phục hồi lại ảnh gần giống nhât với ảnh gốc ảnh trước khi bị biến dạng.
Luận văn cũng đã trình bày một số thuật toán xử lý ảnh.
Về mặt ứng dụng: Luận văn đã trình bày tổng quan về phần mềm Matlab và các ứng dụng của nó trong xử lý ảnh, từ đó đã cái đặt được một số thuật toán xử lý ảnh, lọc ảnh với mục đích phục hồi lại ảnh gốc sao cho ảnh phục hồi được gần giống nhất so với ảnh gốc.
Trong thời gian làm đề tài với sự hạn chế về thời gian, tài liệu, cơ sở vật chất cũng như hạn chế về kiến thức đòi hỏi bản thân em phải cố gắng tìm tòi và nhiệt tình trong công việc nghiên cứu đề tài và cuối cùng đề tài đã hoàn thành trọn vẹn. Đó là kết quả của một thời gian dài nỗ lực nghiên cứu của bản thân dưới sự hướng dẫn tận tình của giáo viên hướng dẫn nên đề tài đã hoàn thành đúng thời hạn.
Tuy nhiên trong quá trình làm việc em không thể tránh khỏi sai sót. Mong sự chỉ bảo của thầy cô và đóng góp ý kiến của bạn bè để đề tài ngày một hoàn thiện hơn.
Hƣớng phát trển của luận văn: Nghiên cứu và tìm hiểu các kỹ thuật phân vùng ảnh nhằm giúp cho các Y, Bác sĩ trong ngành y tế chẩn đoán bệnh được chính xác hơn, để chữa trị kịp thời cho người bệnh.
TÀI LIỆU THAM KHẢO
[1]. Đỗ Năng Toàn, Phạm việt Bình, “Giáo trình xử lý ảnh”, Đại học Thái Nguyên, 2007.
[2]. Hồ Văn Sung, “Thực hành xử lý số tín hiệu trên máy tính PC với MATLAB”, Nxb. Khoa học và kỹ thuật, 2005.
[3]. Hồ văn Sung, “Xử lý ảnh số lý thuyết và thực hành”, Nxb. Khoa học và kỹ thuật, 2009.
[4]. Nguyễn Quang Hoan, “Giáo trình xử lý ảnh”, Học viện công nghệ bưu chính viễn thông, 2006.
[5]. http://thuthuat.fvn.vn/2011/03/giao-trinh-matlab.html, 2013.
[6]. http://www.mathworks.com/, 2013.
[7]. http://www.mathworks.com/help/wavelet/compression.html, 2013.
[8]. Matlab, MATLAB _TV, nxb. ebooks team, 2011.
[9]. Nguyễn đăng Bình, “Giáo trình xử lý ảnh số”, Trường Đại Học Khoa Học Huế, 2011.
[10]. SCM2511, An Introduction To Digital Image Processing With MATLAB, tài liệu Internet, 2013 .
PHỤ LỤC 1.Thƣ mục chƣơng trình
2.Chƣơng trình
function varargout = sang(varargin)
% SANG M-file for SANG.fig
% SANG , by itself, creates a new SANG or raises the existing % singleton*.
%
% H = SANG returns the handle to a new SANG or the handle to % the existing singleton*.
%
% SANG('CALLBACK',hObject,eventData,handles,...) calls the local
%
% SANG('Property','Value',...) creates a new SANG or raises the % existing singleton*. Starting from the left, property value pairs are % applied to the GUI before sang_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application % stop. All inputs are passed to tien_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)". %
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help sang % Last Modified by GUIDE v2.5 20-Apr-2013 13:21:56 % Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @tien_OpeningFcn, ... 'gui_OutputFcn', @tien_OutputFcn, ... 'gui_LayoutFcn', [] , ...
'gui_Callback', []); if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1}); end
else
gui_mainfcn(gui_State, varargin{:}); end
% End initialization code - DO NOT EDIT % --- Executes just before tien is made visible.
function sang_OpeningFcn(hObject, eventdata, handles, varargin)
handles.axes = 0; t=imread('1.png'); v=imread('2.jpg'); h=imread('4.jpg'); subplot(handles.logo); imshow(v); subplot(handles.axes5); imshow(t); subplot(handles.axes1);
imshow(h);title('Dai Hoc Thai Nguyen')
% This function has no output args, see OutputFcn. % hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to phuong (see VARARGIN) % Choose default command line output for tien
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes sang wait for user response (see UIRESUME) % uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = sang_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Get default command line output from handles structure
varargout{1} = handles.output;
% --- Executes on button press in chonanh.
function chonanh_Callback(hObject, eventdata, handles)
[filename,pathname]=uigetfile({'*.tif;*.bmp;*.gif;*.jpg;*.png'},'pick an image file'); S=imread([pathname,filename]); handles.axes = S; t=rgb2gray(S); subplot(handles.axes1); %subplot(handles.axes1);
imshow(t),title('ANH GOC'); guidata(hObject,handles);
% hObject handle to chonanh (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % --- Executes on button press in anhhuhai.
function anhhuhai_Callback(hObject, eventdata, handles)
f=handles.axes; t=rgb2gray(f);
figure% cong nhieu muoi tieu vao anh f
imshow(g),title('Anh hu hai muoi tieu voi d=0,07 - 7%'); guidata(hObject,handles);
% hObject handle to anhhuhai (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % --- Executes on button press in loctrungbinh.
function loctrungbinh_Callback(hObject, eventdata, handles)
m=3; n=3; f=handles.axes; t=rgb2gray(f);
g=imnoise(t, 'salt & pepper', 0.07);%cong nhieu muoi tieu vao anh
f2 = medfilt2(g, [m n]); figure
imshow(f2),title('loc nhieu voi bo loc trung binh (diem giua) voi ham medfilt2 '); guidata(hObject,handles);
% hObject handle to loctrungbinh (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % --- Executes on button press in locdiemgiua.
function locdiemgiua_Callback(hObject, eventdata, handles)
f=handles.axes; t=rgb2gray(f);
g=imnoise(t, 'salt & pepper', 0.07); m = 3; n = 3;
w = fspecial('average', [m, n]); f1 = imfilter(g, w);
figure
imshow(f1),title('loc nhieu voi bo loc trung binh cap do thap voi ma tran 3x3'); guidata(hObject,handles);
% hObject handle to locdiemgiua (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % --- Executes on button press in locdiemgiua5.
function locdiemgiua5_Callback(hObject, eventdata, handles)
f=handles.axes; t=rgb2gray(f);
g=imnoise(t, 'salt & pepper', 0.07); e = fspecial('average', [5,5]);
f1 = imfilter(g, e); figure
imshow(f1),title('loc nhieu voi bo loc trung binh cap do thap voi ma tran 5x5'); guidata(hObject,handles);
% hObject handle to locdiemgiua5 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % --- Executes on button press in close.
function close_Callback(hObject, eventdata, handles)
close();
% hObject handle to close (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % --- Executes on button press in locthutu3.
f=handles.axes; t=rgb2gray(f);
g=imnoise(t, 'salt & pepper', 0.07); f3 = ordfilt2(g,3,[0 1 0;1 1 1;0 1 0]); figure
imshow(f3),title('loc theo tu tu voi ham ordfilt2 voi mat la 3x3');
% hObject handle to locthutu3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % --- Executes on button press in locthutu5.
function locthutu5_Callback(hObject, eventdata, handles)
f=handles.axes; t=rgb2gray(f);
g=imnoise(t, 'salt & pepper', 0.07);
f4 = ordfilt2(g,5,[0 0 1 0 0;0 0 1 0 0;1 1 1 1 1;0 0 1 0 0;0 0 1 0 0]);%loc theo thu tu voi mat la 5x5
figure
imshow(f4),title('loc theo tu tu voi ham ordfilt2 voi mat la 5x5');
% hObject handle to locthutu5 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % --- Executes on button press in loctuongthich5.
function loctuongthich5_Callback(hObject, eventdata, handles)
f=handles.axes; t=rgb2gray(f);
t2=imnoise (t, 'Gauss', 0, 0.005) ; t2w=wiener2 (t2, [5, 5]) ;
figure, imshow (t2w) ;title('Anh loc tuong thich voi mat la 5x5');
% hObject handle to loctuongthich5 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % --- Executes on button press in Loctrungbinhgauss.
function Loctrungbinhgauss_Callback(hObject, eventdata, handles)
f=handles.axes; t=rgb2gray(f);
g=imnoise(t,'Gauss');
a5=fspecial('average', [5, 5]) ; tg5=imfilter (g, a5) ;
figure,imshow(tg5);title('Anh Loc Trung Binh mat la 5x5');
% hObject handle to Loctrungbinhgauss (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % --- Executes on button press in loctuongthickgauss7.
function loctuongthickgauss7_Callback(hObject, eventdata, handles)
f=handles.axes; t=rgb2gray(f);
t2=imnoise (t, 'Gauss', 0, 0.005) ; t2w=wiener2 (t2, [7, 7]) ;
figure, imshow (t2w) ;title('Anh loc tuong thich voi mat la 7x7');
% hObject handle to loctuongthickgauss7 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % --- Executes on button press in anhhuhaigauss.
f=handles.axes; t=rgb2gray(f);
g=imnoise(t, 'gauss');% cong nhieu muoi tieu vao anh f
figure
imshow(g),title('Anh hu hai Gauss'); guidata(hObject,handles);
% hObject handle to anhhuhaigauss (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % --- Executes on button press in loctrungbinh3.
function loctrungbinh3_Callback(hObject, eventdata, handles)
f=handles.axes; t=rgb2gray(f);
g=imnoise(t,'Gauss'); a3=fspecial ('average'); tg3=imfilter (g, a3) ;
figure,imshow(tg3);title('Anh loc trung binh voi mat la 3x3');
% hObject handle to loctrungbinh3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % --- Executes on button press in loctuongthichgauss9.
function loctuongthichgauss9_Callback(hObject, eventdata, handles)
f=handles.axes; t=rgb2gray(f);
t2=imnoise (t, 'Gauss', 0, 0.005) ; t2w=wiener2 (t2, [9, 9]) ;
% hObject handle to loctuongthichgauss9 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)