function varargout = GaborFilterDesighnNik(varargin)
%%
%function varargout = GaborFilterDesighnNik(varargin)
%
% Functional purpose: I've made this GUI for a couple of students, which were learning the Gabor Filtering, and had hard
% time to understand the sunbject. This helped them to get some intuition about what Gabor Filtering is, what are it's
% benefits and what are it's uses. This GUI allowes you to play with Gabor filters in order to understand this important
% topic. The user may define a Gabor Filter with all possible parameters, and to filter an image he wishes to. He then
% can see the filtered image, in spatial and frewquncy domain, it's phase and amplitude (as it's unreal signal). The
% filtered can beviewed in spatioal/frequncy domain, and it can be saved for future use.
%
% Input arguments: None. (Actually GUI settings defned by user).
%
% Output Arguments: None
%
% Issues & Comments: None
%
% Author and Date: Nikolay Skarbnik 7/07/2008.
%%
% GABORFILTERDESIGHNNIK M-file for GaborFilterDesighnNik.fig
% GABORFILTERDESIGHNNIK, by itself, creates a new GABORFILTERDESIGHNNIK or raises the existing
% singleton*.
%
% H = GABORFILTERDESIGHNNIK returns the handle to a new GABORFILTERDESIGHNNIK or the handle to
% the existing singleton*.
%
% GABORFILTERDESIGHNNIK('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in GABORFILTERDESIGHNNIK.M with the given input arguments.
%
% GABORFILTERDESIGHNNIK('Property','Value',...) creates a new GABORFILTERDESIGHNNIK or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before GaborFilterDesighnNik_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to GaborFilterDesighnNik_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 GaborFilterDesighnNik
% Last Modified by GUIDE v2.5 15-Mar-2011 23:05:01
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @GaborFilterDesighnNik_OpeningFcn, ...
'gui_OutputFcn', @GaborFilterDesighnNik_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
% End initialization code - DO NOT EDIT
% --- Executes just before GaborFilterDesighnNik is made visible.
function GaborFilterDesighnNik_OpeningFcn(hObject, eventdata, handles, varargin)
% 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 GaborFilterDesighnNik (see VARARGIN)
% Choose default command line output for GaborFilterDesighnNik
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% This sets up the initial plot - only do when we are invisible
% so window can get raised using GaborFilterDesighnNik.
if strcmp(get(hObject,'Visible'),'off')
imagesc(peaks(200));
text(100,20,'Gabor filter visual GUI','FontSize',28,'FontName','Castellar','HorizontalAlignment','center','FontWeight','Bold');
Str_array={' Dear user, please do the following:','1) Define the filter, by changing the Mother Gabor parameters',...
' or, by loading a previoly saved filter',' (you can view your filter in both time and frequency domains)',...
'2) Load an image','3) Finally, apply the filter','4) Using the "Show" and "Filtered Image" ',...
' button combination you can see the resulting image... '};
text(10,80,Str_array,'FontSize',20,'FontName','Kartika');
text(20,180,'\copyright Nikolay S.','FontSize',14,'HorizontalAlignment','center');
end
% UIWAIT makes GaborFilterDesighnNik wait for user response (see UIRESUME)
% uiwait(handles.GaborFiltGUINik);
% --- Outputs from this function are returned to the command line.
function varargout = GaborFilterDesighnNik_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;
% --------------------------------------------------------------------
function FileMenu_Callback(hObject, eventdata, handles)
% hObject handle to FileMenu (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% --------------------------------------------------------------------
function OpenMenuItem_Callback(hObject, eventdata, handles)
% hObject handle to OpenMenuItem (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
file = uigetfile('*.fig');
if ~isequal(file, 0)
open(file);
end
% --------------------------------------------------------------------
function PrintMenuItem_Callback(hObject, eventdata, handles)
% hObject handle to PrintMenuItem (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
printdlg(handles.GaborFiltGUINik)
% --------------------------------------------------------------------
function CloseMenuItem_Callback(hObject, eventdata, handles)
% hObject handle to CloseMenuItem (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
selection = questdlg(['Close ' get(handles.GaborFiltGUINik,'Name') '?'],...
['Close ' get(handles.GaborFiltGUINik,'Name') '...'],...
'Yes','No','Yes');
if strcmp(selection,'No')
return;
end
delete(handles.GaborFiltGUINik)
% --- Executes on selection change in Graph_type_popup.
function Graph_type_popup_Callback(hObject, eventdata, handles)
% hObject handle to Graph_type_popup (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: contents = get(hObject,'String') returns Graph_type_popup contents as cell array
% contents{get(hObject,'Value')} returns selected item from Graph_type_popup
n=get(handles.N_edit,'Value') ;
x=linspace(get(handles.X_min_edit,'Value'),get(handles.X_max_edit,'Value'),n);
y=linspace(get(handles.Y_min_edit,'Value'),get(handles.Y_max_edit,'Value'),n);
G=real(handles.FilterData); %real(get(hObject,'UserData'));
if (get(handles.Frequency_radiobutton,'Value'))
G=abs(fftshift(fft2(G)));
end
if (get(handles.Hold_on_checkbox,'Value'))
hold on;
else
hold off;
end
switch (get(handles.Graph_type_popup,'Value'))
case (1)
imagesc(x,y,G);
case (2)
mesh(x,y,G);
case (3)
surf(x,y,G);
end
% --- Executes during object creation, after setting all properties.
function Graph_type_popup_CreateFcn(hObject, eventdata, handles)
% hObject handle to Graph_type_popup (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: popupmenu controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
set(hObject, 'String', {'imagesc', 'mesh', 'surf'});
function N_edit_Callback(hObject, eventdata, handles)
% hObject handle to N_edit (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of N_edit as text
% str2double(get(hObject,'String')) returns contents of N_edit as a double
parameter_changed(hObject)
% --- Executes during object creation, after setting all properties.
function N_edit_CreateFcn(hObject, eventdata, handles)
% hObject handle to N_edit (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function X_min_edit_Callback(hObject, eventdata, handles)
% hObject handle to X_min_edit (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of X_min_edit as text
% str2double(get(hObject,'String')) returns contents of X_min_edit as a double
parameter_changed(hObject)
% --- Executes during object creation, after setting all properties.
function X_min_edit_CreateFcn(hObject, eventdata, handles)
% hObject handle to X_min_edit (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function X_max_edit_Callback(hObject, eventdata, handles)
% hObject handle to X_max_edit (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of X_max_edit as text
% str2double(get(hObject,'String')) returns contents of X_max_edit as a double
parameter_changed(hObject)
% --- Executes during object creation, after setting all properties.
function X_max_edit_CreateFcn(hObject, eventdata, handles)
% hObject handle to X_max_edit (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function Y_min_edit_Callback(hObject, eventdata, handles)
% hObject handle to Y_min_edit (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of Y_min_edit as text
% str2double(get(hObject,'String')) returns contents of Y_min_edit as a double
parameter_changed(hObject)
% --- Executes during object creation, after setting all properties.
function Y_min_edit_CreateFcn(hObject, eventdata, handles)
% hObject handle to Y_min_edit (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function Y_max_edit_Callback(hObject, eventdata, handles)
% hObject handle to Y_max_edit (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of Y_max_edit as text
% str2double(get(hObject,'String')) returns contents of Y_max_edit as a double
parameter_changed(hObject)
% --- Executes during object creation, after setting all properties.
function Y_max_edit_CreateFcn(hObject, eventdata, handles)
% hObject handle to Y_max_edit (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function Frequency_edit_Callback(hObject, eventdata, handles)
% hObject handle to Frequency_edit (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of Frequency_edit as text
% str2double(get(hObject,'String')) returns contents of Frequency_edit as a double
parameter_changed(hObject)
% --- Executes during object creation, after setting all properties.
function Frequency_edit_CreateFcn(hObject, eventdata, handles)
% hObject handle to Frequency_edit (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function Rotation_Angle_edit_Callback(hObject, eventdata, handles)
% hObject handle to Rotation_Angle_edit (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of Rotation_Angle_edit as text
% str2double(get(hObject,'String')) returns contents of Rotation_Angle_edit as a double
parameter_changed(hObject)
% --- Executes during object creation, after setting all properties.
function Rotation_Angle_edit_CreateFcn(hObject, eventdata, handles)
% hObject handle to Rotation_Angle_edit (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function Sigma_x_edit_Callback(hObject, eventdata, handles)
% hObject handle to Sigma_x_edit (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of Sigma_x_edit as text
% str2double(get(hObject,'String')) returns contents of Sigma_x_edit as a double
parameter_changed(hObject)
% --- Executes during object creation, after setting all properties.
function Sigma_x_edit_CreateFcn(hObject, eventdata, handles)
% hObject handle to Sigma_x_edit (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function Sigma_y_edit_Callback(hObject, eventdata, handles)
% hObject handle to Sigma_y_edit (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of Sigma_y_edit as text
% str2double(get(hObject,'String')) returns contents of Sigma_y_edit as a double
parameter_changed(hObject)
% --- Executes during object creation, after setting all properties.
function Sigma_y_edit_CreateFcn(hObject, eventdata, handles)
% hObject handle to Sigma_y_edit (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
% --- Executes during object creation, after setting all properties.
function axes1_CreateFcn(hObject, eventdata, handles)
% hObject handle to axes1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: place code in OpeningFcn to populate axes1
set(hObject,'FontSize',1e-3);
function Phase_shift_edit_Callback(hObject, eventdata, handles)
% hObject handle to Phase_shift_edit (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of Phase_shift_edit as text
% str2double(get(hObject,'String')) returns contents of Phase_shift_edit as a double
parameter_changed(hObject)
% --- Executes during object creation, after setting all properties.
function Phase_shift_edit_CreateFcn(hObject, eventdata, handles)
% hObject handle to Phase_shift_edit (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
% --- Executes on button press in Time_radiobutton.
function Time_radiobutton_Callback(hObject, eventdata, handles)
% hObject handle to Time_radiobutton (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hint: get(hObject,'Value') returns toggle state of Time_radiobutton
eventdata='datachanged';
Graph_type_popup_Callback(handles.Graph_type_popup, eventdata, handles)
% --- Executes on button press in Frequency_radiobutton.
function Frequency_radiobutton_Callback(hObject, eventdata, handles)
% hObject handle to Frequency_radiobutton (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hint: get(hObject,'Value') returns toggle state of Frequency_radiobutton
eventdata='datachanged';
Graph_type_popup_Callback(handles.Graph_type_popup, eventdata, handles)
function parameter_changed(hObject)
set(hObject,'Value',str2double(get(hObject,'String'))); % "edit" object value, is the numeric value of the string.
handles=guidata(hObject);
n=get(handles.N_edit,'Value') ;
Sigma_x=get(handles.Sigma_x_edit,'Value') ;
Sigma_y=get(handles.Sigma_y_edit,'Value') ;
x=linspace(get(handles.X_min_edit,'Value'),get(handles.X_max_edit,'Value'),n);
y=linspace(get(handles.Y_min_edit,'Value'),get(handles.Y_max_edit,'Value'),n);
% set(handles.axes1,'XLim',[x(1), x(end)]);
% set(handles.axes1,'YLim',[y(1), y(end)]);
axis([x(1), x(end), y(1), y(end)]);
F=get(handles.Frequency_edit,'Value') ; % modulation freq
Theta= get(handles.Rotation_Angle_edit,'Value')*pi/180;
Phase_shift=get(handles.Phase_shift_edit,'Value');
% [x_rot,y_rot]=my_rotate(x,y,Theta);
[X,Y]=meshgrid(x,y);
X_rot=X*cos(Theta)+Y*sin(Theta);
Y_rot=-X*sin(Theta)+Y*cos(Theta);
GaussianMat=1/(2*pi*Sigma_x*Sigma_y)*exp((-((X_rot)/Sigma_x).^2-((Y_rot)/Sigma_y).^2)/2);%exp((-(X_rot)/(Sigma_x)^2-(Y_rot)/(Sigma_y)^2)/2);
% GaussianMat=myGaussian(x_rot, Sigma_x)'*myGaussian(y_rot, Sigma_y);
% FreqModulation=zeros(size(GaussianMat));
%
% for n=1:length(y)
% for m=1:length(x)
% FreqModulation(n,m)=exp(j*F*2*pi*(x(m)*cos(Theta)+y(n)*sin(Theta)));
% end
% end
FreqModulation=exp(j*(F*2*pi*X_rot+Phase_shift));
% FreqModulation=exp(2*pi*i*F*repmat(x_rot,length(y_rot),1));%'*ones(size(x_rot));
% FreqModulation=exp(2*pi*i*F*x_rot)'*exp(2*pi*i*F*y_rot+Phase_shift); %repmat(exp(2*i*pi*F*x),m,1);
GaborFilter=GaussianMat.*FreqModulation;
handles.FilterData=GaborFilter; % Save the resulting Gabor filter
%set(handles.Graph_type_popup,'UserData',GaborFilter);
guidata(hObject,handles);
eventdata='datachanged';
Graph_type_popup_Callback(handles.Graph_type_popup, eventdata, handles)
function G=myGaussian(x, sigma,mean)
if nargin<3
mean=0;
if nargin<2
sigma=1;
end
end
G=1/(2*pi)*exp(-((x-mean)/sigma).^2/2);
function [x_rot,y_rot]=my_rotate(x,y,Theta)
%function [x_rot,y_rot]=my_rotate(x,y,Theta)
% Rotates X and Y by agle Theta (Theta is given in rad)
x_rot=x*cos(Theta)+y*sin(Theta);
y_rot=-x*sin(Theta)+y*cos(Theta);
function error_accured(handles, error_String)
% function error_accured(handles, error_String)
% the function desplays an error string on the GUI screen, once an error
% accures.
set (handles.ErrorText,'String',error_String);
set (handles.ErrorPanel,'Visible','On');%set ([handles.ErrorText, handles.ErrorOffButton],'Visible','On');
% --- Executes on button press in Hold_on_checkbox.
function Hold_on_checkbox_Callback(hObject, eventdata, handles)
% hObject handle to Hold_on_checkbox (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hint: get(hObject,'Value') returns toggle state of Hold_on_checkbox
% --- Executes on button press in LoadButton.
function LoadButton_Callback(hObject, eventdata, handles)
% hObject handle to LoadButton (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
handles=guidata(hObject);
switch (get(handles.FileTypeMenu,'Value'))
case(1) %('Image')
FilterSpec={'*.jpg;*.jpeg;*.gif;*.bmp;*.png;*.tiff','Image Files (*.jpg;*.jpeg;*.gif;*.bmp;*.png;*.tiff)'};
DialogTitle='Select an Image file';
case(2) %('Filter')
FilterSpec='*.mat';
DialogTitle='Select a previolsy saved Filter file';
case(3) %('Filtered Image')
FilterSpec='*.mat';
DialogTitle='Select a previolsy saved Filtered Image file';
end
[FileName,PathName,FilterIndex] = uigetfile(FilterSpec,DialogTitle);
if isequal(FileName,0)
error_accured(handles, 'No such file exists. Choose a file.')
if strcmpi(get(handles.ApplyFilterButton,'Enable'),'On')
set(handles.ApplyFilterButton,'Enable','Off');
end
else
set(handles.FilePathEdit,'String',PathName);
set(handles.FileNameEdit,'String',FileName);
if strcmpi(get(handles.ApplyFilterButton,'Enable'),'Off')
set(handles.ApplyFilterButton,'Enable','On');
end
end
switch (get(handles.FileTypeMenu,'Value'))
case(1) %('Image')
ImageDataTmp=imread([PathName,FileName]);
if (size(ImageDataTmp,3)==3) %work with Gray iamges only!!!
ImageDataTmp=rgb2gray(ImageDataTmp);
end
handles.ImageData=double(ImageDataTmp);
case(2) %('Filter')
FilterDataTmp=load([PathName,FileName]);
handles.FilterData=FilterDataTmp.tmp;
case{3,4} %('Filtered Image')
FilteredImageDataTmp=load([PathName,FileName]);
handles.FilteredImageData=FilteredImageDataTmp.tmp;
end
guidata(hObject,handles);
% --- Executes on button press in SaveButton.
function SaveButton_Callback(hObject, eventdata, handles)
% hObject handle to SaveButton (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
FileName=get(handles.FileNameEdit,'String');
PathName=get(handles.FilePathEdit,'String');
if isempty(strfind(FileName,'.mat'))
% Error, trying to save .mat output in a non *.mat file!!!
error_accured(handles, 'Attempt to save .mat output in a non *.mat file!!!')
end
tmp=[];
switch (get(handles.FileTypeMenu,'Value'))
case(1) %('Image')
%Do nothing here. Saving the image is obsolite at this point
case(2) %('Filter')
tmp=handles.FilterData;
case{3,4} %('Filtered Image')
tmp=handles.FilteredImageData;
end
if ~isempty(tmp) save([PathName,FileName],'tmp'); end;
function FilePathEdit_Callback(hObject, eventdata, handles)
% hObject handle to FilePathEdit (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of FilePathEdit as text
% str2double(get(hObject,'String')) returns contents of FilePathEdit as a double
% --- Executes during object creation, after setting all properties.
function FilePathEdit_CreateFcn(hObject, eventdata, handles)
% hObject handle to FilePathEdit (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function FileNameEdit_Callback(hObject, eventdata, handles)
% hObject handle to FileNameEdit (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of FileNameEdit as text
% str2double(get(hObject,'String')) returns contents of FileNameEdit as a double
% --- Executes during object creation, after setting all properties.
function FileNameEdit_CreateFcn(hObject, eventdata, handles)
% hObject handle to FileNameEdit (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
% --- Executes on selection change in FileTypeMenu.
function FileTypeMenu_Callback(hObject, eventdata, handles)
% hObject handle to FileTypeMenu (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: contents = get(hObject,'String') returns FileTypeMenu contents as cell array
% contents{get(hObject,'Value')} returns selected item from FileTypeMenu
% --- Executes during object creation, after setting all properties.
function FileTypeMenu_CreateFcn(hObject, eventdata, handles)
% hObject handle to FileTypeMenu (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: popupmenu controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
% --- Executes on button press in ShowButton.
function ShowButton_Callback(hObject, eventdata, handles)
% hObject handle to ShowButton (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
if (get(handles.NewFigCheckBox,'Value'))
figure; % if checkbox is on, plot graph in a new window
% title(['Image of ', get(handles.FileTypeMenu,'String')]);
% hold on;
end
switch (get(handles.FileTypeMenu,'Value'))
case(1) %('Image')
imshow(uint8(handles.ImageData));
% if (get(handles.Frequency_radiobutton,'Value'))
% image(abs(fft2(handles.ImageData)));
% else
% imshow(uint8(handles.ImageData));
% end
case(2) %('Filter')
eventdata='Show Button was pressed';
Graph_type_popup_Callback(hObject, eventdata, handles)
case(3) %('Filtered ImageAmplitude')
if isempty(handles.FilteredImageData)
eventdata='Filtered Image data is needed';
ApplyFilterButton_Callback(hObject, eventdata, handles);
% guidata(hObject,handles);
% handles=guidata(hObject); % update handle structure
end
% if (get(handles.Frequency_radiobutton,'Value'))
% image(abs(fft2(handles.FilteredImageData)));
% else
% imshow(uint8(real(handles.FilteredImageData))); % Showing only real part of filtered image
% end
imshow(Scale2Uint(abs(handles.FilteredImageData))); % Showing only absolute value of the filtered image
case(4) %('Filtered Image Phaze')
if isempty(handles.FilteredImageData)
eventdata='Filtered Image data is needed';
ApplyFilterButton_Callback(hObject, eventdata, handles);
end
% imshow(uint8(angle(handles.FilteredImageData))); % Showing only real part of filtered image
scalled_amp=Scale2Uint(abs(handles.FilteredImageData));
scalled_phase=Scale2Uint(angle(handles.FilteredImageData));
% ind=scalled_amp==0;
% scalled_phase(ind)=0;%set phase for low amplitudes to zero
scalled_phase(scalled_amp<1)=0;%set phase for low amplitudes to zero
imshow(scalled_phase); % Showing the angle value of the filtered image
case(5) %('Laplasina(Filtered Image Phaze)')
if isempty(handles.FilteredImageData)
eventdata='Filtered Image data is needed';
ApplyFilterButton_Callback(hObject, eventdata, handles);
end
% imshow(uint8(angle(handles.FilteredImageData))); % Showing only real part of filtered image
imshow(Scale2Uint(del2(angle(handles.FilteredImageData)))); % Showing the angle value of the filtered image
case(6) %('Gaussian(Filtered Image Phaze)')
if isempty(handles.FilteredImageData)
eventdata='Filtered Image data is needed';
ApplyFilterButton_Callback(hObject, eventdata, handles);
end
% imshow(uint8(angle(handles.FilteredImageData))); % Showing only real part of filtered image
imshow(Scale2Uint(gradient(angle(handles.FilteredImageData)))); % Showing the angle value of the filtered image
end
if (get(handles.NewFigCheckBox,'Value'))
temp_str_arr=get(handles.FileTypeMenu,'String');
temp_str=temp_str_arr(get(handles.FileTypeMenu,'Value'));
title(temp_str,'FontSize',18);
end
% --- Executes on button press in ApplyFilterButton.
function ApplyFilterButton_Callback(hObject, eventdata, handles)
% hObject handle to ApplyFilterButton (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
handles=guidata(hObject);
if isempty(handles.ImageData)
error_accured(handles, 'No Image file loaded');
end
set(handles.GaborFiltGUINik,'Pointer','watch'); drawnow;
% uiwait(handles.GaborFiltGUINik);
if size(handles.ImageData,3)==3
handles.FilteredImageData=[];
for i=1:3
handles.FilteredImageData(:,:,i)=filter2(handles.FilterData,handles.ImageData(:,:,i),'same');
end
else
handles.FilteredImageData=filter2(handles.FilterData,handles.ImageData,'same');%conv2(handles.FilterData,handles.ImageData);
end
set(handles.GaborFiltGUINik,'Pointer','arrow');drawnow;
guidata(hObject,handles);
% --- Executes during object creation, after setting all properties.
function GaborFiltGUINik_CreateFcn(hObject, eventdata, handles)
% hObject handle to GaborFiltGUINik (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
handles=guidata(hObject);
home; % scrole screen up
fprintf('\n\n %s \n\n','(NikolayS) Gabor Filter generation and application GUI started ');
handles.ImageData=[]; % Init vriables, so isempty function can be applied to them.
handles.FilterData=[];
handles.FilteredImageData=[];
guidata(hObject,handles);
% --- Executes on button press in ErrorOffButton.
function ErrorOffButton_Callback(hObject, eventdata, handles)
% hObject handle to ErrorOffButton (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
%set ([handles.ErrorText, handles.ErrorOffButton],'Visible','Off');
set (handles.ErrorPanel,'Visible','Off');
% --- Executes on button press in NewFigCheckBox.
function NewFigCheckBox_Callback(hObject, eventdata, handles)
% hObject handle to NewFigCheckBox (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hint: get(hObject,'Value') returns toggle state of NewFigCheckBox
% --------------------------------------------------------------------
function AboutMenu_Callback(hObject, eventdata, handles)
% hObject handle to AboutMenu (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
web('GaborFilterDesighnNikAbout.htm');
% --------------------------------------------------------------------
function HelpMenu_Callback(hObject, eventdata, handles)
% hObject handle to HelpMenu (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
web('GaborFilterDesighnNikHelp.htm');
%% Servise sub functions
function scaled_mat=Scale2Uint(temp) % rescale data to be in margins of UINT8[0-255]
temp=double(temp);
temp_min=min(temp(:));
temp_max=max(temp(:));
temp=temp-temp_min;
temp=255*temp/(temp_max-temp_min);
scaled_mat=uint8(temp);