Реализовывал ли кто либо в железе билиненйную, бикубическую (или другие) интерполяцию для изменения размера изображения. Поделитесь опытом, ссылками, какие получили результаты. Заходит новая разработка в которой должна быть такая функция.
что именно интересует?
билинейная - проще и без артефактов, но четкость хуже
бикубическая - иногда проявляются, кушает много ресурсов, четкость лучше. Боится шумов.
частотная - подвержена очень сильно артефактами. приходится выбирать компромисс четкость/шум. требуется регуляризация (Тихонова, и т. п.). Ресурсов сжирает очень много. но самый качественный метод
здесь Вам придется посидеть, попробовать эту кухню и выбрать для себя оптимальный вариант
Добрый день!
а можна чуток поконкретней (частотная ето сплайн?)
и если не трудно сылочку на алгоритм(сплайна)
или можна в 2 словах!
Нет, частотная это не сплайн.
суть заключается в следующем (это также исп. для передискретизации звука)
- по отсчетам делаем прямое преобразование Фурье
- делаем обратное преобразование Фурье, но пространственных отсчетов используем бОльше. Т. е. в аргумент синуса/косинуса подставляем отсчеты с меньшим шагом. - это для увеличения. Для уменьшения - срезаем высокие частоты (лучше сделать регуляризацию) и восстанавливаем с меньшим количеством отсчетов
по сути, задача сводится к вычисленю свертки. Результат - интенсивность пиксела. Ядро для свертки - синк, гаусс и т. д. Смещение центра зависит от смещения между пикселами. Напр увеличение в два раза: мы знаем интенсивности NxM пикселов, а требуется найти интенсивность 2Nx2M - отсюда ищем интенсивность между пикселами (интерполируем). т. к. искомые находятся между (по середине) - вершина функции в ядре будет по-середине.
по-поводу сплайнов - в Яндексе наберите ключевые слова "сплайн исходник алгоритм и т. п."
в кратце суть:
интерполировать можно с помощью функции n -ого порядка. Но при величине степени выше 5 - полином становится не устойчивым (можете поэкспериментировать в exel, с помощью линий тренда). Обычно исп. порядок 3, можно иногда 4 (если надо сильно подчеркнуть границы, но осторожно). и кусочками интерполируют соседние пикселы ("кусочно кубическая" интерполяция). Для того, чтобы небыло ломаных линий, вводят условия (первые и вторые производные должны быть равны) для сохранения гладкости кривой. В сплайнах есть минус - значение одного пиксела влияет на значение другого, даже если они расположены далеко друг от друга (из-за вводимых условий)
для начала лучше начать экспериментировать с кусочно-линейной интерполяцией. Советы для облегчения жизни:
иногда трудно сообразить, как работать с 2D координатами. Поэтому рекомендую картинку разбить на строки. Каждую строку обработать (изменть масштаб) и эту вытянутую/сжатую картинку сохранить в новом месте. Затем полученную картинку разбить на столбцы и обработать по столбчам. Иногда такая реализация работает быстрее.
Спасибо!
Надо будет по етому поводу чево небуть почитать!
AndrewKirs
May 5 2006, 12:57
Я реализовывал билинейную интерполяцию, но, правда, программно. Делались варианты на обычном C++ (плав.точка), на MMX и на SSE2(целочисленные). Отдельно для уменьшения и для увеличения изображений. Был хороший рост производительности, особенно для уменьшения (экспоненциальный при росте коэффициента уменьшения). Если кому-то интересно, могу рассказать подрробнее.
Builder
May 6 2006, 11:03
Вы капните google - точно будет.
Можно ещё глянуть исходники Gimp -
графический редактор опен соде.
что-то здесь было:
http://www.enlight.ru/demo/faq/smth.phtml?..._curves_splines
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.