Mit dem Befehl verkleinerst Du das Bild und schneidest keinen Teil aus. Wenn Du so willst, schneidest Du in dem Beispiel jedes 2. Pixel aus - sonst wird aber Dein Bild auch nicht kleiner. Beim Vergrößern mußt Du interpolieren und Dich für eine Interpolationsmethode entscheiden!
Wie kann ich das Bild vergrößern bzw. verkleinern - ohne Datenverlust!
Verkleinern ohne Datenverlust ist nicht möglich.
INTERP2 sollte Dir weiterhelfen.
IMRESIZE hat noch die sehr schonende LANCZOS3-Methode, die oft die geringesten optischen Artefakte erzeugt. INTERP2 kann aber zumindest CUBIC und SPLINE, die auch ansehnliche Vergrößerungen und Verkleinerungen ergeben.
Leider habe ich beim Stöbern im Netz keine Erklärung gefunden, wie der LANCZOS3-Filter im 2D-Fall aussieht. Erklärungen für 1D gab es zwar viele, aber ob der 2D Fall einfach Zeilen und Spalten unabhängig voneinander behandelt, oder ob auch z.B. die Diagonalen berücksichtigt werden, bleibt dabei unklar. Kennt jemand eine Quelle dazu?
Gruß, Jan
Matlab macht Spaß
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 27.10.2010, 13:56
Titel:
Hallo, erstmal vielen Dank für die Hilfe!
Leider kenne ich mich nicht so gut mit Matlab aus. Aus diesem Grund bin ich leider nicht schlauer geworden. Kann mir jemand den vollständigen Befehl geben, wie ich ein Bild verkleinere bzw. vergrößere. Natürlich ohne imread!
Es wäre echt super, wenn mir jemand helfen könnte der sich in dieser Thematik auskennt!
"Es wäre echt super, wenn mir jemand helfen könnte der sich in dieser Thematik auskennt! "
Ich kann mich nur wiederholen und Jan S hat Dir auch eine Hilfe genannt!!
Wie Du ein Bild verkleinern kannst, ist bereits genannt. Das ist die kleinste Hürde, da nur Daten entfernt werden. Ohne Verlust---?? = bekannt. Zum Vergrößern brauchst Du eine Interpolationsmethode, wie z.B.:
Code:
I=imread('Test.tif'); %256*256*3 size(I) [x,y]=meshgrid(1:256); %Bildgröße quadr. von "I"
[xi,yi]=meshgrid(1:0.25:256);
for k = 1:3
I2(:,:,k)=interp2(x,y,double(I(:,:,k)),xi,yi,'spline');
end
Das ist eine Lösung ohne imresize. Wenn Du jetzt auch noch eine Lösung ohne "imread" (wie letzter Beitrag von Dir) suchst, mußt Du du ein *.mat File laden über: load x.mat
Ich hoffe, dass Du damit etwas anfangen kannst.
Viele Grüße
Hubertus[/code]
Matlab macht Spaß
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 04.11.2010, 14:42
Titel:
Hallo Hubertus,
es funktioniert - war sehr hilfreich!!!
vielen Dank die Hilfe!!!
Nur noch eine ganz kurze Frage.
Ist es auch möglich die Breite und Höhe unabhängig voneinander zu ändern?
Habs ausprobiert, hat aber leider nicht hingehauen.
Wenn Du Hilfe suchst, ist es sehr praktisch nicht einfach nur "hat nicht hingehauen" schreibst, sondern exakt postest, was Du gemacht hast und welche Fehlermeldung aufgetreten ist, oder wie die Ergebnisse genau von Deinen Erwartungen abweichen.
Du könntest z.B. auch den Hilfe-Text von INTERP2 lesen. Dort wird genau beschrieben, wie man ein eine Matrix über ein feineres Gitter approximiert - also vergrößert. Zwar wird auch hier der MESHGRID-Befehl für zwei identische Faktoren in X- und Y-Richtung angegeben:
Aber es ist nicht schwer, einfach zwei verschiedene Grid-Schritte zu definieren. Siehe z.B. auch LINSPACE.
Um das Lesen der Hilfe-Texte und der Getting-Started-Kapitel in der Dokumentation kommt niemand vorbei, der in Matlab programmieren möchte. Auch ich musste per "help interp2" nachschauen, ob da vielleicht ein passendes Beispiel vorhanden ist.
Ja, Matlab macht durch seine Fehlermeldungen manchmal "keinen Spaß".
Beim Umsortieren muß man darauf achten, dass alle Reihen und Spalten besetzt sind, ohne Leerstellen und Ohne "übrig gebliebene Pixel. Die Summe aller Elemente muß in Zeilen und Spalten aufgehen. Es wäre eine interessante Aufgabe, Fehlstellen durch Interpolation zu besetzen. Die treten natürlich nur in der letzten Reihe auf.
Ich benötige diese Funktion zwar nicht, will sie aber in den nächsten Tagen aus reiner Neugierde mal an einem Bild ausprobieren. Das das Ganze funktioniert kannst Du an dem Beisüiel sehen, wenn Du das Ganze auf 2 Reihen umsortierst. Das geht auf jeden Fall und dann natürlich auch auf andere Seitenverhältnisse
das Umsortieren mit reshape an folgendem Beispiel. Wenn Du eine Matrix von 300*300 hast und 100 Reihen entfernst, kann Du 150 Spalten anhängen.
Der Befehl lautet dann:
habe auch noch eine Frage zu diesem Thema meine Situation ist ziemlich dieselbe ich möchte ein .jpg Bild vergrößern und verkleiner.
Die Größe zu ändern funktioniert auch mit den oben genannten Programmzeilen, jedoch werden meine Farbwerte ebenfalls geändert und ich weiss gerade nicht wieso, kann auch sein das ist ein total triviales Problem, aber ich komme gerade einfach nicht darauf.
Die 2te Frage ist, wenn ich die Werte im Meshgrid Befehl (hier 0.25) auf Werte >1 ändere wird das Bild ja verkleinert hat das jetzt Nachteile im Gegensatz zu der oben genannten Methode?
Und zu letzt: Bekomme das vergrößern bis jetzt nur mit quadratischen Bildern hin könnt ihr mir vielleicht noch einen Tipp geben (oder ein BSP), wie ich vorgehen könnte bei rechteckigen Bildern?
das jetzt Nachteile im Gegensatz zu der oben genannten Methode?
Ein Vergleich der beiden Ergebnisse ist gleich 1. D.h. nicht 1 Pixel weicht ab.
Hubertus
Einstellungen und Berechtigungen
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
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.