GIAO DIỆN CHO QUÁ TRÌNH MÔ PHỎNG

Một phần của tài liệu Luận văn điện tử Khử nhiễu cho tín hiệu hình ảnh (Trang 33 - 40)

Hình 4.5: Vùng hiển thị cho các hình ảnh

28

Chương trình chạy cho giao diện

% PHẦN CHƯƠNG TRÌNH MẶC ĐỊNH CHO NỘI DUNG GIAO DIỆN function varargout = denoise(varargin)

gui_Singleton = 1;

gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ...

'gui_OpeningFcn', @denoise_OpeningFcn, ... 'gui_OutputFcn', @denoise_OutputFcn, ... 'gui_LayoutFcn', [] , ...

'gui_Callback', []); if nargin && ischar(varargin{1})

gui_State.gui_Callback = str2func(varargin{1}); end

if nargout

[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else

gui_mainfcn(gui_State, varargin{:}); end

% --- Executes just before denoise is made visible.

function denoise_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject;

guidata(hObject, handles);

% --- Outputs from this function are returned to the command line. function varargout = denoise_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output;

% CHƯƠNG TRÌNH CHO CÁC CÔNG CỤ VÀ HIỂN THỊ % Chương trình cho slider Mức phân tích.

function mucphantich_Callback(hObject, eventdata, handles) global lev_dec

lev_dec=get(handles.mucphantich,'value'); % Lấy giá trị từ slider.

lev_dec=round(lev_dec); % Làm tròn mức phân tích.

set(handles.hienthi_mucphantich,'str',num2str(lev_dec)); % Hiển thị mức phân tích. % Mặc định khởi chạy cho slider Mức phân tích bằng 2.

29 function mucphantich_CreateFcn(hObject, eventdata, handles)

global lev_dec lev_dec=2; if isequal(get(hObject,'BackgroundColor'),… get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor',[.9 .9 .9]); end

% Chương trình cho pushbutton Lọc nhiễu.

function locnhieu_Callback(hObject, eventdata, handles) global I J lev_dec sorh thrd ID wname twave mse psnr

twave=get(handles.ho_wavelet,'value'); % Lấy giá trị từ popupmenu Họ wavelet. switch (twave)

case 1

wname='db8'; % Họ wavelet Daubechies.

case 2

wname='sym6'; % Họ wavelet Symlets.

case 3

wname='coif5'; % Họ wavelet Coiflet.

case 4

wname='bior3.9'; % Họ wavelet Biorthogonal.

end

thrd=get(handles.nguong,'value'); % Lấy giá trị từ popupmenu Loại ngưỡng. switch (thrd) case 1 sorh='s'; % Ngưỡng mềm. case 2 sorh='h'; % Ngưỡng cứng. end

if length(size(J))==3 % Chương trình cho ảnh màu.

J1=J(:,:,1); % Trích ra ma trận 1 trong ma trận 3 chiều.

J2=J(:,:,2); % Trích ra ma trận 2 trong ma trận 3 chiều.

J3=J(:,:,3); % Trích ra ma trận 3 trong ma trận 3 chiều.

[c1,s1]=wavedec2(J1,lev_dec,wname); % Phân tích wavelet cho ma trận 1. det1=detcoef2('c',c1,s1,1); % Trích ra hệ số chi tiết mức 1 của ma trận 1. [c2,s2]=wavedec2(J2,lev_dec,wname); % Phân tích wavelet cho ma trận 2.

30 det2=detcoef2('c',c2,s2,1); % Trích ra hệ số chi tiết mức 1 của ma trận 2.

[c3,s3]=wavedec2(J3,lev_dec,wname); % Phân tích wavelet cho ma trận 3. det3=detcoef2('c',c3,s3,1); % Trích ra hệ số chi tiết mức 1 của ma trận 3. sigma1=median(abs(det1))/0.6745; % Ước lượng nhiễu cho ma trận 1. sigma2=median(abs(det2))/0.6745; % Ước lượng nhiễu cho ma trận 1. sigma3=median(abs(det3))/0.6745; % Ước lượng nhiễu cho ma trận 1.

alfa=2; % Tham số điều chỉnh mặc định cho khử nhiễu là 2.

thr1=wbmpen(c1,s1,sigma1,alfa); % Tính giá trị ngưỡng cho ma trận 1. thr2=wbmpen(c2,s2,sigma2,alfa); % Tính giá trị ngưỡng cho ma trận 2. thr3=wbmpen(c3,s3,sigma3,alfa); % Tính giá trị ngưỡng cho ma trận 3.

keepapp = 1; % Hệ số mặc định cho các xấp xỉ không được đặt ngưỡng.

ID1=wdencmp('gbl',c1,s1,wname,lev_dec,thr1,sorh,keepapp); % Lọc nhiễu bằng ID2=wdencmp('gbl',c2,s2,wname,lev_dec,thr2,sorh,keepapp); % đặt ngưỡng ID3=wdencmp('gbl',c3,s3,wname,lev_dec,thr3,sorh,keepapp); % toàn cục.

X=[ID1 ID2 ID3]; % Tái xây dựng lại ảnh màu

ID=reshape(X,size(J)); % từ cấu trúc đã phân tích.

mse=sum((I(:)-ID(:)).^2)/(3*prod(size(I))); % Tính sai số trung bình bình phương. set(handles.hienthi_mse,'str',num2str(mse)); % Hiển thị giá trị MSE.

psnr=10*log10(1/mse); % Tính giá trị tỉ số tín hiệu cực đại trên nhiễu.

set(handles.hienthi_psnr,'str',num2str(psnr)); % Hiển thị giá trị PSNR.

axes(handles.anhlocnhieu); % Hiển thị ảnh

imshow(ID); % sau lọc nhiễu lên axes Ảnh lọc nhiễu.

else % Chương trình cho ảnh mức xám.

[c,s]=wavedec2(J,lev_dec,wname); % Phân tích wavelet cho ma trận ảnh.

det1=detcoef2('c',c,s,1); % Trích ra hệ số chi tiết mức 1 của ma trận ảnh. sigma=median(abs (det1))/0.6745; % Ước lượng nhiễu.

alfa=2;

thr= wbmpen(c,s,sigma,alfa); % Tính giá trị ngưỡng. keepapp=1;

ID=wdencmp('gbl',c,s,wname,lev_dec,thr,sorh,keepapp); % Lọc nhiễu từ ngưỡng. mse=sum((I(:)-ID(:)).^2)/prod(size(I)); % Tính giá trị MSE.

set(handles.hienthi_mse,'str',num2str(mse)); % Hiển thị giá trị MSE.

psnr=10*log10(1/mse); % Tính giá trị PSNR.

31

axes(handles.anhlocnhieu); % Hiển thị ảnh

imshow(ID); % sau lọc nhiễu lên axes Ảnh lọc nhiễu.

end

% Chương trình cho slider Mức độ nhiễu.

function mucdonhieu_Callback(hObject, eventdata, handles) global lev_noise

lev_noise=get(handles.mucdonhieu,'value'); % Lấy giá trị từ slider Mức độ nhiễu. set(handles.hienthi_mucdonhieu,'str',num2str(lev_noise)); % Hiển thị mức độ nhiễu. % Mặc định khởi chạy cho slider Mức độ nhiễu bằng 0.02.

function mucdonhieu_CreateFcn(hObject, eventdata, handles) global lev_noise lev_noise=0.02; if isequal(get(hObject,'BackgroundColor'),… get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor',[.9 .9 .9]); end

% Chương trình cho pushbutton Tạo nhiễu.

function taonhieu_Callback(hObject, eventdata, handles) global I J lev_noise tnoise

tnoise=get(handles.loainhieu,'value'); % Lấy giá trị từ popupmenu Loại nhiễu. switch (tnoise)

case 1

J=imnoise(I,'gaussian',0,lev_noise); % Nhiễu Gaussian. case 2

J=imnoise(I,'speckle',lev_noise); % Nhiễu Speckle. case 3

J=imnoise(I,'salt & pepper',lev_noise); % Nhiễu Salt & Pepper. end

axes(handles.anhnhieu); % Hiển thị ảnh được tạo nhiễu

imshow(J); % lên axes Ảnh nhiễu.

% Chương trình cho pushbutton Tải ảnh.

function taianh_Callback(hObject, eventdata, handles) global I v

[fname,pname]=uigetfile({'*.jpeg;*.jpg;*.tif;*.tiff;*.bmp;*.png',... 'All supported image files';'*.jpg;*.jpeg','JPEG Files(*.jpg,*.jpeg)';...

32 '*.tif;*.tiff','TIFF Files(*.tif,*.tiff)';...

'*.bmp','Bitmap Files(*.bmp)';'*.png','PNG Files(*.png)'},'Load image to process'); v=strcat(pname,fname);

I=imread(v); I=im2double(I); axes(handles.anhgoc); imshow(I);

% Chương trình cho pushbutton Tải lại.

function tailai_Callback(hObject, eventdata, handles)

cla(handles.anhgoc,'reset'); % Xóa ảnh trên axes Ảnh gốc.

cla(handles.anhnhieu,'reset'); % Xóa ảnh trên axes Ảnh nhiễu. cla(handles.anhlocnhieu,'reset'); % Xóa ảnh trên axes Ảnh lọc nhiễu.

clear global; % Xóa tất cả giá trị các biến.

global lev_noise lev_dec % Khai báo lại cho các mặc định.

set(handles.hienthi_mucdonhieu,'str',num2str(0.02)); % Thiết lập lại

set(handles.hienthi_mucphantich,'str',num2str(2)); % tất cả giá trị mặc định

set(handles.mucdonhieu,'value',0.02); % mức độ nhiễu, loại nhiễu

set(handles.mucphantich,'value',2); % mức phân tích, họ wavelet

set(handles.ho_wavelet,'value',1); % loại ngưỡng và hiển thị lại

set(handles.nguong,'value',1); % các giá trị mặc định cho tiến

set(handles.loainhieu,'value',1); % trình xử lý mới.

set(handles.hienthi_mse,'str',num2str(0)); % Thiết lập hiển thị MSE về 0. set(handles.hienthi_psnr,'str',num2str(0)); % Thiết lập hiển thị PSNR về 0. lev_noise=0.02; % Gán lại giá trị mặc định cho mức độ nhiễu.

lev_dec=2; % Gán lại giá trị mặc định cho mức phân tích.

% Chương trình cho pushbutton Lưu ảnh.

function luuanh_Callback(hObject, eventdata, handles) global ID

[fname,pname]=uiputfile('*.jpg','Save image'); name=fullfile(pname,fname);

imwrite(ID,name,'jpg');

% Chương trình cho pushbutton Thoát.

function thoat_Callback(hObject, eventdata, handles) close all;

33 % --- Executes on selection change in nguong.

function nguong_Callback(hObject, eventdata, handles)

% --- Executes during object creation, after setting all properties. function nguong_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'),… get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white'); end

% --- Executes during object creation, after setting all properties. function hienthi_mucdonhieu_CreateFcn(hObject, eventdata, handles) % --- Executes during object creation, after setting all properties. function hienthi_mucphantich_CreateFcn(hObject, eventdata, handles) % --- Executes during object creation, after setting all properties. function anhgoc_CreateFcn(hObject, eventdata, handles)

% --- Executes during object creation, after setting all properties. function anhnhieu_CreateFcn(hObject, eventdata, handles) % --- Executes during object creation, after setting all properties. function anhlocnhieu_CreateFcn(hObject, eventdata, handles) % --- Executes on selection change in ho_wavelet.

function ho_wavelet_Callback(hObject, eventdata, handles) % --- Executes during object creation, after setting all properties. function ho_wavelet_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'),… get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white'); end

% --- Executes on selection change in loainhieu.

function loainhieu_Callback(hObject, eventdata, handles)

% --- Executes during object creation, after setting all properties. function loainhieu_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'),… get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white'); end

