Bildränder bei bilinearer Interpolation
-
Hallo,
wie kriegt man denn bei einer Vergrößerung durch bilineare Interpolation einen schönen rechten und unteren Rand hin? Die Windows-Bildervorschau interpoliert ja an den Rändern ins Weiße, was dann aber nicht so schön aussieht. Also, woher nehme ich die Pixel ausserhalb des Bildes (Breite+1 und Höhe+1)?
Gruß
Interpolierer
-
gibts verschiednee möglichkeiten, soweit ich weiß.
1. du nimmst im Rand immer eine feste farbe, wie zB weiß oder schwarz
2. du nimmst für pixel, die über das bild hinausgehen pixel von der anderen seite
3. du beachtest diese pixel gar nicht und berechnest den durchschnitt (oder was auch immer) der pixel, die noch auf dem bild sind.gibt bestimmt noch mehr möglichkeiten
-
wie wärs, wenn du so tust, als wäre der rand nochmal hinter dem rand. also etwa so:
3151785 ------- 3|3151785|5 1|1775415|5 4|4874377|7 4|4557785|5 4|4548787|7 ------- 4548787
also einfach die randpixel bis zum rand der darstellung weiterlaufen lässt.
is meiner meinung nach die schönste lösung
-
MamboKurt schrieb:
wie wärs, wenn du so tust, als wäre der rand nochmal hinter dem rand. also etwa so:
3151785 ------- 3|3151785|5 1|1775415|5 4|4874377|7 4|4557785|5 4|4548787|7 ------- 4548787
also einfach die randpixel bis zum rand der darstellung weiterlaufen lässt.
is meiner meinung nach die schönste lösungDas gibt aber so hässliche Streifen am Rand. Die anderen Möglichkeiten habe ich auch schon durchgekaut, schön ist das alles nicht wirklich.
Wie machen es denn die proffessionellen Grafikprogramme? Da sieht man bei den neueren doch auch keine Artefakte.
-
Interpolierer schrieb:
MamboKurt schrieb:
wie wärs, wenn du so tust, als wäre der rand nochmal hinter dem rand. also etwa so:
3151785 ------- 3|3151785|5 1|1775415|5 4|4874377|7 4|4557785|5 4|4548787|7 ------- 4548787
also einfach die randpixel bis zum rand der darstellung weiterlaufen lässt.
is meiner meinung nach die schönste lösungDas gibt aber so hässliche Streifen am Rand. Die anderen Möglichkeiten habe ich auch schon durchgekaut, schön ist das alles nicht wirklich.
Wie machen es denn die proffessionellen Grafikprogramme? Da sieht man bei den neueren doch auch keine Artefakte.Zeig mal auf www.imageshack.org ein Bild, auf dem diese Streifen zu sehen sind. Es interessiert mich, was Du da genau meinst.
Insgesamt gibt es keine allgemein beste Lösung für das Randproblem. Es kommt sicherlich auch darauf an, was Du genau machst. Geht es nur um eine Skalierung oder können auch andere geometrische Transformationen vorkommen? Wenn Du das Bild rotierst, dann wirst Du da sicherlich etwas anders herangehen.
Eine Variante, die hier noch nicht erwähnt wurde, ist übrigens, am Rand zu spiegeln. Das sähe dann in etwa so aus:
1775415 ------- 1|3151785|8 7|1775415|1 8|4874377|7 5|4557785|8 5|4548787|8 ------- 4557785
Keine Ahnung, ob das für Dein Einsatzgebiet hier sinnvoll ist. Müsstest Du halt mal ausprobieren. Vielleicht würde auch eine andere Interpolationsmethode helfen, das Problem zu verringern.
-
Gregor schrieb:
Zeig mal auf www.imageshack.org ein Bild, auf dem diese Streifen zu sehen sind. Es interessiert mich, was Du da genau meinst.
Habe es eben mal implementiert. Sieht bei kleineren Skalierungen gar nicht mal so schlecht aus. Aber hier das, was ich meinte:
-
Interpolierer schrieb:
Gregor schrieb:
Zeig mal auf www.imageshack.org ein Bild, auf dem diese Streifen zu sehen sind. Es interessiert mich, was Du da genau meinst.
Habe es eben mal implementiert. Sieht bei kleineren Skalierungen gar nicht mal so schlecht aus. Aber hier das, was ich meinte:
Ui. Das hast Du ja ganz schön stark in die Länge gezogen. Faktor 10 oder so? Ich weiß nicht, ob Du da so besonders gute Ergebnisse erwarten kann.
Aber es könnte sein, dass Du da nen Bug drin hast. Die Striche, die Du da am Rand hast, sind ganz schön lang. ...viel zu lang, wenn man es mit anderen Strukturen in dem Bild vergleicht. Kann es sein, dass Du bei der Bestimmung des Ursprungspixels zu weit aus dem kleineren Bild rauswanderst? Eigentlich dürftest Du ja bei einer Vergrößerung gar nicht aus dem Bild herauskommen, wenn man von möglichen Rundungsfehlern absieht. Zeig doch mal den Code, mit dem Du das Bild skalierst.
-
Gregor schrieb:
Interpolierer schrieb:
Gregor schrieb:
Zeig mal auf www.imageshack.org ein Bild, auf dem diese Streifen zu sehen sind. Es interessiert mich, was Du da genau meinst.
Habe es eben mal implementiert. Sieht bei kleineren Skalierungen gar nicht mal so schlecht aus. Aber hier das, was ich meinte:
Ui. Das hast Du ja ganz schön stark in die Länge gezogen. Faktor 10 oder so? Ich weiß nicht, ob Du da so besonders gute Ergebnisse erwarten kann.
Aber es könnte sein, dass Du da nen Bug drin hast. Die Striche, die Du da am Rand hast, sind ganz schön lang. ...viel zu lang, wenn man es mit anderen Strukturen in dem Bild vergleicht. Kann es sein, dass Du bei der Bestimmung des Ursprungspixels zu weit aus dem kleineren Bild rauswanderst? Eigentlich dürftest Du ja bei einer Vergrößerung gar nicht aus dem Bild herauskommen, wenn man von möglichen Rundungsfehlern absieht. Zeig doch mal den Code, mit dem Du das Bild skalierst.
Nee, das Bild ist schon extrem skaliert, kein Bug. Hatte mir die Striche vorher extremer vorgestellt, wollte aber zeigen, was ich meinte.
Problem ist also gelöst, thx!