DePan & DePanEstimate

Nástroje pro odhad a kompenzaci globálního pohybu (pan - panoramování)

Přehled

autor: Alexander G. Balachnin aka Fizick
verze: 1.10.1
stáhnout: http://avisynth.org.ru, http://avisynth.org/warpenterprises/
kategorie: Různé pluginy
požadavky: YV12 nebo YUY2 Barevné prostředí
licence: uzavřený zdroj

Úvod

Tento balík obsahuje nástroje (funkce) pro odhad globálního pohybu (pan) ve snímcích, a pro plnou nebo částečnou globální kompenzaci pohybu.

Nástroje mohou být použity pro:

Plugin DePan nahradil můj experimentální GenMotion C-plugin (který používá data pohybu z log souboru VirtualDub pluginu Deshaker).

Balík může pracovat v jednom průchodu, obsahuje serverovou část (funkce DePanestimate) a jednu nebo více klientských částí (funkcí nebo jejich instancí). Serverová funkce odhaduje data pohybu snímků a vysílá je do klientských funkcí na požádání. Jako kontejner pro data pohybu se používá speciální služební klip.

Funkce pluginu DePanEstimate

Funkce DePanEstimate

Tato fukce používá metodu fázového posunu (podle rychlé Fourierovy transformace) pro kompenzaci globálního pohybu. Používá některé centrální oblasti každého snímku (nebo pole) jako FFT okno pro nalezení mezisnímkové korelace a pro výpočet nejvhodnějších hodnot vertikálního a horizontálního posunutí, které přizpůsobí aktuální snímek předchozímu. Jako míra důvěry je použit nějaký relativní korelační parametr a ten je také použit pro detekci změny scény. V zoom režimu plugin používá levá a pravá podokna pro odhad jak posunutí tak přiblížení. Výstupem je speciální služební klip se zakódovanými daty pohybu ve snímcích, a volitelně log soubor.

Výzva funkce:

DePanEstimate ( clip, int range, float trust, int winx, int winy, int dxmax, int dymax, float zoommax, bool improve, float stab, float pixaspect, bool info, string log, bool debug, bool show, string extlog, bool fftw)

Parametry DePanEstimate:

clip - vstupní klip
range - počet předchozích (a také následujících) snímků (polí) poblíž žádaného snímku pro odhad pohybu (celočíselná hodnota >=0, výchozí=1)
trust - limit relativního rozdílu maximální korelace od střední hodnoty změny scény (0.0 až 100.0, výchozí=4.0)
winx - počet sloupců (šířka) fft okna (musí být mocninou čísla 2  pokud není fftw, výchozí = maximální možná (mocnina 2) šířka uvnitř snímku).
winy - počet řádků (výška) fft okna (musí být mocninou čísla 2  pokud není fftw, výchozí = maximální možná výška (mocnina 2) uvnitř snímku).
dxmax - limit x-ového posunu (výchozí = winx/4)
dymax - limit y-ového posumu (výchozí = winy/4)
zoommax - maximální přibližovací (zoom) součinitel (pokud = 1 (výchozí), přiblížení není odhadováno)
improve - zlepší odhad přiblížení iterováním (výchozí = false). Od v1.6 je tento režim zrušen.
stab - snižuje vypočtenou korelaci pro velká posunutí ( součinitel typu dxmax/(dxmax + stab*abs(dx)) ):
    = 0.0 (výchozí)- bez snížení,
    = 1.0 - polovina dxmax, dymax.
pixaspect - protažení stran pixelu (výchozí = 1.0)
info - zobrazí informaci o pohybu do snímku (výchozí = false)
log - vysílá jméno log souboru s daty pohybu (ve formátu pluginu Deshaker z VirtualDubu) (výchozí není, nezapisuje se)
debug - vysílá data pro utilitu debugview (výchozí = false)
show - zobrazí korelační plochu (výchozí = false)
extlog - vysílá jméno rozšířeného log souboru s daty pohybu a parametru korelace (výchozí není, nezapisuje se)
fftw - použije externí FFTW knihovnu (od v1.9 - vždy true)

