# DeScratch

## Abstrato

autor: Alexander G. Balakhnin aka Fizick
versão: 0.5
download: http://bag.hotmail.ru/
categoria: Plugins de Vídeo de Radiodifusão
requisitos: YV12 Colorspace

### Exemplos

Este plugin remove arranhões verticais de filmes. Filme de 8 mm, velho e arranhado. Metade superior do quadro: antes do filtro - metade inferior do quadro: depois do filtro

### Como funciona

O plugin detecta arranhões primeiramente, depois os remove.
Trabalha em cada quadro, usa a informação de espaço só do quadro atual.
Eu o adapto para restauração de meu velho filme de 8 mm, pode ser útil a alguém.

### Detecção de Arranhão

Aplica algum borrão vertical à cópia do quadro, para a supressão da estrutura fina da imagem, linhas inclinadas e ruídos. Procura por extremos lumas locais em cada linha, com critério de diferença de luma.
Põe estes extremos em algum mapa (quadro). Fecha aberturas verticais opcionais nos extremos, expandindo pontos extremos verticais. Testa mapas extremos com critérios de comprimento e ângulo e seleciona arranhões reais.

### Remoção de Arranhão

Os arranhões podem ser qualquer um parcialmente transparente, suave (com detalhes da imagem), ou opaco (sem detalhes ou quase destruídos). No primeiro caso, o plugin pode diminuir a parte suave (borrado) da variação de arranhões luma da imagem original. Então, os detalhes de imagem são mantidos. No segundo caso, o plugin substitui os píxeis arranhados pela média dos valores luma de alguns píxeis vizinhos (na mesma fila). Nós também intermediamos o caso, fixando alguma porcentagem de detalhes a manter. O plugin tem alguma adaptação de valor mantido de acordo com a diferença de píxeis luma.
Em todos os casos, alguns vizinhos mais próximos também podem mudar parcialmente para mais suavidade.

### Software Necessário

O programa é plugin (filtro) para o Avisynth 2.5 livre.
Testado com a versão 2.55beta (algumas versões têm bug com Turnleft())!
O filtro não é mais necessário no Avisynth C Interface (avithynth_c.dll) por Kevin Atkinson.
Compilado com MS VC++ Toolkit 2003.

Escrito de amostra para Avisynth (usado no clipe do exemplo acima):

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

### Parâmetros do Plugin

mindif - diferença mínima do valor do píxel em arranhão dos píxeis vizinhos para plano luma
(de 1 a 255, padrão 5):
maxgap - máxima abertura vertical a ser fechada (de 0 a 255, padrão 3):
maxwidth - largura máxima do arranhão (padrão fixo = 3 na versão atual)
minlen - comprimento mínimo do arranhão (padrão = 100)
maxangle - ângulo máximo para vertical (em graus, padrão = 5)
blurlen - raio do borrão vertical para análise do quadro (padrão = 15)
keep - porcentagem de detalhe do arranhão para manter (padrão = 100)
border - densidade da borda próxima do arranhão para restauração parcial (padrão = 2)
modeY - modo do processo para plano luma (0 - não, 1 - baixo(preto), 2 - alto(branco), 3 - ambos, padrão=1)
modeU - modo do processo para plano croma U (0 - não, 1 - baixo(verde), 2 - alto(vermelho), 3 - ambos, padrão=0)
modeV - modo do processo para plano croma V (0 - não, 1 - baixo(amarelo), 2 - alto(azul), 3 - ambos, padrão=0)
mindifUV - diferença mínima do valor do píxel em arranhão dos píxeis vizinhos para planos croma
(de 0 a 255, padrão 0):
se = 0, então o valor mindifUV interno é o mesmo do mindif.
mark - marca arranhão em modo depurar (true ou false, padrão = false)
(fixa os píxeis extremos rejeitados para cinza, fixa arranhões de píxeis em branco ou preto)

maxgap, maxwidth, minlen, blurlen, border devem ser dados em píxeis.

Você DEVE afinar os parâmetros para seu vídeo.

### Remoção de Linhas Horizontais ruidosas

Tais linhas longas finas e ruidosas às vezes aparecem em material de captura analógica (TV ou VHS). Este problema foi discutido no Doom9, veja o artigo Remoção de cliques e arranhões Removal of clicks and scratches (10-31 de julho de 2004). Mas ele usou meu plugin DeSpot, que não é uma ferramenta muito apropriada para isso, devido ao nível de barulho muito fraco. DeScratch poderia ser mais efetivo, porém não é muito ideal (a versão atual processa só plano luma). Claro que você tem que girar o clipe para processar com Descratch (e não esquecer de girar em direção inversa depois de limpar : -). Veja os resultados para alguma fonte de VHS (de Ivo).

Metade superior do quadro: antes de processar, metade inferior do quadro: depois de processar:

Escrito usado no clipe do exemplo (com ótimos parâmetros Descratch - minlen grande, maxangle nulo):

    LoadPlugin("descratch.dll")
    AviSource("drop-outs_.avi")
    ConvertToYV12()
    Crop(0,0,-0,288) # selecione parte superior do quadro para menor espaço em tela
    input=last
    AssumeTFF()
    SeparateFields() # para fonte analógica entrelaçada
    TurnLeft()
    DeScratch(mindif=4, maxgap=20, minlen=300, blurlen=50, keep=100, border=0, maxangle=0)
    TurnRight()
    Weave() # restaure os campos
    # Compare quadro fonte e o quadro após a remoção do arranhão
    StackVertical(input, last)

Para remoção de perda de cor de linha, você pode usar modeU, modeV e parâmetros mindifUV.

### Licença

Este programa é software LIVRE, mas SEM QUALQUER GARANTIA.

### Log de Mudanças e Downloads da Versão:

- 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.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.3, July 14, 2004 - ported to native Avisynth plugin, Speed increased due to fast blurring by Avisynth resizing functions.
- version 0.2, 31 December 2003 - change to sharp extrems, add gaps closing
- version 0.1, 22 December 2003 - initial beta (not public)

### Limitações da versão atual:

A largura máxima do arranhão é fixada em 3.
O plugin só trabalha em YV12.

`$Date: 2006/03/26 18:11:53 $ Portuguese translation by RoLon`