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

- Version 0.1, 22 December 2003 - initial beta (not public)
- Version 0.2, 31 December 2003 - first public
  - changed to sharp extrems;
  - added gaps closing
- Version 0.3, July 14, 2004
  - ported to native Avisynth plugin
  - Speed increased due to fast blurring by Avisynth resizing functions.
- Version 0.4, July 17, 2004
  - Added chroma processing: modeY, modeU, modeV parameters,
  - introduced in version 0.4 after Ivo's request (old versions can process luma only).
  - mindif is now positive only;
  - marked scratches value is not inverted but contrasted now.
- Version 0.5, July 31, 2004
  - fixed read-write pointer bug,
  - add mindifUV parameter for separate control of chroma U,V planes cleaning,
  - some code reorganization,
  - documentation corrected.
- Version 0.6, August 23, 2004 - fixed byte overflow bug (clip output to 0-255)
- Version 0.7, November 15, 2004 - added asymmetry check (asym parameter)
- Version 0.8, March 13, 2005 - added maxlen parameter
- Version 0.9, March 31, 2005 - maxwidth parameter partially unfixed, allowed value =1 or 3 (was 3 only)
- Version 0.9.0, June 15, 2005 - documentation re-formatted
- Version 0.9.0.0, September 09, 2006 - source licensed under GNU GPL v2

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