Bilder schnell und ohne Qualitätsverlust verkleinern



  • Ok, danke.

    Habe mal nach bilinearer Interpolation gegoogelt und in Wikipedia geguckt, aber nichts brauchbares gefunden. Tue mich etwas schwer mit Matheformeln (nie gelernt).

    Hat da jemand ein Stückchen (Pseudo-)Code?

    Gruß
    Alex



  • Hatte das so gelöst, dass du dir einfach nur die benötigten Spalten und Zeilen rausholst:

    Zum Beispiel für 640x480 auf 320x240 -> da lese ich nur jede zweite Zeile und jede zweite Spalte raus.

    Weiß aber nicht, ob dass sowas ist, was du suchst.



  • .aLex. schrieb:

    Habe mal nach bilinearer Interpolation gegoogelt und in Wikipedia geguckt, aber nichts brauchbares gefunden. Tue mich etwas schwer mit Matheformeln (nie gelernt).

    Hi. Ohne Mathe wirst Du da nichts vernünftiges hinkriegen. Weder mit Blick auf die Geschwindigkeit, noch mit Blick auf die Qualität. ...es sei denn, Du passt nur ein Codestück von jemand anderem an Dein Programm an. Wenn Du das machen willst: Gimp ist AFAIK OSS.



  • Korbinian schrieb:

    ohne qualitaetsverlust wirst du es nicht schaffen. aber schau mal bei wiki unter bilinear oder bicubic interpolation, das benutzen die meisten bildverarbeitungsprogramme

    Ne Interpolation reicht bei einer Verkleinerung IMHO nicht aus. ...weil sonst Aliasing entstehen wird. Man kriegt dann Scheinfrequenzen ins verkleinerte Bild.



  • Meint der Autor verkeinern in dem Sinn das Bild kleinner anzuzeigen oder meint er kleiner zu speichern (wie z.B zippen)?



  • Gregor schrieb:

    Korbinian schrieb:

    ohne qualitaetsverlust wirst du es nicht schaffen. aber schau mal bei wiki unter bilinear oder bicubic interpolation, das benutzen die meisten bildverarbeitungsprogramme

    Ne Interpolation reicht bei einer Verkleinerung IMHO nicht aus. ...weil sonst Aliasing entstehen wird. Man kriegt dann Scheinfrequenzen ins verkleinerte Bild.

    Jo, sollte man vorher noch Bandbegrenzen, bevor man es unterabtastet.



  • Jester schrieb:

    Jo, sollte man vorher noch Bandbegrenzen, bevor man es unterabtastet.

    Weißt Du, wie man da am Besten (im Allgemeinen) vorgeht? Lässt man einfach nen Gauss über das Bild laufen, mit dem man auf der sicheren Seite ist oder misst man vorher die maximalen Frequenzen in einem Bild aus, um den Tiefpassfilter entsprechend anzupassen?



  • Wie man's in Wirklichkeit macht kann ich Dir nicht sagen. Ich sehe aber nicht wirklich einen Grund vorher die Frequenzen auszumessen. Ich weiß ja, was ich abtaste und was daher die höchste Frequenz ist, die ich noch erkennen kann. Also mache ich höhere Frequenzen vorher platt. Wenn keine da sind, wird halt nichts platt gemacht. 🙂

    Ich denke ein Gaußfilter (oder wegen der Separabilität ein Binomialfilter) dürfte da recht geeignet sein.



  • Jester schrieb:

    Wie man's in Wirklichkeit macht kann ich Dir nicht sagen. Ich sehe aber nicht wirklich einen Grund vorher die Frequenzen auszumessen. Ich weiß ja, was ich abtaste und was daher die höchste Frequenz ist, die ich noch erkennen kann. Also mache ich höhere Frequenzen vorher platt. Wenn keine da sind, wird halt nichts platt gemacht. 🙂

    Naja, man will ja auch so viel wie möglich erhalten, also eine "gute Qualität" bekommen. Gehen wir mal davon aus, dass beim Prozess der Bilderzeugung Unschärfe in das Bild hereingekommen ist. Ich habe also eine Bildfunktion h, die sich wie folgt aus einer Faltung eines Gauss-Filters g1 und der eigentlichen Funktion f ergibt:

    h = g1*f.

    Wenn ich jetzt über h nochmal nen Gauss g2 drüberlaufen lasse, um eine Funktion k zu bekommen, die ich zur Verkleinerung nutze, sieht das so aus:

    k = g2*h = g2*g1*f.

    Mit anderen Worten: Von f nach k haben wir eine Faltung mit einem Gauss, dessen Varianz sich als Summe der Varianzen von g1 und g2 ergibt. Wenn ich aber g2 festlege, ohne g1 zu berücksichtigen, wird das Ergebnis nicht so optimal sein, wie es sein könnte.

    Das war der Gedanke dahinter.

    Jester schrieb:

    Ich denke ein Gaußfilter (oder wegen der Separabilität ein Binomialfilter) dürfte da recht geeignet sein.

    Oh, das musst Du mir erklären. Inwiefern ist ein Binomialfilter besser separierbar als ein Gaussfilter?



  • hmm naja du willst ein bild von 640x480 auf 320x 240 verkleinern...

    dann ist das bilst ja quasie 4 mal so klein !

    das einfachste was du machen kannst ist das du immer 4 pixel als ein pixel betrachtest, indem das bild in 3 matrizen zerlegst RGB und dann bei jeder matrix die werte der 4 pisel addierst und durch 4 teilst.. hast udas dan mit allen drei matrize und pixel gemacht setzt du das bild wiedr zusammen und dann hast dein kleines bild...

    Das ist die einfachst lösung... hab aber nich alles Antworten zu dem Thread durchgelesenm, könnte sein das diese lösung schon gepostet wurde..


Anmelden zum Antworten