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

Interpolation zwischen zwei Werten

 

.seb
Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 05.05.11
Wohnort: Neubrandenburg
Version: 7.7.0 (R2008b)
     Beitrag Verfasst am: 06.05.2011, 12:11     Titel: Interpolation zwischen zwei Werten
  Antworten mit Zitat      
Hallo,

habe folgendes Problem:

Ich habe 2 Datensätze, die als 73x73 Matrizen gespeichert sind. Wir nennen sie data1 und data2.
Nun soll zwischen den Werten interpoliert werden, gespeichert in mehreren Datensätzen (als Annäherung könnte man jetzt erstmal 2 Datensätze nehmen).
Da man nur eindimensionale Daten hat, nämlich die Daten aus data1 und data2, tue mich mit der Interpolation ein bisschen schwer.

Code:

>> [data1(1,1) data2(1,1)]
ans =
  1.0e+010 *
    1.1066    1.1073
 


Die Interpolation genau in der Mitte wäre 1.1070e10. Das wäre ein Wert eines Beispieldatensatzes.


Wie stelle ich es an, dass ich diese interpolierten Datensätze erhalte ?


Grüße

Sebastian
Private Nachricht senden Benutzer-Profile anzeigen


Ajax
Forum-Century

Forum-Century


Beiträge: 176
Anmeldedatum: 09.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.05.2011, 12:37     Titel:
  Antworten mit Zitat      
Der Begriff "Interpolation" lässt hier ein bißchen Spielraum. Willst du einfach nur den Punkt zwischen deinen gegebenen Datenpunkten ermitteln, also einfach nur den Mittelwert oder soll eine lineare Interpolation stattfinden und du möchtest mehrere Werte berechnen? Für "richtige" Interpolationen z.B. kubisch oder mit Splines bräuchtest du mehr als nur zwei Werte...
Private Nachricht senden Benutzer-Profile anzeigen
 
.seb
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 05.05.11
Wohnort: Neubrandenburg
Version: 7.7.0 (R2008b)
     Beitrag Verfasst am: 06.05.2011, 13:13     Titel:
  Antworten mit Zitat      
Ajax hat Folgendes geschrieben:
Der Begriff "Interpolation" lässt hier ein bißchen Spielraum. Willst du einfach nur den Punkt zwischen deinen gegebenen Datenpunkten ermitteln, also einfach nur den Mittelwert oder soll eine lineare Interpolation stattfinden und du möchtest mehrere Werte berechnen? Für "richtige" Interpolationen z.B. kubisch oder mit Splines bräuchtest du mehr als nur zwei Werte...


Nun ich habe jetzt folgendes hingebekommen:

Code:


x = [data1(1,1) data2(1,1)];
y = x;
xi = linspace(data1(1,1),data2(1,1),3);

datai = interp1(x,y,xi);

 



Das wäre im einfachsten Fall der Mittelwert dieser Datensätze. Möchte mehr Zwischenwerte muss ich den Wert bei linspace erhöhen.
Wie bekomme ich es hin, dass er mir meinetwegen 3 Datensätze ermittelt aus der linearen Interpolation?
Private Nachricht senden Benutzer-Profile anzeigen
 
.seb
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 05.05.11
Wohnort: Neubrandenburg
Version: 7.7.0 (R2008b)
     Beitrag Verfasst am: 06.05.2011, 16:14     Titel:
  Antworten mit Zitat      
Hallo,

habe die Interpolation soweit hingekriegt. Hier die einfache Lösung:

Code:

 xi = linspace(data1(k,l),data2(k,l),nr_of_layers);
            temp(k,l,n) =  xi(h);
 


Das ist jetzt aus dem Kontext heraus schwierig nachzuvollziehen. Nr_of_layers sind quasi die Anzahl der Datensätze und temp die dreidimensionalen Schichten.


Grüße

Sebastian
Private Nachricht senden Benutzer-Profile anzeigen
 
.seb
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 05.05.11
Wohnort: Neubrandenburg
Version: 7.7.0 (R2008b)
     Beitrag Verfasst am: 07.05.2011, 23:03     Titel:
  Antworten mit Zitat      
Hallo,

damit ich die Interpolation möglichst weich hinbekomme, möchte ich auf die lineare Interpolation verzichten und kubisch u.ä. interpolieren.

Habt ihr Hinweise, wie man eine andere Interpolation zwischen zwei Werten realisieren kann ?

Danke.



Grüße

Sebastian
Private Nachricht senden Benutzer-Profile anzeigen
 
.seb
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 05.05.11
Wohnort: Neubrandenburg
Version: 7.7.0 (R2008b)
     Beitrag Verfasst am: 08.05.2011, 19:08     Titel: als Ergänzung
  Antworten mit Zitat      
Also ich beschreibe mal den technischen Hintergrund dieses ganzen Vorhabens:

Ich habe meinetwegen zwei Bildern A und B, mit jeweils Farbwerten einer Matrix A und B.
Als erste Vereinfachung nehmen wir an, dass wir gerne das Bild haben möchten, was genau der Mitte der Farbwerte der Bildmatrizen entspricht. Das wäre die lineare Interpolation zwischen den Farbwerten eines Pixel der beiden Matrizen (und dann später auf die ganze Matrix bzw. Pixeln bezogen...).
Nun erhalte ich als drittes Bild C, eine Matrix mit den gemittelten Farbwerten von A und B. Soweit ganz gut.

Jetzt habe ich vor, dass ich genau dieses 3. Bild "smoothe", also weichere Farbwerte mathematisch modelliere. Somit würden ich den Eindruck der Interpolation verstärken. Bisher fehlt mir die Idee bzw. der Algorithmus für dieses Vorhaben.
Private Nachricht senden Benutzer-Profile anzeigen
 
.seb
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 05.05.11
Wohnort: Neubrandenburg
Version: 7.7.0 (R2008b)
     Beitrag Verfasst am: 08.05.2011, 21:24     Titel:
  Antworten mit Zitat      
Gut, also ich habe jetzt herausgefunden, dass man mit der filter2-Funktion (in der Image Processing Toolbox) mittels gaussian-Filter die Bildmatrix C glätten kann.

Code:

filter_name = fspecial('gaussian');
temp(:,:,n) = filter2(filter_name,temp(:,:,n));

 


Das Ergebnis ist ein leicht weichgezeichnetes Bild. Da die Auflösung sehr gering ist (72x72) bleiben die einzelnen Pixel trotzdem sichtbar, da man das kleine Bild auf größerer Fläche darstellt.

Wenn jemand noch etwas besseres kennt, gerne hier posten!


Grüße

Sebastian[/code]
Private Nachricht senden Benutzer-Profile anzeigen
 
.seb
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 31
Anmeldedatum: 05.05.11
Wohnort: Neubrandenburg
Version: 7.7.0 (R2008b)
     Beitrag Verfasst am: 08.05.2011, 22:45     Titel:
  Antworten mit Zitat      
So Leute,

ich habe eine Resampling-Funktion gefunden, die mir die Bilder hochskaliert.
Sie nennt sich imresample und funktioniert wunderbar.
Dadurch erhalte ich geglättete Bilder ohne zusätzliche Toolbox oder Ähnlichen.

Code:

 temp_new(:,:,n) = imresample([1,1],temp(:,:,n),[0.33,0.33],'spline');
 
[/code]
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.