function varargout = gui_win(varargin) % gui_win MATLAB code for gui_win.fig % gui_win, by itself, creates a new gui_win or raises the existing % singleton*. % % H = gui_win returns the handle to a new gui_win or the handle to % the existing singleton*. % % gui_win('CALLBACK',hObject,eventData,handles,...) calls the local % function named CALLBACK in gui_win.M with the given input arguments. % % gui_win('Property','Value',...) creates a new gui_win or raises the % existing singleton*. Starting from the left, property value pairs are % applied to the gui_win before gui_win_OpeningFcn gets called. An % unrecognized property name or invalid value makes property application % stop. All inputs are passed to gui_win_OpeningFcn via varargin. % % *See gui_win Options on GUIDE's Tools menu. Choose "gui_win allows only one % instance to run (singleton)". % % See also: GUIDE, GUIDATA, GUIHANDLES % Edit the above text to modify the response to help gui_win % Last Modified by GUIDE v2.5 11-Sep-2012 17:00:46 % Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @gui_win_OpeningFcn, ... 'gui_OutputFcn', @gui_win_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 gui_win is made visible. function gui_win_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 gui_win (see VARARGIN) % Choose default command line output for gui_win handles.output = hObject; % Update handles structure guidata(hObject, handles); % Set color of the strart button to green set(handles.togglebutton1,'BackgroundColor','Green'); % Declare global variables global background_m; global image_name; global isworking; global image_m; global image_original; global image_cleaned; global image_fitted; % Initial values background_m = 0; image_m = 0; image_original = 0; image_cleaned = 0; image_fitted = 0; image_name = 'test.png'; isworking = 0; % Don`t show ticks for the minor windows set(handles.axes6,'PlotBoxAspectRatio',[4 3 1],'DataAspectRatio',[1 1 1],'YTick',[],'XTick',[]); set(handles.xsection,'PlotBoxAspectRatio',[4 3 1],'DataAspectRatio',[1 1 1],'YTick',[],'XTick',[]); set(handles.ysection,'PlotBoxAspectRatio',[4 3 1],'DataAspectRatio',[1 1 1],'YTick',[],'XTick',[]); % --- Outputs from this function are returned to the command line. function varargout = gui_win_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; % This funcion just calls the external program which takes an image from camera % We call it with parameters read from the GUI fields function grabimage(handles) global image_name; global image_m; global image_original; run_string = horzcat('grabNimages_1394cam.exe -s ',num2str(get(handles.edit2,'String')),' -n ',num2str(get(handles.edit3,'String'))); system(run_string); img=imread(image_name); image_m=double(img); image_original=image_m; function display_stuff(handles) global image_m; global background_m; % If we need to substract the background, we do it % background_m is a global variable if get(handles.togglebutton2,'Value') > 0 m = image_m - background_m; else m = image_m; end; % Read the tolerance value from the GUI tol = str2num(get(handles.edit1,'String')); % Display what we have before doing fit axes(handles.original_image); imagesc(m); set(handles.original_image,'PlotBoxAspectRatio',[4 3 1],'DataAspectRatio',[1 1 1]); drawnow; % This function is executed when START button is pressed. % We do different stuff depending on the radiobutton selection % --- Executes on button press in togglebutton1. function togglebutton1_Callback(hObject, eventdata, handles) % hObject handle to togglebutton1 (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 togglebutton1 global isworking; global image_m; isworking =1; % Paint the button and change text set(handles.togglebutton1,'BackgroundColor','Red'); set(handles.togglebutton1,'String','STOP'); drawnow; % needed to draw this before doing fit % This is for the single run if get(handles.radiobutton2,'Value') % Grab an image from camera grabimage(handles); display_stuff(handles); end; % This executes when we do the continious run % Same as the single fit exept that we have a while cycle if get(handles.radiobutton3,'Value') while get(handles.togglebutton1,'Value') > 0 grabimage(handles); display_stuff(handles); end; end; % Paint it back set(handles.togglebutton1,'Value',0); set(handles.togglebutton1,'BackgroundColor','Green'); set(handles.togglebutton1,'String','START'); drawnow; isworking =0; % If we change the radiobutton setting we unpress the start button which will stop any activity.. eventually % Also here we check if we want to choose a file from a the file-open % dialog % --- Executes when selected object is changed in uipanel1. function uipanel1_SelectionChangeFcn(hObject, eventdata, handles) % hObject handle to the selected object in uipanel1 % eventdata structure with the following fields (see UIBUTTONGROUP) % EventName: string 'SelectionChanged' (read only) % OldValue: handle of the previously selected object or empty if none was selected % NewValue: handle of the currently selected object % handles structure with handles and user data (see GUIDATA) set(handles.togglebutton1,'Value',0); global isworking; global image_m; global image_original; global pathname; isworking =1; % This calls a file-open dialog and runs the beam profiler on the choosen % file if get(handles.radiobutton4,'Value') set(handles.togglebutton1,'Value',1); set(handles.togglebutton1,'BackgroundColor','Red'); set(handles.togglebutton1,'String','STOP'); drawnow; if ~isstr(pathname) % undefined variables are 0 pathname = 'Z:\beam_profier images'; end; [filename, pathname, filterindex] = uigetfile( ... { '*.png','PNG-files (*.png)';},'DefaultName',pathname); if isequal(filename,0) else img=imread(fullfile(pathname,filename)); image_m=double(img); image_original=image_m; display_stuff(handles); end; set(handles.radiobutton4,'Value',0); set(handles.togglebutton1,'BackgroundColor','Green'); set(handles.togglebutton1,'Value',0); set(handles.togglebutton1,'String','START'); end; isworking =0; % Executes when we press Clean button % --- Executes on button press in pushbutton10. function pushbutton10_Callback(hObject, eventdata, handles) % hObject handle to pushbutton10 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global isworking; global image_m; global image_cleaned; if (isworking == 1) else isworking = 1; set(handles.pushbutton10,'String','Working'); %read the attenuation from the GUI filter = str2num(get(handles.edit4,'String')); radius = str2num(get(handles.edit5,'String')); %clean the image with the stripe eraser [image_cleaned,~]=stripeeraser(image_m,radius,filter); image_cleaned=abs(image_cleaned); image_m=image_cleaned; display_stuff(handles); set(handles.pushbutton10,'String','Clean'); set(handles.radiobutton8,'Value',1); end; isworking = 0; % Executes when we press Fit button % --- Executes on button press in pushbutton8. function pushbutton8_Callback(hObject, eventdata, handles) % hObject handle to pushbutton8 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global isworking; global image_m; global background_m; global image_fitted; if (isworking == 1) else isworking = 1; set(handles.pushbutton8,'String','Working'); axes(handles.original_image); [x,y] = ginput(1); cx = x(1); cy = y(1); % If we need to substract the background, we do it % background_m is a global variable if get(handles.togglebutton2,'Value') > 0 m = image_m - background_m; else m = image_m; end; % Read the tolerance value from the GUI tol = str2num(get(handles.edit1,'String')); % Here we do our fit. Output is a vector with gauss parameters p = fitgaussian2D(m,cx,cy,tol); % Parameters we got cx = p(1); cy = p(2); wx = p(3); wy = p(4); amp = p(5); theta = p(6); background=p(7); % Display them into the table in GUI set(handles.uitable1,'Data',p') % This is for drawing fitted gaussian [sizey sizex] = size(m); [x,y] = meshgrid(1:sizex,1:sizey); % This takes parameters 'p' and produces fit array (same size as initial 'm' array) fit = Gaussian2D(p,x,y); % Now we want to draw sections of our gaussians % If we have some wierd image and the center is outside of arrays, we do crossections on the closest border % Need it because there will be an error if we try to acces some data that is not in our arrays tcx = round(cx); if isnan(tcx) > 0 tcx = sizex/2; end; if round(cx) > sizex tcx = sizex; end; if round(cx) < 1 tcx = 1; end; tcy = round(cy); if isnan(tcy) > 0 tcy = sizey/2; end; if round(cy) > sizey tcy = sizey; end; if round(cy) < 1 tcy = 1; end; % Here we draw crossections hold off; axes(handles.ysection); h = plot(m(:,tcx)); hold on; set(h,'Color','red','LineWidth',2); h = plot(fit(:,tcx)); set(h,'Color','blue','LineWidth',2); hold off; axes(handles.xsection); h = plot(m(tcy,:)); set(h,'Color','red','LineWidth',2); hold on; h = plot(fit(tcy,:)); set(h,'Color','blue','LineWidth',2); hold off; %Here we plot the ideal fitted image for x=1:sizex for y=1:sizey Xn = (x-cx)*cos(theta) - (y-cy)*sin(theta); Yn = (x-cx)*sin(theta) + (y-cy)*cos(theta); image_fitted(y,x) = amp*(exp(-2*((Xn).^2./(wx^2)+(Yn).^2./(wy^2)))) + background; end; end; set(handles.pushbutton8,'String','Fit'); end; isworking = 0; %background substraction %here we only toggle on/off % --- Executes on button press in togglebutton2. function togglebutton2_Callback(hObject, eventdata, handles) % hObject handle to togglebutton2 (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 togglebutton2 if get(handles.togglebutton2,'Value') > 0 set(handles.togglebutton2,'String','ON'); else set(handles.togglebutton2,'String','OFF'); end; %image saving % --- Executes on button press in pushbutton3. function pushbutton3_Callback(hObject, eventdata, handles) % hObject handle to pushbutton3 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global image_name; global image_m; %fname_to_save = horzcat(pwd,filesep,'saved_images',filesep,datestr(now, 'yyyy_mm_dd_HHMMSS'),'.png'); fname_to_save = horzcat('Z:\beam_profier images',filesep,datestr(now, 'yyyy_mm_dd_HHMMSS'),'.png'); set(handles.text12,'String',horzcat('Image saved to: ',fname_to_save)); image_to_save=uint16(image_m); imwrite(image_to_save,fname_to_save,'png','bitdepth',16); % This executes when we want to grab the background from the camera % --- Executes on button press in pushbutton4. function pushbutton4_Callback(hObject, eventdata, handles) % hObject handle to pushbutton4 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global background_m; global image_m; global isworking; isworking =1; grabimage(handles); background_m = image_m; axes(handles.axes6); imagesc(background_m); set(handles.axes6,'PlotBoxAspectRatio',[4 3 1],'DataAspectRatio',[1 1 1],'YTick',[],'XTick',[]); drawnow; isworking =0; % This executes when we want to choose the background from a file % --- Executes on button press in pushbutton5. function pushbutton5_Callback(hObject, eventdata, handles) % hObject handle to pushbutton5 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global background_m; [filename, pathname, filterindex] = uigetfile( ... { '*.png','PNG-files (*.png)';}); if isequal(filename,0) else img=imread(fullfile(pathname,filename)); background_m = double(img); axes(handles.axes6); imagesc(background_m); set(handles.axes6,'PlotBoxAspectRatio',[4 3 1],'DataAspectRatio',[1 1 1],'YTick',[],'XTick',[]); drawnow; end; % --- Executes during object creation, after setting all properties. function figure1_CreateFcn(hObject, eventdata, handles) % hObject handle to figure1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % Add the current directory to the path, as the pwd might change thru' the % gui. Remove the directory from the path when gui is closed % (See figure1_DeleteFcn) setappdata(hObject, 'StartPath', pwd); addpath(pwd); % --- Executes during object deletion, before destroying properties. function figure1_DeleteFcn(hObject, eventdata, handles) % hObject handle to figure1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Remove the directory added to the path in the figure1_CreateFcn. if isappdata(hObject, 'StartPath') rmpath(getappdata(hObject, 'StartPath')); end function edit2_Callback(hObject, eventdata, handles) % hObject handle to edit2 (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 edit2 as text % str2double(get(hObject,'String')) returns contents of edit2 as a double % --- Executes during object creation, after setting all properties. function edit2_CreateFcn(hObject, eventdata, handles) % hObject handle to edit2 (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 edit3_Callback(hObject, eventdata, handles) % hObject handle to edit3 (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 edit3 as text % str2double(get(hObject,'String')) returns contents of edit3 as a double % --- Executes during object creation, after setting all properties. function edit3_CreateFcn(hObject, eventdata, handles) % hObject handle to edit3 (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 edit1_Callback(hObject, eventdata, handles) % hObject handle to edit1 (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 edit1 as text % str2double(get(hObject,'String')) returns contents of edit1 as a double % --- Executes during object creation, after setting all properties. function edit1_CreateFcn(hObject, eventdata, handles) % hObject handle to edit1 (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 original_image_CreateFcn(hObject, eventdata, handles) % hObject handle to original_image (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 original_image % --- Executes on button press in checkbox1. function checkbox1_Callback(hObject, eventdata, handles) % hObject handle to checkbox1 (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 checkbox1 % --- Executes on button press in pushbutton7. function pushbutton7_Callback(hObject, eventdata, handles) % hObject handle to pushbutton7 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) function edit4_Callback(hObject, eventdata, handles) % hObject handle to edit4 (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 edit4 as text % str2double(get(hObject,'String')) returns contents of edit4 as a double % --- Executes during object creation, after setting all properties. function edit4_CreateFcn(hObject, eventdata, handles) % hObject handle to edit4 (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 edit5_Callback(hObject, eventdata, handles) % hObject handle to edit5 (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 edit5 as text % str2double(get(hObject,'String')) returns contents of edit5 as a double % --- Executes during object creation, after setting all properties. function edit5_CreateFcn(hObject, eventdata, handles) % hObject handle to edit5 (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 % --- If Enable == 'on', executes on mouse press in 5 pixel border. % --- Otherwise, executes on mouse press in 5 pixel border or over radiobutton4. function radiobutton4_ButtonDownFcn(hObject, eventdata, handles) % hObject handle to radiobutton4 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % -------------------------------------------------------------------- function uipanel1_ButtonDownFcn(hObject, eventdata, handles) % hObject handle to uipanel1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % --- Executes during object creation, after setting all properties. function uipanel4_CreateFcn(hObject, eventdata, handles) % hObject handle to uipanel4 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcns called % --- Executes when selected object is changed in uipanel4. function uipanel4_SelectionChangeFcn(hObject, eventdata, handles) % hObject handle to the selected object in uipanel4 % eventdata structure with the following fields (see UIBUTTONGROUP) % EventName: string 'SelectionChanged' (read only) % OldValue: handle of the previously selected object or empty if none was selected % NewValue: handle of the currently selected object % handles structure with handles and user data (see GUIDATA) global image_m; global image_original; global image_cleaned; global image_fitted; if get(handles.radiobutton7,'Value') image_m=image_original; display_stuff(handles); else if get(handles.radiobutton8,'Value') if image_cleaned == 0 set(handles.radiobutton7,'Value',1); else image_m=image_cleaned; display_stuff(handles); end; else if get(handles.radiobutton9,'Value') if image_fitted == 0 set(handles.radiobutton7,'Value',1); image_m=image_original; display_stuff(handles); else image_m=image_fitted; display_stuff(handles); end; end; end; end;