WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Daten Interpoliren

 

Muecke82
Forum-Century

Forum-Century



Beiträge: 100
Anmeldedatum: 10.06.13
Wohnort: Großraum Stuttgart
Version: GNU Octave V.7.1.0
     Beitrag Verfasst am: 12.01.2015, 01:49     Titel: Daten Interpoliren
  Antworten mit Zitat      
Hallo miteinander,

ich habe eine Lichtschnitt Bild (Höhenangaben) in einer CSV.

Dank euch Lesse ich alle X Y und Z werte aus, bereite die auf und *was für ein Wunder* sie werden sogar angezeigt.

Jedoch habe ich das Problem das beim Aufnehmen immer wider kleine teile nicht sichtbar sind für die Kamera und dort fehlen dann Höhenangaben (Z Werte) die X und Y Werte sind immer !! vollständig.

Jetzt habe ich mir überlegt das ich die Z Werte ja interpolieren lassen kann "Linear"
dafür habe ich das hier gefunden: https://nf.nci.org.au/facilities/so...../techdoc/ref/interp1.html

Alle meine Daten X Y Z sind so aufbereitet das ich sie direkt anzeigen lassen kann.

ich habe das so verstanden:
Code:
Zi = interp1(y,Z,xi,method)

y sind meine echten Y Werte die ich alle habe
Z sind die werte die ich habe mit den darin enthaltenen NaN
xi sind die y Werte an dannen bei den Y Werten ein NaN steht?

ist das soweit Richtig?
und in Zi bekomme ich dann alle Werte zurück also die vollständige Matrix von Z nur das da keine NaN mehr drin sind.

Jetzt ist nur die Frage wie komme ich an die NaN in den Z Werten, ...
darüber zerbreche ich mir den Kopf wenn das was ich mir da zusammen geschustert habe Stimmt.






das ist mein bisheriger Code:
Code:
% Autor: Winkow
% Datum: 11.01.15
% Forum: http://www.gomatlab.de/x-y-z-mit-su.....tellen-t36195.html#144132

%% Datei Öffnen
    fileID = fopen('CSV/replay.csv');
    Y_Anzahl = 679;    

%% Koordinaten auslesen & Aufbereiten    
    % Y - Auslesen
        formatSpec_y  = [repmat('%*s ', 1, 9),...
                         repmat('%f ', 1, Y_Anzahl)];
        textscan(fileID, '%[^\n\r]', 11);
        dataArray = textscan(fileID, formatSpec_y, 1, 'Delimiter', ',');
        Y = [dataArray{1:end}];

    % X & Z Auslesne
        formatSpec_x_z  = [repmat('%f ', 1, 1),...
                           repmat('%*s ', 1, 8),...
                           repmat('%f ', 1, Y_Anzahl)];
        data_x_z        = textscan(fileID, formatSpec_x_z,...
                                  'Headerlines', 0, 'Delimiter', ',');
        Samlung_x_z     = cell2mat(data_x_z);
        X = Samlung_x_z(1:end,1);
        Z = Samlung_x_z(1:end, 2:end)'; % transponieren eingefügt

    % Koordinaten aufbereiten
        [X1,Y1]=meshgrid(X,Y); % Daten verfilfeltigen so das sie angezeigt werden können
       
%% Datei Schließen
    fclose(fileID);
       

%% Berechnungen !!!!
    % Interpoliren der Fehlenden Daten   (Lineare Interpolation)
        % ????
    % Daten Strucktur Glätten
        % ???
    % Steilwände "Oberkannte"
        % ???
    % Kuhle mitte
        % ???

