Мне нужно уменьшить изображение с коэффициентом горизонтали и s y по вертикали ( s x , s y < 1 ).
Я хочу использовать конечный фильтр нижних частот перед понижением частоты дискретизации.
Как определить параметры фильтра нижних частот ( и гауссово σ ), чтобы получить его как функцию от s x и s y ?
Конкретно меня интересует случай, когда .
image-processing
gaussian
Бен-Ури
источник
источник
Ответы:
Вы должны подумать об изменении частоты Найквиста между обоими изображениями. Если частота Найквиста исходного изображения равна N, изображение с пониженной дискретизацией будет иметь более низкую частоту Найквиста, xN, где x относится к соотношению размеров между конечным изображением и исходным. Вам нужно будет удалить те пространственные частоты, которые выше, чем xN в исходном изображении, перед его понижением.
Спектр мощности гауссиана в пространстве изображений также является гауссовым в частотном пространстве. Если мы на мгновение проигнорируем второе измерение, гауссиан в пространстве изображений будет определен как exp (-x ^ 2 / s ^ 2), где x представляет ваши пиксели. Это отображается на частотное пространство как exp (-w ^ 2 * s ^ 2), где w - частота. Параметр (ы) сигмы показывает, что широкий гауссиан в пространстве изображений соответствует узкому гауссову в частотном пространстве.
Вы хотели бы выбрать сигма-параметр, который дает очень низкое значение в частотном пространстве на частоте, которая соответствует частоте Найквиста изображения с пониженной дискретизацией.
источник
Уже указывалось, что и m следует выбирать на основе σ .N м σ
Я потратил некоторое время на размышления о том, как выбрать лучше всего. Вот мои соображения. tl; dr: Возможно, я допустил некоторую ошибку, но σ 2 ≈ 3.37 выглядит хорошим выбором для понижающей дискретизации с коэффициентом 2.σ σ2≈ 3.37
источник
Если вы выполняли большое уменьшение (скажем, 2x, 3x, 4x), вы можете выполнить усреднение пикселей для достижения хорошего сглаживания. Именно поэтому сглаживание использует много дополнительных CPU / GPU, чтобы видеоигры выглядели более четкими.
Поскольку вы переходите от изображения 1000x1000 к изображению 707x707 (просто пример для масштабного коэффициента), вы правы, что алиасинг может быть проблемой.
К счастью, это проблема, с которой многие люди уже столкнулись и проделали немало работы для ее решения. Во многих случаях бикубическая интерполяция - путь. Вот несколько примеров того, как различные методы интерполяции выглядят здесь:
http://www.compuphase.com/graphic/scale.htm
OpenCV resize имеет несколько встроенных методов:
http://opencv.willowgarage.com/documentation/cpp/geometric_image_transformations.html#cv-resize
Если вы уже поиграли с некоторыми из этих методов интерполяции, и они не работают должным образом, пожалуйста, опубликуйте образец исходного изображения и примерного изображения с дефицитом. Нам это понадобится, чтобы диагностировать проблему и попытаться найти хорошее решение.
источник
У меня нет хорошего ответа для вас, но вот 2 варианта, которые вы можете попробовать:
источник
источник