Preciso downscale uma imagem em um factor de na horizontal e s y verticalmente ( s x , s y < 1 ).
Eu quero usar um filtro passa-baixa finito antes da redução da amostragem.
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 ?
Especificamente, eu sou interessante no caso em que .
image-processing
gaussian
Ben-Uri
fonte
fonte
Respostas:
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.
fonte
Já foi apontado que e m devem ser escolhidos com base em σ .n m σ
Passei algum tempo pensando em como escolher melhor. Aqui estão minhas considerações. tl; dr: Talvez eu tenha cometido algum erro, mas σ 2 ≈ 3,37 parece ser uma boa escolha para amostragem reduzida pelo fator 2.σ σ2≈3.37
fonte
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.
fonte
Eu realmente não tenho uma boa resposta para você, mas aqui estão duas opções que você pode tentar:
fonte
fonte