From d1d7a486cc70665dafe64aaddd44c58e228815b0 Mon Sep 17 00:00:00 2001 From: Mi Zhang Date: Tue, 11 Sep 2012 16:03:41 -0400 Subject: initial commit --- gui_win.m | 739 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 739 insertions(+) create mode 100644 gui_win.m (limited to 'gui_win.m') diff --git a/gui_win.m b/gui_win.m new file mode 100644 index 0000000..e35a26a --- /dev/null +++ b/gui_win.m @@ -0,0 +1,739 @@ +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 10-Sep-2012 11:34: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) +global image_m; +global image_original; +global image_cleaned; +global image_fitted; +if get(handles.radiobutton4,'Value') + image_m=image_original; + display_stuff(handles); +end; +if get(handles.radiobutton8,'Value') + image_m=image_cleaned; + display_stuff(handles); +end; +if get(handles.radiobutton9,'Value') + image_m=image_fitted; + display_stuff(handles); +end; -- cgit v1.2.3