function varargout = BA(varargin)
% BA M-file for BA.fig
%      BA, by itself, creates a new BA or raises the existing
%      singleton*.
%
%      H = BA returns the handle to a new BA or the handle to
%      the existing singleton*.
%
%      BA('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in BA.M with the given input arguments.
%
%      BA('Property','Value',...) creates a new BA or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before BA_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to BA_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 BA

% Last Modified by GUIDE v2.5 25-May-2012 21:03:16

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @BA_OpeningFcn, ...
                   'gui_OutputFcn',  @BA_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 BA is made visible.
function BA_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 BA (see VARARGIN)

% Choose default command line output for BA
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes BA wait for user response (see UIRESUME)
% uiwait(handles.figure1);


% --- Outputs from this function are returned to the command line.
function varargout = BA_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 loadimg.
function loadimg_Callback(hObject, eventdata, handles)
% hObject    handle to loadimg (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% Bilder aus Ordner einlesen
fpath=['/home/schuengel/Desktop/Bilder/'];
textlist=dir([fpath '*.tif']); % Speichern der Namen aller tif's

picture = cell(1,length(textlist));
%in img werden alle Bilder aus dem Ordner Bilder gespeichert
for k=1:length(textlist)
    img=imread([fpath textlist(k).name]);
	picture{k} = img;
    % ... und dann einfach mit picture{k} weiterarbeiten
end 
img = picture{1};
[n,m] = size(img);
setappdata(handles.loadimg,'n',n);
setappdata(handles.loadimg,'m',m);
setappdata(handles.loadimg,'picture',picture);


        


% --- 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)
n = getappdata(handles.loadimg,'n');
m = getappdata(handles.loadimg,'m');
picture = getappdata(handles.loadimg,'picture');

switch get(hObject,'Tag')
    case 'Algo1'
        % Min-/Max
        C=nan(n,m,9);	

        for k = 1:9 
            C(:,:,k) = picture{k}; 
        end

        M = cell(1,m);
        for l=1:m
           b(:,:,l)=reshape(C(:,l,:),n,9);
            M{l} = b(:,:,l);
        end

        x = cell(1,m); 
        y = cell(1,m); 
        for h = 1:m
            x{h} = (max(M{h}'))';
            y{h} = (min(M{h}'))';
        end	
        c = [x{:}];	% matrix die alle maximas enthält
        g = [y{:}]; % matrix die alle minimas enthält


        % finalMatrix = Min-Max
        finalMatrix = g-c;
        setappdata(handles.Algo1, 'finalMatrix', finalMatrix);
    case 'Algo2'
        % Fourier
        C=nan(n,m,9);
        for k = 1:9  
             C(:,:,k) = fft(picture{k}); 
        end

        S = 0;
        for l = 1:9
            S = S + C(:,:,l);
        end

        newimg = ifft(S);
        realImg = real(newimg);
        setappdata(handles.Algo2,'realImg', realImg);
end




% --- Executes on button press in run.
function run_Callback(hObject, eventdata, handles)
% hObject    handle to run (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
%n=getappdata(handles.loadimg,'n')
%n;
realImg = getappdata(handles.Algo2, 'realImg');
finalMatrix = getappdata(handles.Algo1, 'finalMatrix');

if 'Algo1'
    a = imagesc(finalMatrix);
    setappdata(handles.run, 'a', a);
    set(handles.text1, 'String', 'Min-/Max-Algorithmus');
else 'Algo2'
     b = imagesc(realImg, [9 1383]);
    setappdata(handles.run, 'b', b);
    set(handles.text1, 'String', 'Fourier-Algorithmus');
end
    

% --- Executes during object creation, after setting all properties.
function axes2_CreateFcn(hObject, eventdata, handles)
% hObject    handle to axes2 (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 axes2
if 'Algo1'
    a = getappdata(handles.run,'a')
    %colormap(gray)
else 'Algo2'
    b = getappdata(handles.run, 'b')
    %colormap(gray)
end
    