%% Visualisirung
    % fullscreen figure
        figure('units','normalized','outerposition',[0 0 1 1]);

    % ausschnitt plotten
        Schnitt1 = 0   + 100;    % zwischen 1 und 679       Links Rechts
        Schnitt2 = 679 - 100;    % zwischen 1 und 679       Links Rechts
        Schnitt3 = 1600;         % zwischen 1 und 10895     Laufrichtung
        Schnitt4 = 2600;         % zwischen 1 und 10895     Laufrichtung


    %     surf(X1(Schnitt1:Schnitt2,Schnitt3:Schnitt4),...
    %          Y1(Schnitt1:Schnitt2,Schnitt3:Schnitt4),...
    %           Z(Schnitt1:Schnitt2,Schnitt3:Schnitt4))


        mesh(X1(Schnitt1:Schnitt2,Schnitt3:Schnitt4),...
             Y1(Schnitt1:Schnitt2,Schnitt3:Schnitt4),...
             Z(Schnitt1:Schnitt2,Schnitt3:Schnitt4),...
             'EdgeAlpha',0.4,'FaceAlpha',0.4)
        colormap('Gray') % colormap('bone')   % Original

        view(94,58)      % view(20,50)        % Original
        hold all

    % punkt makieren
    %     indx=150;
    %     indy=600;
    %     plot3(X1(indx,indy),...
    %           Y1(indx,indy),...
    %           Z(indx,indy),...
    %           'markersize',20,'color','red','marker','*','LineWidth',3)

    % labels
        xlabel('X-Achse');
        ylabel('Y-Achse');
        zlabel('Z-Achse');  

%% Info ausgeben
    disp('Programm Ende');

Da ich die dazugehörige Datei schon Öffner gepostet habe << Hier >> der Link zu einem Beitrag an dem sie dran hängt. es ist die Musterdatei.
_________________

--
Anfänger, habe noch nie mit so was gearbeitet.
bitte um Verständnis.
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 12.01.2015, 12:32     Titel:
  Antworten mit Zitat      
guck mal in den thread.
vieleicht hilft der dir
http://www.gomatlab.de/2d-interpolation-mit-nan-t32315.html
das würde dann so aussehen
Code:
Z1=griddata(X1(~isnan(Z)),Y1(~isnan(Z)),Z(~isnan(Z)),X1,Y1);
        mesh(X1(Schnitt1:Schnitt2,Schnitt3:Schnitt4),...
             Y1(Schnitt1:Schnitt2,Schnitt3:Schnitt4),...
             Z1(Schnitt1:Schnitt2,Schnitt3:Schnitt4),...
             'EdgeAlpha',0.4,'FaceAlpha',0.4)

_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Muecke82
Themenstarter

Forum-Century

Forum-Century



Beiträge: 100
Anmeldedatum: 10.06.13
Wohnort: Großraum Stuttgart
Version: GNU Octave V.7.1.0
     Beitrag Verfasst am: 12.01.2015, 13:25     Titel:
  Antworten mit Zitat      
Wow,

Das ist ja mal Cool, doch das ist auch Sehr Rechen aufwendig,

Wahrscheinlich ist es Besser wenn ich mir eine Datei mache, und die CSV Vorzubereiten.

nur X Y Z auslesen dann die Z Daten Interpoliere
und die kompletten Daten dann in eine neue CSV Speichere
so das ich es sehr leicht und Ohne große Rechnerei
im Programm Visualisierung aufrufen kann.

dann muss ich nicht jedes mal wenn das Programm gestartet wird erst die Daten aufbereiten, und Spare mir Rechenzeit Smile

Spontan dachte ich da jetzt an 3 Dateien
replay_Aufbereitet_X.csv
replay_Aufbereitet_Y.csv
replay_Aufbereitet_Z.csv

Oder denke ich gerade Falsch?
_________________

--
Anfänger, habe noch nie mit so was gearbeitet.
bitte um Verständnis.
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 12.01.2015, 13:31     Titel:
  Antworten mit Zitat      
Muecke82 hat Folgendes geschrieben:


dann muss ich nicht jedes mal wenn das Programm gestartet wird erst die Daten aufbereiten, und Spare mir Rechenzeit Smile

Spontan dachte ich da jetzt an 3 Dateien
replay_Aufbereitet_X.csv
replay_Aufbereitet_Y.csv
replay_Aufbereitet_Z.csv

Oder denke ich gerade Falsch?

