%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
% MAIN Schwerpunkt Programm
%
% David Tiefenthaler
%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



%% Ascii-File der LumiCam einlesen
M_Input = load_ascii_alt;                 %M_Ascii=Matrix der Leuchtidchtewerte aus dem Ascii-File der LumiCam
figure,imagesc(M_Input);
    %imshow(M_Input);
    title('Graubild');
    axis on;
    grid on;
    colorbar;
    

%% ###################################################################################################################
% Erkennung der Lichtelemente in der LumiCam-Aufnahme
[ CA_Objekt,background_th ] = object_detection( M_Input );    %Rückgabe der detektierten Lichtelemente im Cell-Array CA_Objekt
anzahl_objekte = size(CA_Objekt,1);    %Ermittelt die Anzahl der Objekte im Cell-Array CA_Objekte
% ####################################################################################################################

CA_schwerpunkte = cell(anzahl_objekte,5);   %Erstellt eine Matrix (schwerpunkte) aus "0" mit S_geo_x, S_geo_y, S_pho_x, S_pho_y, GK8

%% Schwerpunkt wird für jedes Objekt (jedes Element in CA_Objekt) ermittelt
for n = 1:anzahl_objekte
        
        % Werte kleiner Schwelle werden NaN gesetzt
        M_NaN = unter_sehschwelle_NaN(CA_Objekt{n,1},background_th);


        % Abgleich d. Schwerpunkte der vollständigen Leuchdichteaufnahme
            % Geometrischer Schwerpunkt
%             von_zeile = 1;
%             bis_zeile = 1000;
%             von_spalte = 1;
%             bis_spalte = 1280;
            von_zeile = 1;
            bis_zeile = size(CA_Objekt{n,1},1);
            von_spalte = 1;
            bis_spalte = size(CA_Objekt{n,1},2);
            [ S_geo_x,S_geo_y ] = S_geo_xy( M_NaN,von_zeile,bis_zeile,von_spalte,bis_spalte );
            % Photometrischer Schwerpunkt
            [ S_pho_x,S_pho_y ] = S_pho_xy( M_NaN,von_zeile,bis_zeile,von_spalte,bis_spalte );
            %getrennte Bestimmung der Abweichungen der jeweiligen Schwerpunkte
            delta_S_x = S_pho_x - S_geo_x;
            delta_S_y = S_pho_y - S_geo_y;
            %Bestimmung von GK8
            delta_x = bis_spalte - von_spalte;  %Ausdehnung der Fläche in x-Richtung
            delta_y = bis_zeile - von_zeile;  %Ausdehnung der Fläche in y-Richtung
            GK8 = sqrt((delta_S_x/delta_x)^2 + (delta_S_y/delta_y)^2);

%         % Abgleich d. Schwerpunkte nur über Lichtelement (es wird hier nur ein Teil
%         % des Lichtelements genommen aufgrund der leicht bogenförmigen Geometrie
%             % Geometrischer Schwerpunkt
%             von_zeile = 192;
%             bis_zeile = 200;
%             von_spalte = 1;
%             bis_spalte = 170;
%             [ S_geo_x_2,S_geo_y_2 ] = S_geo_xy( M_NaN,von_zeile,bis_zeile,von_spalte,bis_spalte );
%             % Photometrischer Schwerpunkt
%             [ S_pho_x_2,S_pho_y_2 ] = S_pho_xy( M_NaN,von_zeile,bis_zeile,von_spalte,bis_spalte );
%             %getrennte Bestimmung der Abweichungen der jeweiligen Schwerpunkte
%             delta_S_x = S_pho_x_2 - S_geo_x_2;
%             delta_S_y = S_pho_y_2 - S_geo_y_2;
%             %Bestimmung von GK8
%             delta_x = bis_spalte - von_spalte;  %Ausdehnung der Fläche in x-Richtung
%             delta_y = bis_zeile - von_zeile;  %Ausdehnung der Fläche in y-Richtung
%             GK8_2 = sqrt((delta_S_x/delta_x)^2 + (delta_S_y/delta_y)^2);


        % Schreibt die Parameter S_geo_x/y,S_pho_x/y und GK8 (Spalten von
        % CA_Scherpunkt) für jedes Objekt (Zeilen) in CA_Schwerpunkt
        CA_schwerpunkte{n,1} = S_geo_x;
        CA_schwerpunkte{n,2} = S_geo_y;
        CA_schwerpunkte{n,3} = S_pho_x;
        CA_schwerpunkte{n,4} = S_pho_y;
        CA_schwerpunkte{n,5} = GK8;

  
        % Darstellung der Ergenisse der Gradienten der 4 Matrizen
        figure(CA_Objekt{n,2});
            hold on
            % Geometrischer Schwerpunkt mit Beschriftung
            plot(S_geo_x,S_geo_y,'.','LineWidth',2,'MarkerSize',20,'MarkerEdgeColor','r','MarkerFaceColor','r');
            text_S_geo = text(S_geo_x + 15,S_geo_y,'S_g_e_o','FontSize',15,'Color','r');
            % Photometrischer Schwerpunkt mit Beschriftung
            plot(S_pho_x,S_pho_y,'.','LineWidth',2,'MarkerSize',20,'MarkerEdgeColor','r','MarkerFaceColor','r');
            text_S_pho = text(S_pho_x + 15,S_pho_y,'S_p_h_o','FontSize',15,'Color','r');
            % Linie zwischen den Beiden Punkten mit GK8 also Beschrigtung
            line([S_geo_x,S_pho_x],[S_geo_y,S_pho_y],'LineWidth',2,'Color','r');
            x_line = S_geo_x + 0.5 + (S_geo_x - S_pho_x); 
            y_line = S_geo_y + 0.5 + (S_geo_y - S_pho_y);
%             x_line = [S_geo_x,S_geo_y] + 0.5 * ([S_geo_x,S_geo_y] - [S_geo_x,S_geo_y]);     %Mittelpunkt der Verbindungslinie
            text_S_line = text(x_line,y_line,'Text für GK8','FontSize',15,'Color','r');
            hold off
        
end

