# 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:

- kompenzaci globálního pohybu sousedních snímků pro silné časové odšumění a restauraci klipu (filmu).
- obnovení zničených snímků interpolací pohybu,
- vytvoření sérií středních snímků (mezisnímků) pro změnu frekvence snímků (fps).
- částečnou stabilizaci pohybu.

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

- CTMedian (Conditional Temporal Median) od Kevina Atkinsona
- a jeho nová verze přejmenovaná na DeSpot (od Fizick) - pro odstraňování teček (spot)
- STMedianFilter od Toma Barryho - trbarry@trbarry.com
- FluxSmooth od Rosse Thomase <ross@grinfinity.com>
- RemoveDirt od Rainera Wittmanna gorw@gmx.de
- DeGrainMedian od Fizick

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í:

- Version 0.1, April 25, 2004 - first public (beta!).
- Version 0.2, April 27, 2004 - fixed bug for non-integer Offset values.
- Version 0.3, May 15, 2004 - fixed bug with DePanStabilize input parameters, set subpixel=2 as default;
  added zoom estimation and ZoomMax parameter, zoom and rotation compensation, log file input, MatchFields parameter.
- Version 0.4, May 16, 2004 - fixed bug with MatchFields for big Offset;
  fixed bug with pixel position for nearest and bilinear interpolation;
  set default MatchFields=true, add pixel aspect, Russian doc.
- Version 0.5, May 22, 2004 - fixed some bug with rotation in Depan
  improved DepanStabilize: changed stabilization method to inertial in wide range;
  added parameters freqmax, dxmax, dymax, zoommax, rotmax, inputlog.
- Version 0.6, May 28, 2004 - minor changed and documented client-server format.
  DepanEstimate: added stab parameter, scenechange at sharp trust changes, range may be 0, show correlation, crop output.
  DepanStabilize: Freqmax is renamed to Cutoff, add adaptive zoom, Fill.
- Version 0.7, May 30, 2004 - DepanEstimate: added improve zoom estimation.
- Version 0.8, June 06, 2004 - DepanInterleave: replaced "Range" parameter to "Prev" and "Next".
- Version 0.9, June 13, 2004 - all clients: added "Mirror" parameter to fill empty borders.
- Version 0.9.1, August 24, 2004 - Fixed bugs with zoom estimation and compensation.
- Version 1.0, September 3, 2004 - Added option for using of external FFTW library (more fast) .
- Version 1.1, September 16, 2004 - Added experimental DepanScenes function.
- Version 1.1.1, October 07, 2004 - fixed bug with compensation near right bottom and top corners,
  changed from FFTW_MEASURE to FFTW_ESTIMATE for more short init, without speed change (for power-2 windows),
  compiled without /G7 flag (as before v.1.0), added FPS script functions to doc. (not public)
- Version 1.1.2, October 09, 2004 - delayed loading of fftw3.dll (now optional).
- Version 1.1.3, November 16, 2004 - fixed bug with infinite shift in DePanStabilize.
- Version 1.1.4, December 15, 2004 - damping parameter in DePanStabilize is now variable (was accidentally fixed =0.9 in all previous versions :-), added notes about MVDepan to documentation.
- Version 1.1.5, December 31, 2004 - bug fixed in DepanEstimate (erroneous motion data) for fftw=true with show=false and info=false
- Version 1.2, April 1, 2005 - added fitlast parameter to fit some last frames range to original position
- Version 1.3, April 29, 2005 - added blur parameter to somewhat hide the sharp mirrored details; blur is horizontal only, at left and right border.
- Version 1.4, May 7, 2005 (published May 29)- DePanStabilize: Zoom adaptive mode addzoom is improved. Adaptive zoom decreasing rate is slower than zoom increasing rate now. Thus, the black empty borders are decreased, and zoom value is more stable now.
- Version 1.4.1, May 30, 2005 - DepanEstimate: fixed bug with log file (A and B symbols swapped) for BFF (all previous versions). Thanks to eugvas for report.
- Version 1.5, June 4, 2005 - improved adaptive zoom; added tzoom parameter for the zoom rise time (was equal to 1/cutoff)
- Version 1.6, August 5, 2005 - added YUY2 support; disabled improved=true mode (was broken); changed default subpixel=1 for DepanInterleave as sufficient for denoising and more fast
- Version 1.7, September 5, 2005 - DePanStabilize: added parameter initzoom - minimal zoom;
  changed limits dxmax, dymax, zoommax, rotmax from hard to soft with larger slope non-linearity.
  Changed cache.
- Version 1.8, March 14, 2006 - DePanEstimate: set FFTW as default if exist, FFTW_MEASURE, little iSSE optimization
  DePanStabilize: added (undocumented :-) string parameters vdx, vdy, vzoom, vrot for AviSynth variables as requested by AI.
  Fixed bug with subpixel=1 YUY2 mode (memory access on refresh).
- Version 1.8.1, May 8, 2006 - DePanStabilize: now stabilize zoom too.
- Version 1.8.2, June 5, 2006 - DePanStabilize: now stabilize zoom on short interval;
  Fixed old bug with rotation.
  DePanEstimate: dxmax or dymax=0 now means do not estimate motion along this coordinate.
- Version 1.8.3, June 11, 2006 - DePanStabilize: now prev and next define maximal lag.
- Version 1.9.0, November 13, 2006 - Isolated DePanEstimate function to separate plugin DePanEstimate.dll (under GNU GPL), removed non-fftw code (now always fftw=true).
- Version 1.9.1, November 27, 2006 - DePanEstimate: more correct processing of dxmax=0 or dymax=0
- DePanEstimate Version 1.9.2, March 25, 2007 - DePanEstimate: parameter extlog to write extended log file with Trust data (as requested by David).
- DePan Version 1.10 beta, May 8, 2007 - DepanStabilize: added new average method,
  small bug fixed in edge interpolation.
DePan Version 1.10.1, January 27, 2008 - fixed bug with blur mode for subpixel=1.

### 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`