34 function hienthi_mse_CreateFcn(hObject, eventdata, handles)

% --- Executes during object creation, after setting all properties. function hienthi_psnr_CreateFcn(hObject, eventdata, handles) % --- Executes during object creation, after setting all properties. function logo_CreateFcn(hObject, eventdata, handles)

lg=imread('stu.bmp'); imshow(lg);

Giao diện cho quá trình xử lý ảnh gồm các vùng sau

- Vùng tải ảnh, lưu ảnh, reset và thoát khỏi windows.

- Vùng mô phỏng sinh nhiễu cho ảnh với các loại nhiễu Gaussian, Speckle, Salt & Pepper và với các mức độ nhiễu từ 0 đến 1 được cài đặt trên thanh trượt. Giá trị cài đặt mặc định chạy trên giao diện là loại nhiễu Gaussian với mức độ nhiễu là 0.02.

- Vùng lọc nhiễu cho ảnh có các lựa chọn mức phân tích wavelet, họ hàm wavelet và loại ngưỡng cứng hay mềm. Các họ hàm wavelet ở đây có thể phân tích cho kết quả tốt được lựa chọn cho giao diện từ thực nghiệm là Daubechies, Symlets, Coiflets và Biorthogonal. Giá trị cài đặt mặc định chạy trên giao diện là mức phân tích level 2, họ hàm wavelet Daubechies và loại ngưỡng là ngưỡng mềm.

- Vùng hiển thị ảnh bao gồm 3 đồ thị hiển thị cho ảnh gốc, ảnh nhiễu và ảnh sau khi được lọc nhiễu.

- Ngoài ra còn có hiển thị giá trị sai số trung bình bình phương và tỉ số tín hiệu cực đại trên nhiễu để có thể biết được chất lượng hình ảnh sau khử nhiễu qua đó có thể điều chỉnh họ hàm wavelet, mức phân tích và loại ngưỡng để có được một kết quả tốt nhất.

Một phần của tài liệu Luận văn điện tử Khử nhiễu cho tín hiệu hình ảnh (Trang 33 - 40)