interpolation < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 14:35 Mo 22.01.2007 | Autor: | A-Jay |
Hi Leute hab ne Frage:
Ich hab eine Martix von 1744 mal 180 Bildpunkten. Am oberen Bereich sind aber immer nur die ungeraden Zeilen mit Werten gefüllt die geraden sind null.
Nun möchte ich am oberen Rand von 1 bis 340 jeweis die geraden Zeilen mit den Werten der ungeraden Zeilen interpolieren.
Hab das so geregelt aber irgendwas ist nicht richtig hat jem. ne Lösung für mich?
for i = 180
xo = 1:2:340;
yo = Matrix2(1:2:340,i);
xio = 1:1:340;
xno(:,i) = interp1(xo,yo,xio);
end
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt
|
|
|
|
Hallo,
so wie ich dein Problem verstehe, dürfte das Folgende helfen:
Matrix(2:2:340, 1:size(Matrix, 2)) = interp2(1:size(Matrix, 2), 1:2:340, Matrix(1:2:340, 1:size(Matrix, 2)), 1:size(Matrix, 2), (2:2:340)');
Gruß
Martin
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 16:11 Mo 22.01.2007 | Autor: | A-Jay |
ähh ja ich hab das mal so ausprobiert aber geholfen hat mir das nicht.
vll das hier noch zur ergänzung:
meine erste Matrix (im Programm Matrix2) ist 1744 mal 180
und von der will ich eine neue Matrix (im Programm interpMatrix) berechnen, bei der die oberen Werte Interpoliert werden. Wie schon geschrieben ist das mein Programmteil der aber nicht richtig läuft:
for i = 180
xo = 1:2:340;
yo = Matrix2(1:2:340,i);
xio = 1:1:340;
xno(:,i) = interp1(xo,yo,xio);
end
interpMatrix = Matrix;
interpMatrix(1:340,:) = xno(:,:);
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 16:35 Mo 22.01.2007 | Autor: | A-Jay |
Sorry sorry geht doch aber ein problem hab ich noch:
in zeile 340 ist jetzt immernoch ne linie nicht geflüllt.
|
|
|
|
|
Hallo,
habe ich's mir doch gedacht, dass es geht. Das mit der 340 war aber mein Versehen. Ersetze in dem Aufruf jedes 340 durch 341. Dann dürfte es gehen.
Gruß
Martin
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 17:26 Mo 22.01.2007 | Autor: | A-Jay |
vielen vielen dank aber nach meiner weiteren bearbeitung meines bildes hab ich gemerkt, dass ich das von 1404 bis 1744 auch noch machen muss
hab ich das:
Matrix2(1404:2:1744, 1:size(Matrix2, 2)) = interp2(1:size(Matrix2, 2), 1403:2:1744, Matrix2(1403:2:1744, 1:size(Matrix2, 2)), 1:size(Matrix2, 2), (1404:2:1744)');
eingefügt aber nu ist der bereich ganz ohne werte.
|
|
|
|
|
Hallo,
ich sehe auf Anhieb keinen Fehler. Bist du sicher, dass es hier auch die geraden Zeilen sind? Oder eher die ungeraden?
So nebenbei: Wir können das Ganze etwas flexibler gestalten und so mehrere Lücken in einem Durchlauf interpolieren. Dazu geben wir einfach nur die bekannten Zeilen an:
Z_bekannt = [1:2:340 341:1403]; %Hier fehlt ja die letzte Zeile! s.u.
Matrix2 = interp2(1:size(Matrix2, 2), Z_bekannt, Matrix2(Z_bekannt, 1:size(Matrix2, 2)), 1:size(Matrix2,2), (1:size(Matrix,1))');
Aaah! Ich denke, für eine erfolgreiche Interpolation müssen mindestens die erste und die letzte Zeile bekannt sein. Sonst ist es eine Extrapolation. Es sieht schlecht aus, wenn du für die unterste Zeilen keine Daten hast... Du kannst sie vielleicht testweise komplett auf 0 setzen und die 1744 in Z_bekannt aufnehmen...
Gruß
Martin
|
|
|
|
|
Status: |
(Frage) überfällig | Datum: | 18:20 Mo 22.01.2007 | Autor: | A-Jay |
stimmt hier sind es die ungeraden
aber ich hab es nun nochmal vielen vielen dank
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 19:20 Mi 24.01.2007 | Autor: | matux |
$MATUXTEXT(ueberfaellige_frage)
|
|
|
|