Qualitative unterschiede beim skalieren von Bildern

Benzol

Erfahrenes Mitglied
Hey Leute...
mal wieder ne Frage an der ich mir nun schon eine Weile die Zähne ausbeiße.
Habe mir eine Java Anwendung geschrieben, die mir einen Ordner mit Bildern auf verschiedene Größen skalieren soll.

Das funktioniert mittlerweile alles schon recht zufriedenstellend. Nur - jetzt kommt der Haken ;) - seit ich mit Java solche Dinge mache, habe ich immer das Problem, das das skalierte Bild zu stark scharf gezeichnet ist.
Ich habe mal zwei Bilder in den Anhang gehängt. Das eine (1) ist mit Java, das andere mit Photoshop (1b) skaliert. Ich möchte einfach, das es nicht so hart aussieht - gibt's da ne Möglichkeit?

Edit:
Sry, hab den Quellcode vergessen. So sklaiere ich moment:

Java:
	public File GetScaledImage(String filename, String tmpname, int longestside) throws IOException
	{
		PlanarImage source = JAI.create("fileload", filename);

		int imgwidth = source.getWidth();
		int imgheight = source.getHeight();
		
		//Größe berechnen
		boolean tall = (imgheight > imgwidth);
		float modifier = longestside / (float) (tall ? imgheight : imgwidth);
		
		ParameterBlock param = new ParameterBlock();
		param.addSource(source);
		param.add(modifier); //Breite in %
		param.add(modifier); //Höhe in %
		param.add(0.0f);
		param.add(0.0f);
		param.add(new InterpolationBicubic(11)); //Interpolation
		
		//Verkleinertes Zeilbild erstellen
		PlanarImage dst = JAI.create("scale", param);
		
		//In Datei schreiben
		FileOutputStream os = new FileOutputStream(new File(tmpname));
		JAI.create("encode", dst, os, "JPEG", null);
		os.close();
		return new File(tmpname);
	}
 

Anhänge

  • album56_image1.jpg
    album56_image1.jpg
    74,3 KB · Aufrufe: 58
  • album56_image1b.jpg
    album56_image1b.jpg
    116,3 KB · Aufrufe: 55
Zuletzt bearbeitet:
Hmm... ich weiß, das ist nicht die feine Art nachzufragen. Aber hat denn keiner eine Idee in welche Richtung ich da gehen muss? Habe dazu leider nix anderes gefunden zu diesem Thema :confused:
 
Ich kenne mich unter Java nicht aus, aber kann man bei der Skalierung vielleicht den Algorithmus ändern ? Anstatt Nearest Neighbour auf zB Bicubic..

Schau Hier : http://www.javalobby.org/java/forums/m92057248.html oder http://www.nobel-joergensen.com/roller/java/entry/downscaling_images_in_java

mfg chmee

p.s.: Sehe gerade im Source, dass Du auf Bicubic gestellt hast, könntest Du mal ein Testbild mit nearestNeighbour reinstellen ? Habe fast das Gefühl, er würde den Parameter nicht übernehmen..

p.p.s.: Möglicherweise ist der Skalierungsfaktor auch zu hoch und Biliear kann kaum etwas ausrichten. Skaliere 2-3 mal in Folge, also zB von (breite) 3000 auf 1500px, dann auf 750, dann auf die Zielbreite. Versuche auch, die Zielauflösung möglichst schnell mit einem ganzzahligen Faktor zu erreichen.

Original Breite 3000px
Ziel Breite 550px

Falsch :
Breite Copy1 = Original / 2 ( 1500 )
Breite Copy2 = Copy1 / 2 ( 750 )
Breite Ziel = Copy2 / (750/550)
ungerader Faktor am Ende, wenn Datei kaum noch Bildinformationen hat.


Richtig :
Breite Copy1 = Original / (3000 / (550*4) )
Breite Copy2 = Copy1 / 2
Breite Ziel = Copy2 / 2
Zielfaktor benutzt, solange viele Bild-Informationen


mfg chmee
 
Hey :D die multiple Bilinear Funktion, die beschrieben wird, entspricht meiner Idee, das find ich toll :D auch wenn er sich keine Gedanken zu der Konversionsreihenfolge macht, vielleicht, weil es unerheblich ist.

mfg chmee
 
Hey danke zeja, das hat wunderbar funktioniert. Jetzt stimmt die Bildqualität entlich und schneller als JAI ist das ganze auch noch. Zauberei :D
 
Zurück