Poznámky. trust parametry definují některé prahové hodnoty mezisnímkové podobnosti (korelace). To definuje jak podobný musí být aktuální snímek předchozímu snímku ve stejné scéně. DePanEstimare detekuje změnu scény aktuálního snímku, pokud je aktuální hodnota korelace níže než prahová hodnota. Nastavte ji níže pro odvrácení chybných detekcí změny scény, nastavte ji výše pro odvrácení přeskočení skutečné změny scény (s třesením). Výchozí hodnota je dobrá pro většinu videí, ale můžete ji testovat v info režimu.

Funkce pluginu DePan

DePan (klient) - provádí plnou nebo částečnou kompenzaci globálního pohybu
DePanInterleave (klient) - generuje dlouhý prolínaný klip s kompenzací pohybu
DePanStabilize (klient) - stabilizuje pohyb
DePanScenes(klient) - indikuje změny scén

DePan

Generuje klip se snímky s kompenzovaným pohybem, použitím dat pohybu, dříve vypočtených v DePanEstimate.

Výzva funkce:

DePan (clip, clip data, float offset, int subpixel, float pixaspect, bool matchfields, int mirror, int blur, bool info, string inputlog

Parametry DePan:

clip - vstupní klip (stejný jako vstupní klip pro DePanEstimate)
data - speciální služební klip s kódovanými daty pohybu, vytvořený pomocí DePanEstimate
offset - hodnota kompenzace posunu (offset) pro všechny vstupní snímky (pole) (od - 10.0 do 10.0, výchozí =0)
    = 0 je nulová transformace.
    = -1.0 je plná zpětná kompenzace pohybu následujícího snímku (pole) k aktuálnímu,
    = 1.0 je plná dopředná kompenzace pohybu předchozího snímku (pole) k aktuálnímu,
    = -0.5 je zpětná poloviční kompenzace následujícího snímku (pole) k aktuálnímu,
    = 0.5 je dopředná poloviční kompenzace předchozího snímku (pole) k aktuálnímu,
    = 0.3333333 je dopředná třetinová kompenzace předchozího snímku (pole) k aktuálnímu,
    = -1.5 je zpětná částečná kompenzace následujícího snímku po následujícím (n+2) snímku (poli) k aktuálnímu (n),
    = 2.0 je plná dopředná kompenzace pohybu předchozího snímku předchozího snímku (n-2) (pole) k aktuálnímu (n),
    a tak dál.
subpixel - přesnost interpolace pixelu (výchozí = 2)
    0 - pixelová přesnost (na nejbližší pixel), žádná interpolace (rychlá),
    1 - subpixelová přesnost s bilineární interpolací, (optimální pro odšumění)
    2 - subpixelová přesnost s bikubickou interpolací (nejlepší, ale pomalá).
pixaspect - protažení pixelu (výchozí = 1.0)
matchfields - zarovnat vertikální pozici prokládaných polí pro zachování pořadí polí, lepší odšumění atd. (výchozí=true)
mirror - vyplní prázdné okraje pixely ze zrcadlových okrajů (namísto černými):
    0 - bez zrcadlení (výchozí);
    1 - horní;
    2 - spodní;
    4 - levé;
    8 - pravé;
    suma výše uvedených - kombinace (15 - celkem ).
blur -  rozmazává zrcadlenou zónu použitím dané maximální délky rozmazání (výchozí=0,  nerozmazávat;   dobré hodnoty jsou nad 30)
info - zobrazuje informace o pohybu do snímku (výchozí=false).
inputlog - jméno vstupního log souboru v Deshaker formátu (výchozí - není, nečte)

Poznámka: Parametr offset funkce DePan je rozšířenou verzí parametru delta funkce GenMotion.

DePanInterleave

Generuje dlouhý prolínaný klip se sériemi skupin v pořadí: předchozí snímky pohybově kompenzované (uvnitř nějakého rozsahu), původní snímek, následují pohybově kompenzované snímky (uvnitř rozsahu), a stejné skupiny pro všechny následující snímky. Ve skutečnosti kombinuje funkci DePan a vnitřní AviSynth funkci Interleave pro usnadnění následujícího časového odšumění, s následující funkcí SelectEvery(prev+next+1, prev) pro výběr jen původních očištěných zdrojových snímků.

Výzva funkce:

DePanInterleave (clip, clip data, int prev, int next, int subpixel, float pixaspect, bool matchfields, int mirror, int blur, bool info, string inputlog)

Parametry DePanInterleave jsou podobné Depan:

clip - vstupní klip (stejný jako vstupní klip pro DePanEstimate)
data - speciální služební klip s kódovanými daty pohybu, vytvořený pomocí DePanEstimate
prev - počet předchozích snímků (polí) ve skupině pro kompenzování (celočíselné>0, výchozí=1)
next - počet následujících snímků (polí) ve skupině pro kompenzování (celočíselné>0, výchozí=1)
subpixel - přesnost interpolace pixelu (výchozí = 2)
    0 - pixelová přesnost (na nejbližší pixel), žádná interpolace (rychlá),
    1 - subpixelová přesnost s bilineární interpolací, (optimální pro odšumění)
    2 - subpixelová přesnost s bikubickou interpolací (nejlepší, ale pomalá).
pixaspect - protažení pixelu (výchozí = 1.0)
matchfields - zarovnat vertikální pozici prokládaných polí pro zachování pořadí polí, lepší odšumění atd. (výchozí=true)
mirror - vyplní prázdné okraje pixely ze zrcadlových okrajů (namísto černými):
    0 - bez zrcadlení (výchozí);
    1 - horní;
    2 - spodní;
    4 - levé;
    8 - pravé;
    suma výše uvedených - kombinace (15 - celkem ).
blur -  rozmazává zrcadlenou zónu použitím dané maximální délky rozmazání (výchozí=0,  nerozmazávat;   dobré hodnoty jsou nad 30)
info - zobrazuje informace o pohybu do snímku (výchozí=false).
inputlog - jméno vstupního log souboru v Deshaker formátu (výchozí - není, nečte)

DePanStabilize 

Tato funkce provádí určitou stabilizaci obrazu (deshake) vyhlazením globálního pohybu. Je použita inerční (setrvačná) metoda (pravděpodobně podobná VirtualDub pluginu Digistudio).

Výzva fukce:

DePanStabilize (clip, clip data, float cutoff, float damping, bool addzoom, int prev, int next, int mirror, int blur, int dxmax, int dymax, float zoommax, float rotmax, int subpixel, float pixaspect,  int fitlast, float tzoom, bool info, string inputlog, int method)

Parametry funkce DePanStabilize:

clip - vstupní klip (stejný jako vstupní klip pro DePanEstimate);
data - speciální služební klip s kódovanými daty pohybu, vytvořený pomocí DePanEstimate;
cutoff - frekvence oříznutí potlačovaných vibrací, Hertz (výchozí = 1.0);
damping - poměr tlumení (výchozí = 1.0);
initzoom - počáteční (minimální) přiblížení (zoom) pro vyplnění okrajů (výchozí = 1.0);
addzoom - použije přídavné adaptivní přiblížení (výchozí=false);
prev - maximální zpoždění některého předchozího snímku pro vyplnění prázdných okrajů (namísto černých):
    0 - nevyplňovat (výchozí),
    1 - použije nejbližší předchozí (n-1) snímek pro vyplnění obrysů aktuálního snímku (n) ,
    2 - použije předchozí (n-2) snímek pro vyplnění (ne vše v rozsahu !),
    a tak dále.
next - maximální zpoždění následujícího snímku pro vyplnění prázdných okrajů (namísto černých):
    0 - nevyplňovat (výchozí),
    1 - použije nejbližší následující (n+1) snímek pro vyplnění obrysů aktuálního snímku (n),
    2 - použije následující (n+2) snímek pro vyplnění (ne vše v rozsahu !),
    a tak dále.
mirror - vyplní prázdné okraje pixely ze zrcadlových okrajů (namísto černými):
    0 - bez zrcadlení (výchozí);
    1 - horní;
    2 - spodní;
    4 - levé;
    8 - pravé;
    suma výše uvedených - kombinace (15 - celkem ).
blur -  rozmazává zrcadlenou zónu použitím dané maximální délky rozmazání (výchozí=0,  nerozmazávat;   dobré hodnoty jsou nad 30)
dxmax - limit horizontální korekce, v pixelech (výchozí = 60);
dymax - limit vertikální korekce, v pixelech (výchozí = 30);
zoommax - limit korekce přiblížení (jen adaptivní přiblížení, výchozí = 1.05);
rotmax - limit korekce rotace, ve stupních (výchozí = 1.0);
    tyto hodnoty omezují korekci (od v1.7 - přibližně, ne přísně )
subpixel - přesnost interpolace pixelu (výchozí = 2)
    0 - pixelová přesnost (na nejbližší pixel), žádná interpolace (rychlá),
    1 - subpixelová přesnost s bilineární interpolací, (optimální pro odšumění)
    2 - subpixelová přesnost s bikubickou interpolací (nejlepší, ale pomalá).
pixaspect - protažení pixelu (výchozí = 1.0);
fitlast - přispůsobí některé poslední snímky rozsahu původním pozicím (celočíselný rozsah, výchozí=0)
tzoom - čas navýšení adaptivního přibližování, v sekundách (desetinný, výchozí=3.0)
info - zobrazí informace o pohybu do snímku (výchozí=false).
inputlog - jméno vstupního log souboru v Deshaker formátu (výchozí - není, nečte)
method - použitá metoda pro stabilizaci:
    0 - inerční - setrvačná (výchozí);
    1 - průměrná (nová od v1.10)

DePanScenes

Generuje klip s hodnotou pixelu =255 pro definovanou plochu při změně scény a hodnotách pixelů =0 v ostatních snímcích,
použitím dat pohybu vypočtených dříve v DePanEstimate.

Může být použit funkcí AverageLuma pro podmíněné zpracování.

Výzva funkce:

DePanScenes ( clip, string inputlog, int plane)

 Parametry DePanScenes:

clip - vstupní klip (speciální služební klip s kódovanými daty pohybu, vytvořený pomocí DePanEstimate)
inputlog - jméno vstupního log souboru v Deshaker formátu (výchozí - není, nečte)
plane - kód plochy pro označení (1 - Y, 2 - U, 4 - V, sum - kombinace, výchozí=1)

Zvláštnosti a omezení

   1. Pracuje jen s YV12 a YUY2 barevnými formáty.
    2. Používá jen pohyby posunu (pan) a přiblížení (zoom) (ne rotaci), ale to dává přednosti jako jsou rychlost a stabilita. Odhad v režimu zoom není velmi přesný.
    3. Zdrojový klip musí být shodné délky jako klip pohybových dat.
    4. Přímo pracuje jen s progresivními klipy. Pro prokládané zdroje musíte před tím použít AviSynth funkci SeparateFields a později Weave
(po kompenzaci pohybu a odšumění), s AssumeTTF a AssumeBFF (obě mohou být potřeba pro posunutí lichých polí). Plugin vyhodnocuje počítaný pohyb od jednoho pole k sousednímu (podle času) poli (od stejného nebo následujícího snímku). Pro zachování pořadí polí (dominance) a nejlepší odšumění, nastavte parametr MatchFields=true.
    5. Mirror režim je jedinečný, ale trochu divný :-). Použijte blur pro skrytí ostrých zrcadlených detailů.
    6. Ne příliš rychlý, bez assembler optimalizace.
    7. Testováno s Avisynthem 2.5.3, 2.5.4, 2.5.5, 2.5.6, 2.5.7.
    8. Staré verze DePanEstimate používali free FFT2D kód od Takuya Ooura (http://momonga.t.u-tokyo.ac.jp/~ooura/index.html)
Teď DePanEstimate používá jen rychlejší FFTW knihovnu verze 3 (http://www.fftw.org)
jako Windows binární DLL (kompilovanou v gcc pod MinGW od Alessio Massaro),
která podporuje vlákna a má navíc podporu AMD K7 (3dNow!) k SSE/SSE2.
Můžete ho stáhnout z ftp://ftp.fftw.org/pub/fftw/fftw3win32mingw.zip
Aby jste ji mohli použít musíte vložit soubor FFTW3.DLL z tohoto balíku do některé složky na cestě při prozkoumávání (například C:\WINDOWS\SYSTEM32). DePanEstimate bez toho NEPRACUJE!
    9. Pro nejlepší výsledky, můžete dočasně přidat parametr Info, analyzovat informace a vyladit některé parametry (Trust, dxmax atd).
    10. Můžete použít ne přísně stejné klipy pro odhad pohybu a kompenzaci, například zkuste přidat nějakou úpravu jasu a kontrastu, předfiltrování, maskování, oříznutí na vstupní klip použitého jen pro odhad pohybu (a použití jiného zpracování pro výstupní kompenzované-stabilizované výsledky).

Použití

Příprava prolínaného pohybově kompenzovaného klipu s následným silným časovým odšuměním

1. Načtěte zdrojový (vstupní) klip (I),
2. Vytvořte klip (F) s plnou dopřednou kompenzací pohybu,
3. Vytvořte klip (B) s plnou zpětnou kompenzací pohybu,
4. Vytvořte prolínaný klip s kompenzovanými snímky před a po každém původním snímku;
Dostaneme dlouhý klip (s trojnásobnou délkou), s každými 3 posloupnými snímky, odpovídajícími stejnému času.
5. Aplikujte nějaký časový filtr, který používá rozdíly pixelu mezi předchozím, aktuálním a následujícím snímkem, například filtr Fluxsmooth.
6. Vyberte každý třetí (původní nekompenzovaný, ale očištěný) snímek pro výstup.
Očištěný klip nemá mnoho artefaktů, vytvářených globálním pohybem s odšuměním, a odšumění bude silnější ve většině oblastí (pohyb kamery bude kompenzován.)

Poznámky: s DePanInterleave, jsou stadia 2,3,4 spojeny do jednoho. Kromě toho může být rozsah větší než 1.

Jednoduchý příklad skriptu pro progresivní klip:

AviSource("input.avi")
LoadPlugin("depanestimate.dll") # nebo použijte autonačítání
LoadPlugin("depan.dll")         # nebo použijte autonačítání
LoadPlugin("fluxsmooth.dll")    # nebo použijte autonačítání

i = ConvertToYV12()
mdata = DePanEstimate(i)
DePanInterleave(i, data=mdata)
FluxSmooth()
SelectEvery(3, 1)

Pro nejlepší výsledky můžete dočasně přidat parametr Info, analyzovat informace a vyladit některé parametry (Trust, dxmax atd.).

Příklad skriptu pro prokládaný klip:

AviSource("input.avi")
LoadPlugin("depanestimate.dll") # nebo použijte autonačítání
LoadPlugin("depan.dll")         # nebo použijte autonačítání
LoadPlugin("fluxsmooth.dll")    # nebo použijte autonačítání
AssumeTFF()
SeparateFields()
i = ConvertToYV12()
mdata = DePanEstimate(i, range=1, trust=5.5, log="depan.log")
DePanInterleave(i,data=mdata, prev=1, next=1, matchfields=true)
FluxSmooth()
SelectEvery(3, 1)
Weave()

Některé vhodné časové (temporal) odšumovací filtry

Testujte prosím pro přidání dalších filtrů do seznamu!

Pro navrženou metodu odšumění s použitím DePan (dříve s GenMotion), takový časový filtr musí porovnat pixel s předchozím a následujícím snímkem, a udělat nějaké vyhlazení, pokud je mezi předchozím a následujícím snímkem malý rozdíl. Tyto filtry také mohou vytvořit dodatečnou vnitřní (malou) lokální kompenzaci pohybu (jako filtr Dust, který může získat nějaké urychlení díky dobré globální kompenzaci pohybu).

Změna snímkové frekvence

DePan může být použit jako nástroj pro převod frekvence snímků a podobné úlohy.

Například pro změnu frekvence snímků se součinitelem=1.5, z progresivních 16.6 fps (staré 8 mm filmy) na 25 fps, použijte skript.

AviSource("kino.avi")
i = ConvertToYV12()
LoadPlugin("depanestimate.dll") # nebo použijte autonačítání
LoadPlugin("depan.dll")         # nebo použijte autonačítání
data = DePanEstimate(i, range=1, trust=5)
f1_3 = DePan(i, data, offset=1./3)
b1_3 = DePan(i, data, offset=-1./3)
Interleave(f1_3, i, b1_3)
SelectEvery(6, 0, 1, 2)

Může to být zapsáno jako funkce:

function fps2to3(clip) {
# změna FPS ze 2 na 3 (nebo 16.66 na 25, nebo 20 na 30 atd.), t.j. se součinitelem=3/2
# použije kompenzaci globálního pohybu
# vstup musí být YV12 nebo YUY2 progresivní (nebo pravděpodobně rozdělená pole ?)
data = DePanEstimate(clip)
f1_3 = DePan(clip, data, offset=1./3)
b1_3 = DePan(clip, data, offset=-1./3)
Interleave(f1_3, clip, b1_3)
SelectEvery(6, 0, 1, 2)
}

AviSource("e:\video.avi")
LoadPlugin("depanestimate.dll") # nebo použijte autonačítání
LoadPlugin("depan.dll")         # nebo použijte autonačítání
ConvertToYV12()
fps2to3()
        Zde je možná funkce pro převod frekvence snímků (progresivní) s faktorem=5/3, například z 15 fps na 25 fps :
function fps3to5(clip) {
# změna FPS ze 3 na 5 (nebo 15 na 25, nebo 18 na 30 atd.), t.j. se součinitelem=5/3
# použije kompenzaci globálního pohybu
# vstup musí být YV12 nebo YUY2 progresivní (nebo pravděpodobně rozdělená pole ?)
data = DePanEstimate(clip)
t3_5 = DePan(clip, data, offset=-2./5)
t6_5 = DePan(clip, data, offset=1./5).trim(2,0)
t9_5 = DePan(clip, data, offset=-1./5).trim(1,0)
t12_5 = DePan(clip, data, offset=2./5).trim(3,0)
Interleave(clip, t3_5, t6_5, t9_5, t12_5)
SelectEvery(15,0,1,2,3,4)
}

AviSource("e:\video.avi")
LoadPlugin("depanestimate.dll") # nebo použijte autonačítání
LoadPlugin("depan.dll")         # nebo použijte autonačítání
ConvertToYV12()
fps3to5()

Poznámky. Existuje jednodušší a obecnější metoda: zkuste ChangeFPS následovanou DePanStabilize.

Stabilizace pohybu

DePanStabilize může být použit jako nástroj pro vyhlazení globálního pohybu. V aktuální verzi je použita inerční filtrační metoda.

Jednoduchý příklad skriptu pro progresivní klip:

AviSource("input.avi")
LoadPlugin("depanestimate.dll") # nebo použijte autonačítání
LoadPlugin("depan.dll")         # nebo použijte autonačítání
i = ConvertToYV12()
mdata = DePanEstimate(i)
DePanStabilize(i, data=mdata)

Můžeme přidat a vyladit parametry cutoff, dxmax, metodu vyplnění prázdných okrajů, odpovídající vašemu klipu a vám.

Detekce a logování změny scén

Vytvořte soubor s čísly snímků změn scén. Přehrajte celý klip.

LoadPlugin("depanestimate.dll") # nebo použijte autonačítání
LoadPlugin("depan.dll")         # nebo použijte autonačítání
filename="test.log"
avisource("g:\test.avi")
ConvertToYV12(interlaced=false)
data=DepanEstimate(trust=2.5)
WriteFileIf(filename, "(AverageLuma(DepanScenes(data))>30)" , "current_frame")

Použití log souborů

Funkce DepanEstimate může zapisovat volitelný log soubor s daty pohybu, v Deshaker - kompatibilním formátu. Kromě toho může funkce Depan číst takové log soubory (v tomto režimu pracuje jako GenMotion, bez DepanEstimate, klip s daty je ignorován, a zdrojový klip může být použit jako datový klip). Deshaker log může být načten do Depan a naopak. Depan může také kompenzovat přiblížení (zoom) a rotaci. Proto můžete načíst podobné AVS skriptové soubory do VirtualDubu, a spustit druhý průchod Deshaker pro pokročilou stabilizaci obrazu (a kódování) filtrovaného klipu. Samozřejmě, před tím musíte spustit první průchod DePanEstimate pro vytvoření Depan.log souboru, který musí být vybrán v Deshaker. Místo toho, můžete do skriptu přidat funkci DePanStabilize(i,data) a spustit vše v jednom průchodu !

Od v1.9.2 je možné zapsat rozšířený log soubor s přídavnými daty "Trust" po snímku.

Formát Deshaker log souboru (Gunnar Thalin)

V průběhu 1. průchodu zkouší plugin Deshaker najít hodnoty posunutí, rotace a přiblížení které, když se použijí na aktuální obraz, vytváří to, že vypadá jako předchozí obraz (téměř). Hodnoty v každém řádku souboru jsou (z leva do prava): číslo snímku (nebo číslo pole), x- a y-posunutí (v pixelech), rotace (ve stupních) a součinitel přiblížení. Můžete log soubor upravit ručně (ale použijte pevný formát řádku). Můžete smazat řádky, které jsou úplně špatné (i Deshaker chybuje). Chybějící řádky se stejnými čísly snímků jsou brány jako s nulovým posunem, nulovou rotací a bez přiblížení. Pokud existují řádky se stejnými čísly snímků, použije se poslední řádek.

Poznámka: Pro prokládaný zdroj je informace pro každé pole (A - první, B - druhé v čase)

Formát snímkového bufferu DePan & DepanEstimate pro klient-server (hlavně pro programátory)

Depan & DepanEstimate používají snímkový buffer speciálního klipu pro uchování dat pohybu. Když klient (Depan) žádá data pohybu pro snímek n z tohoto klipu, server (DepanEstimate) vytvoří snímek a zapíše do něj taková data (na začátku snímkového bufferu): jeden záznam hlavičky, a záznamy dat pohybu několika snímků, od n-rozsah do n+rozsah (nsnímků = 2*rozsah+1 pro ne-krajní snímky). Definice parametrů dat pohybu je stejná jako v Deshaker logu.

Ve všech verzích od 0.6 používám tyto struktury:

#define DEPANSIGNATURE "depan06"

typedef struct depanheaderstruct { // structure of header depandata in framebuffer
char signature[8]; // signature for check
int reserved; // for future using
int nframes; // number of records with frames motion data in current framebuffer
} depanheader;

typedef struct depandatastruct { // structure of every frame motion data record in framebuffer
int frame; // frame number
float dx; // x shift (in pixels) for this frame
float dy; // y shift (in pixels, corresponded to pixel aspect = 1)
float zoom; // zoom
float rot; // rotation (in degrees), (now =0 - no rotation estimated data in current version DePanEstimate)
} depandata;

Poznámka 1. Depan používá dx=0.0 jako značku změny scény.
Poznámka 2. Výstup z DepanEstimate je oříznut, pokud není v zobrazovacím nebo info režimu.
Viz. depanio.cpp zdrojový kód pro podrobnosti.

Alternativní metoda pro odhad globálního pohybu

Před nějakým časem jsem přidal do odhadu lokálního pohybu pluginu MVTools od Manaa (od verze 0.9.8.2) novou funkci MVDepan pro odhad globálního pohybu. Je založen na analýze vektorů pohybu lokálních bloků, podobné prvnímu průchodu v pluginu DeShaker. Funkce MVDepan může být použita místo DepanEstimate. Může odhadovat posunutí, přiblížení a rotaci.

Více informací o Depan

Trocha diskuze o pluginech GenMotion a DePan je v AviSynth fóru na
http://forum.doom9.org/forumdisplay.php?s=&forumid=33
zvlášť ve vlákně http://forum.doom9.org/showthread.php?s=&threadid=66686

Poděkování

Děkuji Gunnaru Thalinovi za detailní informaci o formátu Deshaker log souboru a velmi užitečnou diskuzi.

Díky Takuyaovi Oouraovi za free a rychlý FFT2D kód použitý v prvních verzích DePan.

Díky scharfis_brain a mnoha dalším za užitečnou diskuzi a zprávy o chybách.

Historie verzí:

Licence

Plugin DePanEstimate je free software distribuovaný pod licencí GNU GPL. Viz gpl.txt pro podrobnosti.
Plugin DePan je freeware, BEZ JAKÉKOLI ZÁRUKY. Nesmíte ho distribuovat bez této dokumentace.
Dokumentace je distribuována pod CreativeCommons BY-SA 3.0 license.

Zvažte prosím dotaci, aby jste se stali registrovaným uživatelem.

Stáhnout

Stáhnout DePan Tools verze 1.10.1

Stáhnout DePanEstimate verze 1.9.2

$English Date: 2006/08/25 02:18:25 $

Český překlad:23.4.2009