PNG-Frankensteiner 3 Vít Čondák 2017-2023 Transformátor obrázků podle podobnosti dvou vzorových obrázků. Optimalizovaná verze určená pro Tinterr, která používá pouze černobílé vzory, čili jako by byl použit bývalý parametr G. Jedná se o 64bitovou aplikaci a využívá instrukce AVX2, takže je potřeba procesor Intel přinejmenším z roku 2013 a AMD z roku 2015 nebo novější. Usage: png-frank3 png1/upng png2 [png3] outputpng/upng [AFIMT] A embedd cummulative errors to alpha channel F faster (less iterations) I output resolution is based on F arguments M match levels of input images before calculating translations T shorter translations (less mipmaps) P/Q change weight of input pairs (P more grayscale, Q more depth) Pokud se počítá přesun, tak kladná návratová hodnota programu obsahuje vypočítanou chybu na jeden pixel. Záporné návratové hodnoty znamenají chyby při otevírání souborů a podobně: -1 nebyly zadány žádné parametry -2 nenalezeno zadané .upng -3 nenalezen obrázek .png Příklady použití png-frank2 vzor1.png vzor2.png zdroj.png cíl.png Transformuje zdroj.png na cíl.png pomocí transformace definované soubory vzor1.png a vzor2.png png-frank2 vzor1.png vzor2.png transformace.upng Spočítá transformaci z dvojice vzor1.png a vzor2.png a uloží ji do souboru transformace.upng png-frank2 vzor1.png vzor2.png transformace.upng tfi Spočítá transformaci z dvojice vzor1.png a vzor2.png a uloží ji do souboru transformace.upng. Při výpočtu použije poloviční rozlišení a poloviční vzdálenost pro hledání podobných oblastí. png-frank2 transformace.upng zdroj.png cíl.png Transformuje zdroj.png na cíl.png pomocí transformace ze souboru transformace.tpng ToDO * Asi by se dal paralelním dekódováním ještě trochu zrychlit load. Momentálně trvá kolem 90 ms. Historie 3.52 2023-11-09 * u shiftování skutečně není abs nutné 3.51 2023-11-08 * pro lepší pocit přidány do výpočtu abs, ale zkusím je změřit a zase zahodit 3.50 2023-11-07 * znovu upraveno nastavení váhy (jeden koefient se zmenšuje, druhý se nemění) 3.49 2023-11-07 * váha vstupních párů může nabývat více hodnot (input_weight = -2..+2) 3.48 2023-11-06 + přidána možnost měnit váhu vstupních párů (input_weight = -1..+1) * opravena hodnota errperpix při výpočtu bez depthmaps 3.47 2023-06-16 * opraveno padání při spojování dvou upng (xsize je v tom případě 0) 3.46 2023-04-07 * opravena chyba v MatchLevel - poslední směrnice měla náhodnou hodnotu 3.45 2023-04-06 * drobná změna v MatchLevels (ale nepomohla) - odstraněny ladicí výpisy rozsahů sekcí AdjustTranslations 3.44 2023-04-06 + dočasné ladicí výpisy rozsahů sekcí AdjustTranslations 3.43 2023-04-05 * vyhozeny kontrolní výpisy * kosmetické změny kódu 3.42 2023-04-04 * opravena chyba, kdy se čekalo na procesy, které se vůbec nespustily * dočasné kontrolní výpisy 3.41 2023-04-04 [246 ms včetně depth] * paralelní AdjustTranslations výsledný čas je 30 % Franka 2.68 a 57 % Franka 3.19 3.40 2023-04-04 [485 ms včetně depth] * paralelní inicializace polí 3.39 2023-04-03 * matchlevels se volá paralelně, ale nijak to nezrychlilo 3.38 2023-04-03 * FPNG nastaveno na lepší kompresi (+2 ms, -10 % velikosti souboru) 3.37 2023-04-03 * objevena kritická chyba při duplikování dat do translation_temp translation_temp[pos1] = tmia[pos1++]; se v C++ chová jinak než v C# výsledky už se konečně zdají být použitelné 3.36 2023-03-31 * upravena vnitřní část AdjustTranslations podle změn z C# 3.35 2023-03-31 * opravena chyba při plnění posledního sloupce pixelů (byla i v C#!) už funguje i generování výsledných obrázků, ale nejsou správné 3.34 2023-03-30 * opravena chyba v MatchLevels (chybělo vynulování pracovních polí) vygenerované upng vypadají lépe, ale při jejich aplikaci to stále padá * přidaný debug výpis translation mipmapů v textové podobě 3.33 2023-03-29 * opraveno překrtí několika globálních proměnných lokálními kopiemi už se cosi generuje, ale nevypadá to použitelně 3.32 2023-03-28 (55 kB) * načítání PNG zapouzdřeno do MyLoadPng * přidáno nulování msizes a tsizes 3.31 2023-03-28 (57 kB) + všechno je přepsáno a je to velmi rychlé, jen to nefunguje =} 3.30 2023-03-28 * zarovnání časů výpočtu se dělá pomocí proměnné dotcount * threadsused nastaveno na pevno na 1, ale i tak je výpočet podezřele rychlý (15 ms!) 3.29 2023-03-28 (52 kB) * upraveno formátování časů a rozdělen mezičas Loading/Preparation * pro Release je třeba AVX2! 3.28 2023-03-27 (52 kB) + for (mi = mipcount - 1; mi >= toplevel; mi--) (bez paralelismů) 3.27 2023-03-27 (44 kB) + #include "png-frank3-saving.cpp" 3.26 2023-03-24 (40 kB) + #include "png-frank3-match.cpp" 3.25 2023-03-24 (35 kB) + zahrnuto AdjustTranslations (ale zatím se nevolá) 3.24 2023-03-23 (31 kB) * až po načtení depthmaps a konverzi bitmapů na horní vrstvu mipmapů 3.23 2023-03-23 (25 kB) * přibyla část s načítáním upng (netestováno) 3.22 2023-03-22 (18 kB) * vypisuje se maxthread * načítají se první dva vstupní soubory a případně maska a kontrolují se jejich rozměry 3.21 2023-03-22 (16 kB) * funguje zpracování příkazové řádky 3.20 2023-03-21 * začátek pokusu o přechod do C++ 3.196 [431 ms včetně depth] 3.19 2023-03-17 [366 ms] * optimalizace v GenerateMipmapsGray (nekompletní byla paradoxně trochu rychlejší) 3.18 2023-03-17 [370 ms] * obrazové mipmapy už jsou taky uloženy v 1D polích (-135 ms!) (asi tam jsou stále drobnosti, které by se daly vylepšit) 3.17 2023-03-16 [505 ms] * slepá vývojová větev - kompilátor to zřejmě optimalizuje jinak a lépe 3.16 2023-03-16 [475 ms] * v AdjustTranslation zkratky mmXYmi a další drobnosti 3.15 2023-03-16 [535 ms] * převážně optimalizace v AdjustTranslation (proměné y přesunuty do vyšší smyčky) (mimochodem výpočet teď zabírá cca 60 % celkového času) 3.14 2023-03-16 [542 ms] * drobné optimalizace v inicializaci translation maps (-15 ms) 3.13 2023-03-15 [557 ms] * opravena chyba z 3.12 (mxsize / 2 -> tsizes[mi + 1].Width) 3.12 2023-03-15 [550 ms] * translations předělány na 1D pole (-50 ms) ! v upng jsou proti 3.11 nějaké menší anomálie 3.11 2023-03-15 [597 ms] * drobná optimalizace MergeAndConvertErrorsToReliability (-20 ms) 3.10 2023-03-14 (75 kB) [619 ms] * opraveno exportování chyb v alfa kanálu (zřejmě z 3.05) * define pro přepínání 8-12-12 a 12-12-8 3.09 2023-03-13 (74 kB) [601 ms] * čistka TPNG funkcí * vyhozen parametr E (v podstatě je s UPNG zapnutý stále) ! alfa v transformované masce p použití upng je rozbitá - ale kde to vzníká? 3.08 2023-03-13 * cvičně prohozeno pořadí položek v UPNG (trochu menší soubory?) 3.07 2023-03-13 * upng se používá pro načítání i export 3.06 2023-03-13 * tpng+e8 -> upng * .upng je o cca 20 % větší než samostatné .tpng+e8, ale je to rychlejší o cca 60 ms 3.05 2023-03-12 * zredukovaná část pro A 3.04 2023-03-12 - znovu eliminována proměnná errinherit (ok) ! pokud vyhodím nebo vypnu embedding errors to alpha, tak je zle používá se pro generování morfů z tpng: startInfo.Arguments = fnametpng + _ + fname1 + _ + fname2 + " a"; // + " w"; // a = embedd err to alpha 3.03 2023-03-12 * hybrid 3.01 a 3.02 (ok) 3.02 2023-03-12 (79 kB) - eliminována proměnná errinherit - CreateMipmapGray - embedding errors to alpha - cummerror ! bug: v Tinterru byla po výpočtu vždy nulová chyba 3.01 2023-03-12 * pro výpočty se používá zelená složka 3.00 2023-03-11 (84 kB) - první iterace s očesáním nejzjevnějších zbytečnosti * upraveny výpisy času 2.68 2023-03-7 [806 ms včetně depth] (EOF)