so viel ist da garnicht zu machen. das meiste hast du ja schon. griddata ist einfach etwas zur 2d interpolation. und recht einfach zu verstehen. der rest ist logisches indizieren
das ist auch leicht zu verstehen und sollte sowieso gelernt werden wenn man mit matlab arbeiten will. das solltest du dir also eh angucken.
und du kannst auch einfach die daten einmal aufarbeiten und dann als mat datei speichern. bei jedem script aufruf überprüfst du dann einfach ob die mat datei schon vorhanden ist und wenn ja lädst du die anstatt die csv datei. das ist jedenfalls einfacher als die csv daten manuell aufzuarbeiten.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Muecke82
Themenstarter

Forum-Century

Forum-Century



Beiträge: 100
Anmeldedatum: 10.06.13
Wohnort: Großraum Stuttgart
Version: GNU Octave V.7.1.0
     Beitrag Verfasst am: 12.01.2015, 16:54     Titel:
  Antworten mit Zitat      
Ok das Speichern in eine mat Datei klappt das ist genial Smile
und das Laden auch Smile

Danke.

frage:
kann man das Kürzer schreiben?

Code:
        Schnitt1 = 0   + 100;    % zwischen 1 und 679       Links Rechts
        Schnitt2 = 679 - 100;    % zwischen 1 und 679       Links Rechts
        Schnitt3 = 1600;         % zwischen 1 und 10895     Laufrichtung
        Schnitt4 = 2600;         % zwischen 1 und 10895     Laufrichtung

    mesh(X1(Schnitt1:Schnitt2,Schnitt3:Schnitt4),...
              Y1(Schnitt1:Schnitt2,Schnitt3:Schnitt4),...
              Z(Schnitt1:Schnitt2,Schnitt3:Schnitt4),...
              'EdgeAlpha',0.4,'FaceAlpha',0.4)


ich dachte vielleicht so:


Code:
Schnitt1 = ( 100:   579);
Schnitt2 = (1600: 2600);
    mesh(X1(Schnitt1,Schnitt2),...
              Y1(Schnitt1,Schnitt2),...
              Z(Schnitt1,Schnitt2),...
              'EdgeAlpha',0.4,'FaceAlpha',0.4)



ist so was Möglich?
wie würde man so was nennen? das ich danach suchen kann?
_________________

--
Anfänger, habe noch nie mit so was gearbeitet.
bitte um Verständnis.
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 12.01.2015, 17:02     Titel:
  Antworten mit Zitat      
was klappt den an deiner lösung nicht ?
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Muecke82
Themenstarter

Forum-Century

Forum-Century



Beiträge: 100
Anmeldedatum: 10.06.13
Wohnort: Großraum Stuttgart
Version: GNU Octave V.7.1.0
     Beitrag Verfasst am: 12.01.2015, 17:06     Titel:
  Antworten mit Zitat      
Winkow hat Folgendes geschrieben:
was klappt den an deiner lösung nicht ?


so gehe erst mal ein Runde in den Keller mich ins Eck stellen und schämen,
also ich das heute Nacht ausprobiert hatte hatte das nicht geklappt, daher hatte ich das auch nicht gespeichert, und jetzt hier im Forum noch mal neu geschrieben.

aber ich gehe jetzt mal in den Nassen und feuchten Keller ins Eck, ...

arrrr......
_________________

--
Anfänger, habe noch nie mit so was gearbeitet.
bitte um Verständnis.
Private Nachricht senden Benutzer-Profile anzeigen
 
Muecke82
Themenstarter

Forum-Century

Forum-Century



Beiträge: 100
Anmeldedatum: 10.06.13
Wohnort: Großraum Stuttgart
Version: GNU Octave V.7.1.0
     Beitrag Verfasst am: 12.01.2015, 17:47     Titel:
  Antworten mit Zitat      
damit Ihr nicht meint das ich faul im Keller herum stehe im Eck auch wenn es Kalt nass und Dunkel ist, habe ich etwas weiter gemacht Smile

Möchte nur mal mein Fortschritt Demonstrieren Smile

Datei: "replay_Matrlab.m"
Code:
% Autor: Mücke
% Datum: 12.01.2015
%

