Qual algoritmo de redimensionamento escolher para vídeos?

21

Estou usando o VirtualDub para codificar com essas configurações . redimensionar algoritmos

No entanto, gravo minhas coisas em 1920x1080 e redimensiono para 1280x720. Agora a pergunta: qual algoritmo devo escolher ao tomar uma decisão equilibrada de qualidade versus tamanho de arquivo?

Eu sempre fui com Lanczos porque era isso que era pré-configurado. Essas descrições realmente não me ajudam em nada na minha pergunta.

Urso mal-humorado
fonte

Respostas:

25

TL; DR

Ao amostrar para baixo: use a filtragem Lanczos ou Spline.

Para amostragem: Use a filtragem Bicubic ou Lanczos.

Elas são baseadas no material que li ao longo dos anos e no que vi usado na indústria. As recomendações podem variar dependendo do tipo de conteúdo e da área de aplicação.

Por que isso Importa?

Pode-se argumentar que os filtros de redimensionamento não importam muito quando você reduz o tamanho de um vídeo. Mais importante, eles têm um impacto na qualidade durante o upscaling, porque você precisa gerar dados onde não existem.

Todos esses filtros têm apenas um impacto marginal no tamanho do arquivo. Portanto, você não deve se preocupar com grandes diferenças por lá.

O fato é que, como sempre, ao codificar o vídeo, o resultado depende muito do material de origem. Você nem sempre pode prever o resultado, mas apenas veja o que funciona melhor para você.

Algoritmos diferentes

Como exemplo, aqui está a interpolação bicúbica versus bilinear :

     insira a descrição da imagem aqui

Veja que a interpolação bicúbica resulta em bordas mais suaves? Essa é uma afirmação muito geral ... mas você pode encontrar uma visão geral dos algoritmos de dimensionamento de imagem aqui .

  • A interpolação bilinear usa um ambiente 2x2 de um pixel e, em seguida, leva a média desses pixels para interpolar o novo valor. Não é o melhor algoritmo, mas rápido.

  • A interpolação bicúbica usa um ambiente 4x4 de um pixel, pesando mais os pixels mais internos e, em seguida, leva a média para interpolar o novo valor. É - no que me diz respeito - o mais popular.

  • A média da área usa um mapeamento dos pixels de origem e de destino, calculando a média dos pixels de origem em relação à fração de pixels de destino cobertos. De acordo com esta página , deve produzir melhores resultados ao reduzir a amostragem.

  • A spline e a interpolação sinc usam polinômios de ordem superior e, portanto, são mais difíceis de calcular do que a interpolação bicúbica. Não acho que o aumento geral no tempo de processamento valha a pena usá-los.

  • A reamostragem de Lanczos também envolve um filtro sinc. É mais caro em termos de computação, mas geralmente é descrito como uma qualidade muito alta e pode ser usado para aumentar e diminuir a amostragem.

  • Os filtros hqx e 2xSaI são usados ​​para o dimensionamento de pixel-art (por exemplo, emuladores de jogos). Eu não acho que haja uma boa razão para usá-los em vídeo.

Comparação de Jeff Atwood

Acontece que Jeff Atwood fez uma comparação dos algoritmos de interpolação de imagem . Sua regra geral era usar a interpolação bicúbica para reduzir a amostragem e a interpolação bilinear ao aumentar a amostragem. Dito isto, não é o que normalmente é recomendado para a codificação de vídeo - e alguns comentaristas levantaram dúvidas sobre a experiência da Atwood no campo.

No entanto, ele também mencionou que…

Reduzir imagens é uma operação completamente segura e racional. Você está simplesmente reduzindo a precisão e a resolução descartando informações. Faça a imagem tão pequena quanto você quiser e terá total fidelidade - dentro dos limites do número de pixels que você permitiu. Você obterá bons resultados, independentemente do algoritmo escolhido. (Bem, a menos que você escolha os algoritmos Pixel Resize ou vizinho mais próximo da nave.)

Outros exemplos

Aqui estão mais alguns exemplos de algoritmos de interpolação de imagens , incluindo os mencionados acima.

Também encontrei documentos (regras de cena) da cena de codificação de vídeo que proíbem explicitamente a filtragem bicúbica para reduzir a amostragem. Em vez disso, eles endossam a reamostragem de Lanczos, Spline ou "Blackman".

slhck
fonte
Eu costumava sempre usar "bicúbico preciso A = 100". Em uma reinstalação do programa atualizado, o Lanczos foi padronizado, muitas pessoas gostaram. Deixei assim por um longo tempo. Eventualmente, eu comecei a assistir as coisas de Lanczos mais tarde codificadas, e pensei que não era tão bom, no próximo conjunto de códigos, eu retornei ao bicúbico. Eu também estava analisando a compactação, acho que Lanczos poderia parecer melhor se eu não estivesse tentando reduzir tanto o tamanho total dos dados.
Psycogeek
2
FWIW Eu não consideraria Jeff Atwood um especialista em processamento de imagens, e nesse artigo ele não examina nada além de um vizinho mais próximo bilinear ou (uma variante específica de) bicúbico. A maioria das pessoas concorda com sua recomendação de usar bilinearmente quando o aumento é ruim.
thomasrutter
1
@thomasrutter Obrigado. Eu concordo com você - quando escrevi isso, provavelmente não sabia tanto sobre processamento de imagens quanto agora. Acho que vou remover a referência a esse artigo e encontrar outra fonte.
slhck
8

Encontrei uma boa imagem que documenta parte disso.

insira a descrição da imagem aqui

Versão em tamanho real aqui .

Em geral, você deseja um efeito de nitidez suave ao transformar uma imagem maior em uma menor e um efeito de desfoque suave ao transformar uma imagem menor em uma imagem maior. O conjunto de filtros MadVR assume como padrão Lanczos para upscaling e bicubic para downscaling.

Jeff Atwood
fonte
2

Você está convertendo 3x3 pixels originais em 2x2 pixels de destino.

Se você deseja manter linhas nítidas, escolha Lanczos ou algo que use mais pixels ao redor para não desfocar as linhas nítidas (como pêlos ou reflexos)

Caso contrário, a média da área etc (também bilinear / trilinear) seria suficiente.

ZaB
fonte