Parâmetros de filtro passa-baixo para redução de tamanho de imagem


11

Preciso downscale uma imagem em um factor de na horizontal e s y verticalmente ( s x , s y < 1 ).sxsysxsy1

Eu quero usar um filtro passa-baixa finito antes da redução da amostragem.n×m

Como deve determinar os parâmetros de filtro passa-baixo ( e a Gaussiana σ ) para obtê-lo como uma função da s x e s y ?n,mσsxsy

Especificamente, eu sou interessante no caso em que sx=sy=1/2 .


questão relacionada com [o perguntou aqui] [1] [1]: stackoverflow.com/questions/3149279/...
Isrish

11
Obrigado, mas esta pergunta não é sobre como determinar os parâmetros do filtro em função do fator de redução de escala.
Ben-Uri

Quanto você deseja filtrar? Qual é o seu objetivo?

11
Quero usar um filtro passa-baixo antes da amostragem para evitar aliases. Eu quero preservar o máximo possível de informações sem usar o alias.
Ben-Uri

11
Você precisa observar a transformação de Fourier do filtro para saber quão bem ele cortará as frequências de aliasing, mantendo as frequências abaixo do limite de Nyquist do resultado amostrado. A transformação de um gaussiano é outro gaussiano, o que significa que não há um corte agudo. Quase sempre há uma escolha melhor.
Mark Ransom

Respostas:


4

Você precisa pensar na mudança na frequência de Nyquist entre as duas imagens. Se a frequência Nyquist da imagem original for N, a imagem com amostragem reduzida terá uma frequência Nyquist mais baixa, xN, em que x está relacionado à proporção de tamanhos entre a imagem final e a inicial. Você precisaria remover as frequências espaciais superiores a xN na imagem original antes de reduzi-la.

O espectro de potência de um gaussiano no espaço da imagem também é um gaussiano no espaço da frequência. Se ignorarmos por um momento a segunda dimensão, o Gaussiano no espaço da imagem é definido como exp (-x ^ 2 / s ^ 2), em que x representa seus pixels. Isso é mapeado para o espaço de frequência como exp (-w ^ 2 * s ^ 2), onde w é a frequência. O (s) parâmetro (s) sigma mostra que um gaussiano amplo no espaço da imagem corresponde a um gaussiano estreito no espaço de frequência.

Você gostaria de escolher um parâmetro sigma que produza um valor muito baixo no espaço de frequência na frequência que corresponde à frequência Nyquist da imagem amostrada para baixo.


Certo, mas como eu traduzo isso para um kernel de convolução discreto? (esta foi a pergunta)
Ben-Uri

Veja os edit pls ...
NoNameNo

Obrigado, mas ainda existe uma fórmula para encontrar o sigma em função da frequência máxima que deve estar no resultado da saída?
21413 Ben-Uri

Eu não conheço nenhuma fórmula.
usar o seguinte código

1

Já foi apontado que e m devem ser escolhidos com base em σ .nmσ

Passei algum tempo pensando em como escolher melhor. Aqui estão minhas considerações. tl; dr: Talvez eu tenha cometido algum erro, mas σ 23,37 parece ser uma boa escolha para amostragem reduzida pelo fator 2.σσ23.37


0

Se você estava fazendo um grande tamanho reduzido (por exemplo, 2x, 3x, 4x), pode fazer a média dos pixels para obter um bom anti-aliasing. É por isso que o anti-aliasing usa muito CPU / GPU para tornar os videogames mais nítidos.

Como você está passando de uma imagem de 1000 x 1000 para uma de 707 x 707 (apenas um exemplo para o fator de escala), está correto que o alias pode ser um problema.

Felizmente, esse é um problema com o qual muitas pessoas já se depararam e fizeram bastante trabalho para resolver. Em muitos casos, uma interpolação bicúbica é o caminho a percorrer. Existem alguns exemplos de como são os diferentes métodos de interpolação aqui:

http://www.compuphase.com/graphic/scale.htm

O redimensionamento do OpenCV possui vários desses métodos integrados:

http://opencv.willowgarage.com/documentation/cpp/geometric_image_transformations.html#cv-resize

Se você já brincou com vários desses métodos de interpolação e eles não funcionam bem, publique algum tipo de imagem de origem de amostra e imagem de resultado de amostra mostrando o déficit. Precisamos disso para diagnosticar o problema e tentar encontrar uma boa solução para ele.


observe que, embora seja rápida, a média de pixels não é a solução ideal para a qualidade. a média de pixels aplica efetivamente um filtro correto. no espaço de frequência, isso equivale a multiplicar por uma função sinc que oscila com zero cruzamentos nos harmônicos de Nyquist. isso tem dois problemas: 1. atenua a alta frequência, mas não tanto; 2. inverte a fase em todos os outros lóbulos laterais. Ambos (1) e (2) podem contribuir para o aliasing.
thang

0

Eu realmente não tenho uma boa resposta para você, mas aqui estão duas opções que você pode tentar:

  • σ3σ .
  • se você estiver disposto a fazer cálculos finos de amostragem de sinal, por que não usar a transformada de Fourier? Pegue a FFT da sua imagem, mantenha apenas a subparte que corresponde ao tamanho do seu destino e inverta a transformação. Isso aplicará um filtro anti-aliasing no seu espectro. Se houver muitos artefatos (ondulações, toques) para você, aplique em seu espectro de filtro gaussiano cuja largura corresponde ao tamanho do seu destino.

0

s=1 1/2

[1 1,2,1 1]T[1 1,2,1 1]

Você está errado. Você esqueceu um fator de escala de 0,25? ... e se sim, essa é uma escolha comum para s = 1/2 e não 1 / sqrt (0,5).
Ben-Uri

Algum comentário sobre a opinião de @ Ben-Uri? O sistema está sinalizando esta postagem como de baixa qualidade por causa do comprimento. Por favor, considere revisá-lo ou removê-lo.
Peter K.

11
ss2

ssσσsx,sy
Ben-Uri
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.