%% Daten Laden

    % Prüfen ob replay.mat existirt
        if(exist('replay/replay.mat'))                                    % Prüfen ob replay.mat existirt
            load('replay/replay.mat');                                     % X Y Z Koordinaten laden
        else
            if(exist('replay/replay.csv'))                                 % Prüfen ob replay.csv existirt
                disp('Die Datei "replay.csv" wird eingelesen');            % Text ausgabe              
                run('replay_einlesen');                                    % Datei "replay_einlesen.m" ausführen
                disp('Daten wurden interpolirt und gespeichert');          % Text ausgabe
                disp('Programm wurde Beendet');                            % Text ausgabe
                return                                                     % programm Beenden
            else
                disp('Die Datei "replay.csv" kann nicht gefunden werden'); % Test ausgabe
                disp('Programm wurde Beendet');                            % Text ausgabe
                return                                                     % programm Beenden
            end
        end
       
%% Daten Berechnen

    % Daten Strucktur Glätten
        % ???
    % Steilwände "Oberkannte"
        % ???
    % Kuhle mitte
        % ???
       
       
%% Daten Visualisiren

    % ausschnitt plotten
        Schnitt1 = ( 100:  579);   % 1 bis 679
        Schnitt2 = (1600: 2600);   % 1 bis 10895
       
        mesh(X1(Schnitt1, Schnitt2),...
             Y1(Schnitt1, Schnitt2),...
              Z(Schnitt1, Schnitt2),...
               'EdgeAlpha',0.4,'FaceAlpha',0.4)
         colormap('Gray')
         view(0,90)      
         hold all

%% Script Ende
        disp('Programm Ende');


Datei: "replay_einlesen.m"
Code:
% Autor: Mücke
% Datum: 12.01.2015
%

%% Datei Öffnen
        fileID = fopen('replay/replay.csv');

%% Koordinaten auslesen & Aufbereiten    
    % Y - Auslesen
        formatSpec_y  = [repmat('%*s ', 1, 9),...
                         repmat('%f ', 1, 679)];
        textscan(fileID, '%[^\n\r]', 11);
        dataArray = textscan(fileID, formatSpec_y, 1, 'Delimiter', ',');
        Y = [dataArray{1:end}];

    % X & Z Auslesne
        formatSpec_x_z  = [repmat('%f ', 1, 1),...
                           repmat('%*s ', 1, 8),...
                           repmat('%f ', 1, 679)];
        data_x_z        = textscan(fileID, formatSpec_x_z,...
                                  'Headerlines', 0, 'Delimiter', ',');
        Samlung_x_z     = cell2mat(data_x_z);
        X = Samlung_x_z(1:end,1);
        Z = Samlung_x_z(1:end, 2:end)';                                    % transponieren eingefügt

    % Koordinaten aufbereiten
        [X1,Y1]=meshgrid(X,Y);                                             % Daten verfilfeltigen
        Z1 = griddata(X1(~isnan(Z)),Y1(~isnan(Z)),Z(~isnan(Z)),X1,Y1);     % fehlende Werte Interpoliren
   
%% Koordinaten Speichern
    save('replay/replay.mat','X1', 'Y1', 'Z')
%% Datei Schließen
    fclose(fileID);



Das ist genial so.

Wenn die mat Datei nicht existiert dann prüfe ich ob die CSV da ist
wenn das der Fall ist dann Lade ich die X Y Z Daten und die Z Daten werden auch gleich Interpoliert und dann in der MAT Datei gespeichert.

jedoch lasse ich das Programm dann abbrechen, warum wies ich nicht mir gefällt das so besser.

Wenn die Datei existiert MAT dann wird der Ausschnitt angezeigt das geht dann auch wider schön schnell Smile


Danke dir schon mal. dafür.

So jetzt muss ich mich an den Rest machen.

- Z Werte etwas Glätten ( Das nehme ich in die Datei replay_einlesen.m mit rein)
- Höhe der Täler definieren
- die Mitte er Täler definieren
- Öffnung der Täler definieren

_________________

--
Anfänger, habe noch nie mit so was gearbeitet.
bitte um Verständnis.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.