Necesito reducir la escala de una imagen en un factor de horizontalmente y s y verticalmente ( s x , s y < 1 ).
Quiero usar un filtro de paso bajo finito antes de reducir la resolución.
¿Cómo debo determinar los parámetros del filtro de paso bajo ( y el gaussiano σ ) para obtenerlo en función de s x y s y ?
Específicamente, soy interesante en el caso donde .
image-processing
gaussian
Ben-Uri
fuente
fuente
Respuestas:
Tienes que pensar en el cambio en la frecuencia de Nyquist entre ambas imágenes. Si la frecuencia de Nyquist de la imagen original es N, la imagen con muestreo inferior tendrá una frecuencia de Nyquist más baja, xN, donde x está relacionada con la relación de tamaños entre la imagen final y la inicial. Debería eliminar esas frecuencias espaciales que son más altas que xN en la imagen original antes de reducirla.
El espectro de potencia de un gaussiano en el espacio de la imagen, también es un gaussiano en el espacio de frecuencia. Si ignoramos por un momento la segunda dimensión, el gaussiano en el espacio de la imagen se define como exp (-x ^ 2 / s ^ 2), donde x representa sus píxeles. Esto se asigna al espacio de frecuencia como exp (-w ^ 2 * s ^ 2), donde w es la frecuencia. Los parámetros sigma muestran que un Gaussiano amplio en el espacio de la imagen corresponde a un Gaussiano estrecho en el espacio de frecuencia.
Desea elegir un parámetro sigma que produzca un valor muy bajo en el espacio de frecuencia a la frecuencia que corresponde a la frecuencia de Nyquist de la imagen muestreada hacia abajo.
fuente
Ya se ha señalado que y m deben elegirse en base a σ .norte metro σ
He pasado algún tiempo pensando en cómo elegir mejor. Aquí están mis consideraciones. tl; dr: Tal vez cometí algún error, pero σ 2 ≈ 3.37 parece una buena opción para el muestreo descendente por el factor 2.σ σ2≈ 3.37
fuente
Si estaba haciendo una reducción de tamaño grande (digamos 2x, 3x, 4x), puede hacer un promedio de píxeles para lograr un buen suavizado. En realidad, es por eso que el suavizado utiliza una gran cantidad de CPU / GPU adicional para que los videojuegos se vean más nítidos.
Dado que va de una imagen de 1000x1000 a una de 707x707 (solo un ejemplo para el factor de escala), está en lo cierto de que el alias puede ser un problema.
Afortunadamente, este es un problema con el que muchas personas ya se han encontrado y han trabajado bastante para resolverlo. En muchos casos, una interpolación bicúbica es el camino a seguir. Aquí hay algunos ejemplos de cómo se ven los diferentes métodos de interpolación:
http://www.compuphase.com/graphic/scale.htm
El cambio de tamaño de OpenCV tiene varios de esos métodos incorporados:
http://opencv.willowgarage.com/documentation/cpp/geometric_image_transformations.html#cv-resize
Si ya ha jugado con varios de esos métodos de interpolación y no funcionan bien, publique algún tipo de imagen de origen de muestra e imagen de resultado de muestra que muestre el déficit. Lo necesitaremos para diagnosticar el problema e intentar encontrar una buena solución.
fuente
Realmente no tengo una buena respuesta para ti, pero aquí hay 2 opciones que puedes probar:
fuente
fuente