FluxSmooth
Abstrato
autor: Ross Thomas (Sansgrip)
versão: 1.1a
download: http://www.avisynth.org/warpenterprises/
categoria: Suavizadores Spatio-temporal
requisitos:
- YV12 & YUY2 Colorspace
- Suporte ISSE
Descrição
Uma das propriedades fundamentais dos ruídos é
que são fortuitos. Uma das propriedades fundamentais de movimento é que não são.
Esta é a premissa atrás de FluxSmooth que examina cada píxel e o compara ao
correspondente prévio e último quadro. A suavização acontece se o valor de
ambos são maiores, ou se ambos são menos que o valor no quadro atual.
Eu gosto de chamar isto de "píxel
flutuante", então eu gosto de apagar da existência esse píxel calculando
a média com seus vizinhos. Para FluxSmoothST, isto é feito (padrão) de uma
maneira spatio-temporal, que para cada píxel flutuante, seus 8 vizinhos de espaço
imediato como também seu 2 vizinhos temporais (o píxel acima mencionado das
quadros prévios e próximos correspondentes) são considerados para inclusão
na média. Se o valor de cada píxel estiver dentro do percentual especificado,
é incluído. Se não, não é. FluxSmoothT executa só o calculo da média
temporal.
Este filtro parece remover quase todos os ruídos
de fontes de baixo ruído (como DVD) e muito ruído de fontes de alto ruído
(como captura de TV a cabo), mantendo uma boa quantia de detalhes.
Se sua CPU suporta operações de inteiros SSE
(Intel Pentium III e melhor, AMD Athlon e melhor) uma versão aperfeiçoada do
algoritmo será usada.
Usando FluxSmoothT em vez de FluxSmoothST para
suavização só temporal é muito, muito mais rápido (50% mais rápido em meu
sistema).
Uso
FluxSmoothT
(clip, int "temporal_threshold")
FluxSmoothST
(clip, int "temporal_threshold", int
"spatial_threshold")
Parâmetro |
Significado |
Padrão |
temporal_threshold |
Píxeis vizinhos de temporal dentro deste
percentual do píxel atual são incluídos na média.
Se fixo para -1, nenhum suavizador temporal
acontece. (Não pode ser fixo a –1 em FluxSmoothT ).
|
7 |
spatial_threshold |
Píxeis vizinhos de Spatial dentro deste percentual do píxel atual são
incluídos na média.
Se fixo para -1, nenhum suavizador de espaço
acontece
|
7 |
Assuntos Conhecidos
- As extremidades do quadro não são processadas.
- O primeiro e último quadro de um clipe não são
processados.
- Parece causar uma violação de acesso quando
usado com codificação n-pass em CCE. Eu não pude duplicar isto. Pode ter
sido relacionado ao esvaziamento de memória fixado por fabrice.
TODO
- Aperfeiçoa código SSE com respeito a
emparelhar, baias e assim por diante.
Autor
Ross Thomas <ross at grinfinity.com>
História
- 1.1a Ainda outro lançamento "oops". O píxel
atual é considerado uma vez mais no código do cálculo da média - eu
achei a falta disto muito agressiva, especialmente durante movimento rápido.
Também fixado o estúpido "3am bug" que envolve um par de variáveis.
Eu tinha declarado estática que não deve ter sido. Graças a krieger2005
por descobrir isso e ARDA por diagnosticá-lo.
- 1.1 Mudado o código do cálculo da média de forma
que o píxel atual é excluído e produz melhor redução de ruídos. Também
divide o código em dois filtros diferentes, FluxSmoothT e FluxSmoothST. O
anterior faz suavização só temporal (equivalente a fixar
"spatial_threshold=-1 " em FluxSmoothST) e é aproximadamente 50%
mais rápido. Removida a versão Avisynth 2.0x para arrumar a base de código.
Alguém ainda o usa? Meu agradecimento a fabrice e sh0dan para o lançamento
1.01 durante minha ausência estendida :).
- 1.01 Incluído por sh0dan:
- Removido leak em AviSynth 2.5 modo YV12 (código
por fabrice)
- Tabelas e variáveis alinhadas.
- Usar AviSynth BitBlt para copiar croma.
- Não use salvar fluxo. (movntq)
Ao todo um aumento aproximado de 15% de
velocidade comparado à versão anterior. Todas as mudanças são marcadas
com "sh0":.
- 1.0 Primeira "liberação estável". Eu
acho que está bem testada, mas espere emergir uma porção de bugs e me
chamar de mentiroso... Fixado um bug que, junto com um no resizers embutido,
causou uma violação de acesso sob certas circunstâncias. Graças a sh0dan
por descobrir isso:). Incluído SetCacheHints e atualizado no
"AvisynthPluginInit2" na versão 2.5.
- 0.4 Implementada a versão iSSE aperfeiçoada que
roda com aproximadamente o dobro da velocidade da versão C++. Algumas
pequenas otimizações para a versão C++. Agora suavisa croma e também
luma.
- 0.3 Fixado bug ruim que causou suavização
incorreta: nenhum filtro no lugar mais. Padrões mudados para onde eles
estavam, agora que o algoritmo trabalha corretamente. Gastado algum tempo
testando o nível e afinando vários pedaços de código, assim deve ser
agora significativamente mais rápido.
- 0.2 Fixado bug não fatal que causou um pedido para
um quadro além do fim do clipe. Mudado para filtro no lugar, assim pode
pressionar algumas otimizações aqui e lá. Mudados padrões muito alto.
Primeira liberação Avisynth 2.5/YV12.
- 0.1 Primeira liberação. Código alfa.
$Date: 2006/03/26 18:11:53 $ Portuguese translation by RoLon