DeScratch

Přehled

autor: Alexander G. Balachnin aka Fizick
verze: 0.9.0.0
stáhnout: http://avisynth.org.ru/, http://avisynth.org/warpenterprises/
kategorie: Pluginy pro vysílané video
požadavky: YV12 Barevné prostředí

Účel

Tento plugin odstraňuje vertikální škrábance z filmů. Také může být použit pro odstraňování horizontálních šumových čar, jako při výpadku signálu z analogových VHS nahrávek (po rotaci obrazu).

Jak pracuje

Plugin nejdřív detekuje škrábance, pak je odstraní.
Pracuje na každém snímku, používá prostorovou informaci jen z aktuálního snímku.
Adaptoval jsem ho pro restauraci mých starých 8 mm filmů, možná bude užitečný ještě někomu.

Detekce škrábanců

Použije nějaké vertikální rozmazání na kopii snímku, pro potlačení tenké struktury obrazu, šikmých čar a šumu.
Hledá lokální extrémy jasu (luma) v každé řádku, s kritériem rozdílu jasu.
Vloží tyto extrémy do nějaké mapy (snímku).
Volitelně zavře vertikální mezery v extrémech vertikálním rozšířením extrémních bodů.
Testuje mapu extrémů s kritérii délky a úhlu, a tak vybere jen skutečně dlouhé škrábance.

Odstranění škrábanců

Škrábance mohou být buď částečně průhledné, hladké (s detaily obrazu), nebo neprůhledné (bez detailů nebo s téměř zničenými).
V prvním případě plugin může odečíst hladkou (rozmazanou) část variace jasových škrábanců od původního obrazu. Detaily obrazu tedy zůstanou zachovány.
V druhém případě plugin nahrazuje poškrábané pixely středními hodnotami jasu z některých sousedních pixelů (v některých řádcích).
Můžeme mít také prostřední případ, nastavením nějakého procenta detailů pro zachování.
Plugin má určitou adaptaci množství zachovaných hodnot (detailů) v souladu s rozdílem jasu pixelů.
Ve všech případech se pro hladší přechody mohou částečně změnit i někteří nejbližší sousedé.

Potřebný software

Program je plugin (filtr) pro Avisynth 2.5.
Testován je s verzí 2.55beta (některé verze mají chybu při Turnleft()! ).
Verze filtru nad 0.2 už nepotřebují Avisynth C rozhraní (avithynth_c.dll) od Kevina Atkinsona.
Kompilovano v MS VC++ Toolkit 2003.

Syntaxe

DeScratch(int mindif, int asym, int maxgap, int maxwidth, int minlen, int maxlen, int maxangle, int blurlen, int keep, int border, int modeY, int modeU, int modeV, int mindifUV, bool mark)

Všechny parametry jsou jmenné a volitelné.

Parametry pluginu

mindif - minimální rozdíl hodnoty pixelu ve škrábanci od sousedních pixelů v jasové ploše
    (od 1 do 255, výchozí 5):
asym - maximální asymetrie sousedních pixelů (od 0 do 255, výchozí 10)
maxgap - maximální uzavírací vertikální mezera (od 0 do 255, výchozí 3)
maxwidth - maximální šířka škrábance (1 nebo 3, výchozí=3)
minlen - minimální délka škrábance (výchozí = 100)
maxlen - maximální délka škrábance (výchozí = 1000)
maxangle - maximální úhel od vertikály (ve stupních, výchozí = 5)
blurlen - rádius vertikálního rozmazání pro analýzu snímku (výchozí = 15)
keep - procento zachovávaných detailů ze škrábanců (výchozí = 100)
border - tloušťka okraje kolem škrábance pro částečnou restauraci (výchozí = 2)
modeY - režim zpracování jasové (luma) plochy (0 - ne, 1 - nízké(černé), 2 - vysoké(bílé), 3 - oba, výchozí=1)
modeU - režim zpracování barevné (chroma) U plochy (0 - ne, 1 - nízké(zelené), 2 - vysoké (červené), 3 - obě, výchozí=0)
modeV - režim zpracování barevné (chroma) V plochy (0 - ne, 1 - nízké(žluté), 2 - vysoké(modré), 3 - obě, výchozí=0)
mindifUV - minimlní rozdíl hodnoty pixelu ve škrábanci od sousedních pixelů pro barevnostní (chroma) plochy
    (od 0 do 255, výchozí 0):
    pokud je = 0, pak vnitřní hodnota mindifUV je stejná jako mindif.
mark - označí škrábanec v ladícím (debug) režimu (true nebo false, výchozí = false)
    (nastavuje vyloučené extrémní pixely na šedé, nastavuje pixely škrábanců na bílé nebo černé)

maxgap, maxwidth, minlen, blurlen, border by měli být zadány v pixelech.

MUSÍTE vyladit parametry pro vaše konkrétní video.
Použijte příkazy AviSynthu Greyscale(), UtoY(), VtoY(), a parametr mark pro vyladění a nastavení.

Příklady

Starý poškrábaný 8 mm film. Horní polovina snímku - před filtrem, spodní polovina snímku - po filtru

Příklad skriptu pro Avisynth (použitý pro klip uvedený výše):

AviSource("input.avi")
LoadPlugin("descratch.dll")
ConvertToYV12()
DeScratch(mindif=2)

Odstraňování horizontálních šumových čar

Takové dlouhé šumové čáry se občas objeví v analogovém zachytávaném materiálu (vypuštění TV nebo VHS řádků, atd). Tento problém byl diskutovaný na Doom9, viz. článek Removal of clicks and scratches (July 10-31, 2004). Ale ve článku se nejdříve používal plugin DeSpot, což pro toto není nejvhodnější nástroj, kvůli velmi slabé úrovni šumu. DeScratch by mohl být efektivnější, nicméně také není ideální (staré verze mohou zpracovávat jen jasovou plochu). Samozřejmě musíte pro zpracování pomocí Descratch otočit (rotovat) klip (a nezapomenout po vyčištění otočit zpět :-).

Podívejte se na výsledky v některých VHS zdrojích (od Ivo).
Horní polovina snímku - před zpracováním , spodní polovina snímku - po zpracování:

Skript použitý pro případ VHS klipu

LoadPlugin("descratch.dll")
AviSource("drop-outs_.avi")
ConvertToYV12()
Crop(0,0,-0,288) # vybere horní část snímku pro ušetření plochy motitoru
input=last
AssumeTFF()
SeparateFields() # pro analogový prokládaný zdroj
TurnLeft()
DeScratch(mindif=4, maxgap=20, minlen=300, blurlen=50, keep=100, border=0, maxangle=0)
TurnRight()
Weave() # obnoví pole
StackVertical(input, last) # Porovná zdrojový snímek a snímek po odstranění škrábanců

Byly použité optimální parametry Descratch - velké minlen, nulový maxangle):

Pro odstranění šumu po vypuštěných barevných řádcích můžete použít režimy modeU, modeV a mindifUV.

Více informací

Podívejte se na doom9 Avisynth fórum, vlákno http://forum.doom9.org/showthread.php?s=&threadid=67794

Licence

Tento program je FREE software, pod GNU GPL licence v2.

Historie verzí:

Omezení v aktuální verzi:

Maximální šířka škrábance je fixována na 1 nebo 3.
Plugin pracuje jen v YV12.

$English Date: 2006/12/15 19:29:25 $

Český překlad:26.4.2009