ENGLISH VERSION |
|
Links | | | Forum | | | Kommentare | | | News melden |
Chat | | | Umfragen | | | Newsticker | | | Archiv |
amiga-news.de Forum > Programmierung > Skalieren und so | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
1 -2- 3 | [ - Beitrag schreiben - ] |
29.08.2011, 18:16 Uhr Der_Wanderer Posts: 1229 Nutzer |
Interessant: http://stackoverflow.com/questions/384991/what-is-the-best-image-downscaling-algorithm-quality-wise Demnach wäre fürs Downsampling Sinc oder Gaussian angebracht, und fürs Upsampling Mitchel oder Lanczos. Wobei Window als "near-optimal" bezeichnet wird. Sooo schlecht kanns also nicht sein. -- -- Author of HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, AB3 Includes und viele mehr... Homepage: http://www.hd-rec.de [ - Antworten - Zitieren - Direktlink - ] |
29.08.2011, 22:18 Uhr gerograph Posts: 621 Nutzer |
@Holger: Sorry, du hast recht, aber dieser Hinweis versteckt sich so ziemlich in der Hilfe. Von der Bedienung dann auch unlogisch: Wähle ich resize bekomme ich die schlechte Qualität Wähle ich resample, kann ich den Algo wählen und er downscaled in einer besseren Qualität @Wanderer Window downscaling ist schon super... Vielleicht macht es mehr Sinn, upscaling Algos in dein "Algenpool" aufzunehmen ! So hier noch das Testpic mal mit Hollywood/Jack runtergescaled: Bild: http://www.geobiz.de/screenshots/320x200/testpic-jack.png und windowscaling: Bild: http://www.geobiz.de/screenshots/320x200/hermite.png Bei Hollywood ist die Schrift deutlich schlechter... und die dritte Figur obere Reihe "subjektiv" besser. Vom Foto her tut sich nicht viel würd ich sagen. [ Dieser Beitrag wurde von gerograph am 29.08.2011 um 22:20 Uhr geändert. ] [ Dieser Beitrag wurde von gerograph am 29.08.2011 um 22:33 Uhr geändert. ] [ Dieser Beitrag wurde von gerograph am 29.08.2011 um 22:34 Uhr geändert. ] [ Dieser Beitrag wurde von gerograph am 29.08.2011 um 22:35 Uhr geändert. ] [ Dieser Beitrag wurde von gerograph am 29.08.2011 um 22:38 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
29.08.2011, 22:55 Uhr Der_Wanderer Posts: 1229 Nutzer |
Doch da ist schon ein Unterschied. Das Hollywood Bild hat leichtes Aliasing drin. Deshalb ist es einerseits schärfer, andererseits gibt es Aliasing Effekte. Wenn du Beim Window Scaling Schärfe 0.25 nimmst, dann dürfe das in etwa so aussehen. Der Hollywood Scaler hat aber einen Bug, den gleichen den Arteffekt auch hat: Er respektiert den Alphakanal nicht richtig, sondern behandelt ihn wie eine der 3 Farbkanäle (ist einfacher so). Deshalb bekommen alle Icons dunkle Ränder, sieht man auch an dem weißen Hintergrund, der nach unten hin eine graue Linie hat. Sollte natürlich nicht so sein. Der Window hatte das gleiche Problem, deshalb gibt es in AB3 noch eine "alpha" Variante. Die werde ich demnächst "freischalten" dass sie automatisch verwendet wird wenn das Bild Alpha Informationen hat. (GUI Algorithmus macht das schon sei jeher richtig). -- -- Author of HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, AB3 Includes und viele mehr... Homepage: http://www.hd-rec.de [ - Antworten - Zitieren - Direktlink - ] |
30.08.2011, 09:26 Uhr DrNOP Posts: 4118 Nutzer |
Also der Unterschied, den ich in diesen beiden Bildern sehe, ist daß im oberen (Hollywood) die Zeile in der die Icons stehen die gleiche Farbe hat wie der Hintergrund des Beitrags (in diesem Fall grau). Und das untere Bild (windowscaling) hat diese Zeile schwarz. Schwarze Ränder um die Icons fallen mir nicht auf. Und die graue "Trennlinie" zwischen dem oberen Teil des Bildes und der Iconzeile hatten andere hier gezeigte Algorithmen auch schon. -- Signaturen mit mehr als zwei Zeilen gehen mir auf den Wecker [ - Antworten - Zitieren - Direktlink - ] |
30.08.2011, 10:10 Uhr gerograph Posts: 621 Nutzer |
@DrNOP:Zitat: das liegt an mir/IrfanView da wir festgestellt haben, das IrfanView ebenfalls windowscaling macht, habe ich das IrfanView windows scaling bild hochgeladen. In IrfanView krieg ich keinen Alphakanal (hier: Transparenz) hin. Wenn man es mit Amiblitz macht, dann hast Du das ohne schwarzen Hintergrund ! [ - Antworten - Zitieren - Direktlink - ] |
30.08.2011, 12:08 Uhr Der_Wanderer Posts: 1229 Nutzer |
@Dr. Nop Hier nochmal zur verdeutlichung was ich meine: Bild: http://www.hd-rec.de/pics/testpic_alphabug.png Hollywood (Alpha Bug) / Amiblitz3.5 (Window Scaling) Bild: http://www.geobiz.de/screenshots/320x200/testpic-jack.png Bild: http://www.hd-rec.de/pics/testpic_win.png Die grauen Outlines kommen daher, dass das Bild brute-force skaliert wird, ohne darauf zu achten ob der Pixel sichtbar ist oder nicht. So mischen sich die unsichtbaren Pixel (in dem Fall schwarz, könnte aber auch Pink oder sonstwas sein) mit den sichtbaren Pixeln und werden auch sichtbar. Gerade bei Icons oder Game-Sprite ein no-go. -- -- Author of HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, AB3 Includes und viele mehr... Homepage: http://www.hd-rec.de [ Dieser Beitrag wurde von Der_Wanderer am 30.08.2011 um 12:12 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
31.08.2011, 10:35 Uhr Holger Posts: 8116 Nutzer |
Zitat:Das sollte keine Kritik sein. Der Hinweis auf die Anleitung diente nur dazu klarzustellen, dass das Verhalten dem Autor von IrfanView bekannt, bzw. gewollt und kein Bug ist. -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
14.09.2011, 12:52 Uhr Der_Wanderer Posts: 1229 Nutzer |
Also da sich nun niemand meldet, der Window Scaling schlecht findet und was besseres anbieten kann, denke ich kann man es ruhig verwenden. Für das Hochskalieren ist das allerdings in der Tat nicht so gut, da werde ich bei Gelegenheit Cubisch oder Lanzcos implementieren. Die Alpha Kanal Version werde ich dann demnächst in AB3 standardmäßig einbauen, d.h. auch Bilder mit Alpha Channel (z.b. Icons) werden (im Gegensatz zu vielen anderen Programmen wie ArtEffect oder Hollywood) korrekt berechnet. -- -- Author of HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, AB3 Includes und viele mehr... Homepage: http://www.hd-rec.de [ - Antworten - Zitieren - Direktlink - ] |
14.09.2011, 20:19 Uhr gerograph Posts: 621 Nutzer |
@Der_Wanderer: mal nen bisserl offtopic, für das Packen von Bildern nutzt AB3/image.include die zlib.library, richtig ? Betrifft das nur das Formate jpeg und png, oder noch weitere ? Gibts, oder wäre es möglich zlib.library PPC nativ zu machen ? [ - Antworten - Zitieren - Direktlink - ] |
15.09.2011, 12:04 Uhr Der_Wanderer Posts: 1229 Nutzer |
Die zlib wird benutzt zum Speichern von PNG und AB3I (Amiblitz3 Image), sowie zum Laden von 32bit ARGB PNGs. Die Library unterstützt bereits PPC, da sie ein Mixed-binary ist. Trotzdem würde ich gerne ohne die Lib auskommen, da sie eine echte Problemquelle ist, weil diverse PPC "Ports" im Umlauf sind die schlichtweg nicht funktionieren. JPEG Bilder werden via Datatypes geladen und gespeichert via jpeg.library. Die gibt es meines Wissens nach funktionsfähig auch als PPC Port. -- -- Author of HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, AB3 Includes und viele mehr... Homepage: http://www.hd-rec.de [ - Antworten - Zitieren - Direktlink - ] |
15.09.2011, 14:26 Uhr whose Posts: 2156 Nutzer |
@Der_Wanderer: Mal wieder on topic: Hast Du evtl. Links auf Referenzimplementationen der einzelnen Algos (Sprache ist nicht ganz so wichtig)? Ich hab bisher nur still mitgelesen, aber das Thema als solches interessiert mich sehr. -- --- µA1 PPC 750GX-800 A4000 PPC 604e-233 [ - Antworten - Zitieren - Direktlink - ] |
15.09.2011, 15:57 Uhr Der_Wanderer Posts: 1229 Nutzer |
Nein, es gibt keine Referenzimplementationen da es ja keine zentrale Stelle gibt (wie bei JPEG, ZLIB oder MP3) die das definiert. Zumindest nicht für Nearest Neighbour, Window Scaling, Linear, Quadratisch und Kubische Interpolation. Die Algorithmen sind aber alle, bis auf vielleicht Lanzcos, so einfach, dass ein bisschen googeln ausreichen sollte. Ansonsten kann ich natürlich den Source von Window Scaling (Amiblitz) für hier posten, falls das interessant wäre. Problem ist natürlich oft, dass durch viele Optimierungen die Lesbarkeit leidet. Recht schick finde ich überigends auch Cosinusinterpolation, wie im Eingangspost am Anfang zu sehen ist. Der Vorteil gegenüber Kubisch ist, dass es sehr schnell ist und oft bereits sehr gute Ergebnisse liefert. Cosinus Interpolation nutze ich z.B. bei PerlinFX um die niedrigen "Oktaven" zu zoomen. -- -- Author of HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, AB3 Includes und viele mehr... Homepage: http://www.hd-rec.de [ - Antworten - Zitieren - Direktlink - ] |
15.09.2011, 16:11 Uhr whose Posts: 2156 Nutzer |
@Der_Wanderer: Hm, für den "Standard-Kram" wie Nearest Neighbour etc. habe ich entsprechendes gefunden (wobei das eh einer der simpelsten Algorithmen ist und ich genau den schon mal implementiert hatte). Cosinus-Interpolation wird seltsamerweise wenn überhaupt nur am Rande erwähnt? In der englischen Wikipedia zum Beispiel kommts gar nicht vor, dafür so Exoten wie seam carving und ähnliches Zeug. Windowed Scaling wiederum taucht als Implementation nirgendwo auf und etwaige Fundstellen beziehen sich auf speziellere Abarten aus der Bilderkennung oder eben auf die beim IEEE hinterlegten Schriften zu dem Thema. An letztere ist für mich etwas schwierig dranzukommen Von daher wäre der AB3-Code schon mal interessant. Mit etwas Mühe sollte ich das in einfacher lesbaren Code "rückübersetzen" können, notfalls frage ich halt dumm nach -- --- µA1 PPC 750GX-800 A4000 PPC 604e-233 [ - Antworten - Zitieren - Direktlink - ] |
15.09.2011, 18:33 Uhr Der_Wanderer Posts: 1229 Nutzer |
Das Problem bei Window Scaling ist, dass es mathematisch nicht gut beschrieben werden kann, und daher als wenig "sophisticated" gilt und selten in Literatur auftaucht. Deshalb hat es auch keinen eindeutigen Namen der sich durchgesetzt hat, wie z.B. Lineare Interpolation oder nächster Nachbar. Oft findet man es auch als "Box" Resampling oder sowas. Der sieht in AB3 so aus: code:sxs.l = imagedat(srcimage)img_width sys.l = imagedat(srcimage)img_height dxs.l = imagedat(dstimage)img_width dys.l = imagedat(dstimage)img_height fracX.l = 0 fracY.l = 0 sy.l = 0 pw.l = sxs*sys For dy.l=0 To dys-1 weightY1.l = (dys-fracY) cy.l=0 : fracY+sys : While fracY>dys:fracY-dys:cy+1:Wend sptr.l = imagedat(srcimage)raw_ptr + sy * imagedat(srcimage)bpr dptr.l = imagedat(dstimage)raw_ptr + dy * imagedat(dstimage)bpr fracX.l = 0 For dx.l = 0 To dxs-1 weightX1.l = (dxs-fracX) cx.l=0 : fracX+sxs : While fracX>dxs:fracX-dxs:cx+1:Wend ; Calculate the pixel... R.l = 0 : G.l = 0: B.l = 0 : A.l = 0 weightY.l = weightY1 nsptr.l = sptr + (cx LSL 2) For m.l = 0 To cy weightX.l = weightX1 If m = cy Then weightY = weightY + (fracY-dys) For n.l = 0 To cx If n = cx Then weightX = weightX + (fracX-dxs) tpw.l = weightX*weightY A.l + (Peek.b(sptr ) & $FF) * tpw R.l + (Peek.b(sptr+1) & $FF) * tpw G.l + (Peek.b(sptr+2) & $FF) * tpw B.l + (Peek.b(sptr+3) & $FF) * tpw weightX = (dxs) sptr+4 Next sptr - 4*(cx+1) + imagedat(srcimage)bpr weightY = (dys) Next sptr = nsptr Poke.b dptr ,A / pw Poke.b dptr+1,R / pw Poke.b dptr+2,G / pw Poke.b dptr+3,B / pw dptr+4 Next sy+cy Next Bei Gelegenheit kann ich das ja mal aufhübschen. Cosinus interpolation ist das gleiche wie linear, nur dass der Interpolationscoeffizient nochmal durch 0.5 - 0.5*cos(pi*r) geschossen wird, was dann sehr viel weicher aussieht als linear: Bild: http://www.hd-rec.de/pics/int_lin.jpg Bild: http://www.hd-rec.de/pics/int_cos.jpg -- -- Author of HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, AB3 Includes und viele mehr... Homepage: http://www.hd-rec.de [ Dieser Beitrag wurde von Der_Wanderer am 15.09.2011 um 18:34 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
15.09.2011, 23:00 Uhr whose Posts: 2156 Nutzer |
Zitat: Ja, das ist mir auch aufgefallen... jede Menge Zeug, das unter "Window scale" firmiert... teilweise sogar "Window resampling" und ähnliches. Da brauche ich mich nicht zu wundern, daß ich kaum was finde Zitat: Und ich finde, das sieht recht lesbar aus. Ok, als C-Coder fällts mir von Natur aus etwas leichter, aber trotzdem... vielen Dank! Mit etwas Grübeln sollte man auch gut dahinter kommen, was das genau macht. Ganz grob (grob! ) gesagt arbeiten die meisten Scaling-Algorithmen ja nach bekanntem Schema... Pixel bewerten. Entweder Pixel rund um einen Stützpunkt im Quellbild oder im Zielbild. Im ersten Überfliegen sieht das hier ziemlich ähnlich aus. -- --- µA1 PPC 750GX-800 A4000 PPC 604e-233 [ - Antworten - Zitieren - Direktlink - ] |
16.09.2011, 10:36 Uhr Der_Wanderer Posts: 1229 Nutzer |
Window Scaling (aka Window Resampling, Box Resampling etc.) legt über das Originalbild quasi das neue Raster imaginär drüber, und ließt für jedes "Fenster", also Zielpixelfläche, die Anteile der hineinfallenden Ursprungspixel aus und addiert sie und teilt sie durch das "Gesamtgewicht" des Fensters. Bild: http://www.hd-rec.de/pics/winscalinggrid.png Der obige Sourcecode ist aus Anschauungsgründen etwas vereinfacht. Was fehlt ist das Alpha-Gewichten und der Überlauf-Check. Denn hier muss "Altebreite*Neuebreite*256" in 32 bit passen. Man braucht für die Farbe aber gar keine so hohe Genauigkeit, deshalb kann man da noch etwas tunen. Mir fällt gerade auf, man könnte auch die 4 Divisionen los werden, wenn man das Verhältnis auf eine Zweipotenz normalisiert. Dann kann man shiften. Werde ich mal ausprobieren, dann sollte der Algo noch etwas schneller sein. -- -- Author of HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, AB3 Includes und viele mehr... Homepage: http://www.hd-rec.de [ Dieser Beitrag wurde von Der_Wanderer am 16.09.2011 um 10:46 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
18.09.2011, 22:37 Uhr Der_Wanderer Posts: 1229 Nutzer |
Ich habe nun auch (bi)cubic und Cosinus implementiert (allerdings noch Prototypen, wie man an den Rändern sehen kann...), sowie linear einen Bug gefixed. Hier nochmal der Vergleich beim Downscaling (Achtung: ich mache kein AA (also kein Tiefpass), deshalb ist das nicht ganz fair) Nearest Neighbour / Lineare Interpolation (ohne Tiefpass) Bild: http://www.hd-rec.de/pics/testpic_nn.png Bild: http://www.hd-rec.de/pics/testpic_lin.png BiCubic (ohne Tiefpass) / Cosinus (ohne Tiefpass) Bild: http://www.hd-rec.de/pics/testpic_cubic.png Bild: http://www.hd-rec.de/pics/testpic_cos.png Window Scaling / Window Scaling + 0.5 sharpnes Bild: http://www.hd-rec.de/pics/testpic_win.png Bild: http://www.hd-rec.de/pics/testpic_win05.png Weighted Window Scaling (für Icons) / EDIT: Cubic Stair Step Bild: http://www.hd-rec.de/pics/testpic_gui.png Bild: http://www.hd-rec.de/pics/testpic_cubic_ss.png EDIT: Hollywood Jack / EDIT: MacOS Previewer Bild: http://www.hd-rec.de/pics/testpic-jack.png Bild: http://www.hd-rec.de/pics/testpic_macos.png -- -- Author of HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, AB3 Includes und viele mehr... Homepage: http://www.hd-rec.de [ Dieser Beitrag wurde von Der_Wanderer am 27.09.2011 um 23:36 Uhr geändert. ] [ Dieser Beitrag wurde von Der_Wanderer am 28.09.2011 um 10:50 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
20.09.2011, 21:35 Uhr gerograph Posts: 621 Nutzer |
@Der_Wanderer: Hier kann man ja noch was lernen.... [QUOTE]Mir fällt gerade auf, man könnte auch die 4 Divisionen los werden, wenn man das Verhältnis auf eine Zweipotenz normalisiert. Dann kann man shiften. Werde ich mal ausprobieren, dann sollte der Algo noch etwas schneller sein.[/QUOTE] Hä ? Ne, ernsthaft, da bin ich jetzt zu müde, um das zu durchdenken. Manchmal glaub ich mein Gehirn ist nach einem Tag Hauptschüler unterrichten nicht mehr in der Lage soetwas aufzunehmen.... war früher mal anders, da hab ich soetwas zumindest versucht zu verstehen. Aber hey, macht euch nicht die Mühe mir das zu erklären. Interessant sind meiner Meinung nach die nur "marginalen" Unterschiede. [ - Antworten - Zitieren - Direktlink - ] |
21.09.2011, 12:00 Uhr Der_Wanderer Posts: 1229 Nutzer |
So marginal sind die Unterschiede nicht, vor allem beim Hochskalieren. Wenn ich alles fertig habe poste ich noch ein paar Beispielbilder, bei denen das gut zu sehen ist. -- -- Author of HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, AB3 Includes und viele mehr... Homepage: http://www.hd-rec.de [ - Antworten - Zitieren - Direktlink - ] |
25.09.2011, 20:42 Uhr Der_Wanderer Posts: 1229 Nutzer |
So, hier sieht man schön nochmal die einzelnen Implementierungen in Amiblitz3 im Vergleich beim Hochscalieren. Dadurch wird die sog. Rekonstruktionsfunktion sichtbar. Beim Bearbeiten von Fotos hat das natürlich nicht viel Relevanz, da man selten so extrem skaliert. Nearest Neighbour / Window (degradiert zu NN) / Linear / Cosinus / Cubic (catmull Rom) / Cubic Stair Step (Test) Bild: http://www.hd-rec.de/pics/test_s2.nn.png Bild: http://www.hd-rec.de/pics/test_s2.win.png Bild: http://www.hd-rec.de/pics/test_s2.lin.png Bild: http://www.hd-rec.de/pics/test_s2.cos.png Bild: http://www.hd-rec.de/pics/test_s2.cubic.png Bild: http://www.hd-rec.de/pics/test_s2.ss.png Zum Herunterscalieren eignet sich, zumindest bei mehr als 1/2 nur Window Scaling, weil die anderen kein AA machen. Man kann aber zwischen Bitmaps berechnen, das werde ich evtl. mal versuchen. Cubic Stair Step benutzt die Cubische Interpolation, aber jeweils in kleinen Schritten bis zur vollen Größe. Dadurch werden die Tangenten auch etwas weicher. Ich habe gesehen dass die Implementierung von Cubic in Paint.NET noch "weichere" Ergebnisse liefert. Das liegt daran, dass mehr als 16 Pixel pro Zielpixel verwendet werden und dadurch die Tangenten besser geschätzt werden. Der Aufwand ist aber relativ hoch, vom Tippen und vom Rechnen her, deshalb mache ich das erstmal nicht. Evtl. implementiere ich noch Lanzcos. -- -- Author of HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, AB3 Includes und viele mehr... Homepage: http://www.hd-rec.de [ Dieser Beitrag wurde von Der_Wanderer am 25.09.2011 um 20:45 Uhr geändert. ] [ Dieser Beitrag wurde von Der_Wanderer am 25.09.2011 um 20:48 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
25.09.2011, 21:53 Uhr inq Posts: 445 Nutzer |
Zitat: finde ich gut, daß du dir soviel Mühe machst, alles zu vergleichen. das ist nicht wirklich "nur" für AB3, oder? Hört sich schon fast wie eine Doktorarbeit an. Dann solltest du allerdings o.g. nicht außen vor lassen. Wenn's denn wirklich irgendwas in Richtung Education wird, veröffentlichst du doch sicher ein PDF, ja? inq p.s.: ich weiß, du bist sehr beschäftigt, aber: Wie weit ist denn nun NTUI? [ - Antworten - Zitieren - Direktlink - ] |
26.09.2011, 09:16 Uhr Der_Wanderer Posts: 1229 Nutzer |
Ich mache in der Tat gerade meine Doktorarbeit, aber das ist ein ganz anderes Kaliber und hat mit Bildverarbeitung nichts (zumindest nicht viel) zu tun. Das Nachprogrammieren von bekannten Algorithmen ist ja keine wissenschaftliche Arbeit, macht aber Spass und man lernt einiges dabei. Und ja, das ist Teil der Amiblitz3 Runtime. Ich benutze Amiblitz aber für alle möglichen Projekte (auch wissenschaftlich und auch kommerziell), ist also nicht ganz selbstlos. -- -- Author of HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, AB3 Includes und viele mehr... Homepage: http://www.hd-rec.de [ - Antworten - Zitieren - Direktlink - ] |
28.09.2011, 10:45 Uhr Der_Wanderer Posts: 1229 Nutzer |
So, hier ist mein Favorite: Bild: http://www.hd-rec.de/pics/testpic_cubic_ss.png Das Verfahren nennt sich Stair Step, in dem Fall Cubisch. Man skaliert dabei mehrfach in kleineren Schritten. Dadurch erreicht man einen guten Kompromiss zwischen Aliasing und Schärfe. Ich bin mal gespannt, ob jemand was Besseres "bieten" kann. -- -- Author of HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, AB3 Includes und viele mehr... Homepage: http://www.hd-rec.de [ - Antworten - Zitieren - Direktlink - ] |
28.09.2011, 10:55 Uhr Thore Posts: 2266 Nutzer |
> Ich bin mal gespannt, ob jemand was Besseres "bieten" kann. Hängt ja mitunter vom Bild ab Wie performant ist dein Algorithmus? Lohnt es sich, diesen in Assembler umzusetzen und die BitMapScale Routine des OS zu patchen? Nur mal so als Nebenfrage... [ - Antworten - Zitieren - Direktlink - ] |
28.09.2011, 11:07 Uhr Der_Wanderer Posts: 1229 Nutzer |
@Thore Nein, für Echtzeit ist das zu langsam. Dann eher Window für Runterskalieren und Linear zum Hochskalieren. Ich stelle mir das in Assembler auch etwas kompliziert vor. -- -- Author of HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, AB3 Includes und viele mehr... Homepage: http://www.hd-rec.de [ - Antworten - Zitieren - Direktlink - ] |
28.09.2011, 14:37 Uhr Thore Posts: 2266 Nutzer |
Sofern der Algo bekannt ist, dürfte das auf 68k Assembler nicht sonderlich schwierig sein. (Sofern man Assembler kann). Man muss sich lediglich strikt an die API halten und die Register retten, sonst crashts. Aber wenns nicht performant genug ist, dann sollte mans lieber sein lassen. [ - Antworten - Zitieren - Direktlink - ] |
28.09.2011, 15:15 Uhr Thore Posts: 2266 Nutzer |
@gerograph Wegen der Zweierpotenz und dem Schieben, falls dich die Rechnung noch interessiert. Ganz einfach: Schiebst du Bits um eine Stelle nach links ist es das gleiche wie wenn du mal zwei rechnest. Umgekehrt, schiebst du sie nach rechts, teilst du jeweils um 2. Da mit jedem Bit der Faktor sich verdoppelt, (2, 4, 8, 16, 32) sieht man daß es Zweierpotenzen sind. (Liegt dem Binärsystem ja schon zugrunde, 2 Zustände) Also um 3 Stellen nach links ist schieben ist gleich wie *8 zu nehmen. Drei Stellen nach rechts = geteilt durch 8. Shiften ist wesentlich schneller als eine Division der CPU. Viele Compiler optimieren das aber bereits schon. [ - Antworten - Zitieren - Direktlink - ] |
28.09.2011, 15:50 Uhr Holger Posts: 8116 Nutzer |
Zitat:Bei positiven Zahlen. Das wird gerne vergessen. Zitat:Sofern sie das überblicken können, d.h. i.A. nur, wenn der Divisor konstant ist. Wenn wie hier durch eine Variable geteilt wird, muss der Programmierer selbst dafür sorgen, dass der Divisor eine Zweierpotenz ist und dieses Wissen in eine explizite Shift-Operation münden lassen. Der Trick lässt sich auch für nicht-Zweierpotenzen ausnutzen, z.B. in dem man statt durch 10 zu teilen, mit 52429 multipliziert und dann um 19 Bits nach rechts schiebt. Dabei darf der Dividend offensichtlich nicht zu groß sein, was wiederum selten vom Compiler überblickt werden kann und deshalb Handarbeit erfordert. -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
28.09.2011, 16:05 Uhr Thore Posts: 2266 Nutzer |
@Holger Ja positive Integer sind gemeint. Die meisten Compiler können z.B. bei *3 umbauen, indem sie einmal shiften, dann nochmal addieren. Das geht für einige Faktoren. Ich bezog mich auf das vorangegangene Statement: "Mir fällt gerade auf, man könnte auch die 4 Divisionen los werden, wenn man das Verhältnis auf eine Zweipotenz normalisiert. Dann kann man shiften." Und dem anschließenden "Hä" von gerograph. Deshalb hier nur eine kurze Erklärung wie das technisch gemeint war mit dem shiften. [ - Antworten - Zitieren - Direktlink - ] |
28.09.2011, 16:55 Uhr Holger Posts: 8116 Nutzer |
Zitat:Was aber je nach CPU nichts bringt, weil Multiplikationen nicht so teuer wie Divisionen sind. Zitat:Ich auch Zitat:Ja, und ich hielt es noch für erwähnenswert, dass das in diesem konkreten Fall nicht vom Compiler automatisiert werden kann. -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
1 -2- 3 | [ - Beitrag schreiben - ] |
amiga-news.de Forum > Programmierung > Skalieren und so | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
Impressum |
Datenschutzerklärung |
Netiquette |
Werbung |
Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten. |