Интерполяция направленной кубической свертки
В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
Интерполяция направленной кубической свертки по краям, (DCCI) — это алгоритм масштабирования изображения созданный Дэнвэнь Чжоу и Сяолиу Шеном. [ 1 ]
Принимая во внимание края изображения , этот алгоритм масштабирования уменьшает артефакты, характерные для других алгоритмов масштабирования изображения. Например, устраняются дефекты лестниц на диагональных линиях и кривых.
Алгоритм изменяет размер изображения в 2 раза по сравнению с его исходным размером минус 1. [ 2 ]
Алгоритм
[ редактировать ]Алгоритм работает в три основных этапа:
- Скопируйте исходные пиксели в выходное изображение с промежутками между пикселями.
- Вычислите пиксели для диагональных промежутков.
- Вычислите пиксели для оставшихся горизонтальных и вертикальных зазоров.
Вычисление пикселей в диагональных промежутках
[ редактировать ]Оценка диагональных пикселей выполняется на основе данных исходного изображения в области 4×4, при этом новый пиксель, который рассчитывается, находится в центре, в промежутке между исходными пикселями. Это также можно рассматривать как область 7×7 в увеличенном изображении, центрированную на новом пикселе для расчета, а исходные пиксели уже скопированы.
Алгоритм решает один из трех случаев:
- Край в направлении вверх-вправо — интерполяция в направлении вниз-вправо.
- Край в направлении вниз-вправо — интерполяция в направлении вверх-вправо.
- Сглаженная область: интерполяция в обоих направлениях, затем значения умножаются на веса.
Расчет прочности диагонального края
[ редактировать ]Пусть d1 — сумма ребер в направлении вверх-вправо, а d2 — сумма ребер в направлении вниз-вправо.
Чтобы вычислить d1, возьмите сумму abs(P(X, Y) - P(X - 1, Y + 1)), в районе X = от 1 до 3 и Y = от 0 до 2.
Чтобы вычислить d2, возьмите сумму abs(P(X, Y) - P(X + 1, Y + 1)), в районе X = от 0 до 2 и Y = от 0 до 2.
Интерполяция пикселей
[ редактировать ]Если (1 + d1) / (1 + d2) > 1,15, то есть ребро в направлении вверх-вправо. Если (1 + d2) / (1 + d1) > 1,15, то есть ребро в направлении вниз-вправо.
В противном случае вы находитесь в гладкой области. Чтобы избежать операций деления и операций с плавающей запятой , это также можно выразить как 100 * (1 + d1) > 115 * (1 + d2) и 100 * (1 + d2) > 115 * (1 + d1).
Верхний правый край
[ редактировать ]Для края в направлении вверх-вправо интерполируется в направлении вниз-вправо.
Выходной пиксель = (-1 * P(0, 0) + 9 * P(1, 1) + 9 * P(2, 2) - 1 * P(3, 3)) / 16
Значение пикселя необходимо будет привести к допустимому диапазону значений пикселей (обычно от 0 до 255).
Нижний правый край
[ редактировать ]Для края в направлении вниз-вправо интерполируется в направлении вверх-вправо.
Выходной пиксель = (-1 * P(3, 0) + 9 * P(2, 1) + 9 * P(1, 2) - 1 * P(0, 3)) / 16
Значение пикселя необходимо будет привести к допустимому диапазону значений пикселей (обычно от 0 до 255).
Гладкая область
[ редактировать ]В гладкой области сила края сверху-право будет способствовать выборке пикселя вниз-права, а сила края снизу-права будет способствовать выборке правого верхнего пикселя.
w1 = 1/(1 + d1^5)
w2 = 1 / (1 + d2^5)
вес1 = w1 / (w1 + w2)
вес2 = w2 / (w1 + w2)
DownRightPixel = (-1 * P(0, 0) + 9 * P(1, 1) + 9 * P(2, 2) - 1 * P(3, 3)) / 16
UpRightPixel = (-1 * P(3, 0) + 9 * P(2, 1) + 9 * P(1, 2) - 1 * P(0, 3)) / 16
Выходной пиксель = DownRightPixel * вес1 + UpRightPixel * вес2
Значение пикселя необходимо будет привести к допустимому диапазону значений пикселей (обычно от 0 до 255).
Вычисление оставшихся пикселей
[ редактировать ]Оценка оставшихся пикселей выполняется на основе масштабированных данных изображения в области 7×7, при этом новый пиксель вычисляется в центре. Эти расчеты зависят либо от исходных пикселей изображения, либо от диагонального пикселя, рассчитанного на предыдущем шаге.
Алгоритм решает один из трех случаев:
- Край в горизонтальном направлении — интерполяция в вертикальном направлении.
- Край в вертикальном направлении — интерполяция в горизонтальном направлении.
- Сглаженная область: интерполяция в обоих направлениях, затем значения умножаются на веса.
Расчет горизонтальной/вертикальной прочности края
[ редактировать ]Пусть d1 — сумма ребер в горизонтальном направлении, а d2 — сумма ребер в вертикальном направлении.
Рассмотрим ромбовидную область 7×7 с центром в пикселе для расчета, используя только значения пикселей из оригинала и значения пикселей, добавленные из диагонального направления.
Чтобы вычислить d1, возьмите сумму абсолютных разностей горизонтальных краев, отбирая эти значения пикселей:
| P(X+1, Y-2) - P(X-1, Y-2) | + | P(X+2, Y-1) - P(X, Y-1) | + | P(X, Y-1) - P(X-2, Y-1) | + | P(X+3, Y) - P(X+1, Y) | + | P(X+1, Y) - P(X-1, Y) | + | P(X-1, Y) - P(X-3, Y) | + | P(X+2, Y+1) - P(X, Y+1) | + | P(X, Y+1) - P(X-2, Y+1) | + | P(X+1, Y+2) - P(X-1, Y+2) |
Чтобы вычислить d2, возьмите сумму абсолютных разностей вертикальных краев, отбирая эти значения пикселей:
| P(X-2, Y+1) - P(X-2, Y-1) | + | P(X-1, Y+2) - P(X-1, Y) | + | P(X-1, Y) - P(X-1, Y-2) | + | P(X, Y+3) - P(X, Y+1) | + | P(X, Y+1) - P(X, Y-1) | + | P(X, Y-1) - P(X, Y-3) | + | P(X+1, Y+2) - P(X+1, Y) | + | P(X+1, Y) - P(X+1, Y-2) | + | P(X+2, Y+1) - P(X+2, Y-1) |
Интерполяция пикселей
[ редактировать ]Если (1 + d1) / (1 + d2) > 1,15, то ребро имеет горизонтальное направление.
Если (1 + d2) / (1 + d1) > 1,15, то ребро имеет вертикальное направление.
В противном случае вы находитесь в гладкой области.
Чтобы избежать операций деления с плавающей запятой, это также можно выразить как 100 * (1 + d1) > 115 * (1 + d2) и 100 * (1 + d2) > 115 * (1 + d1).
Горизонтальный край
[ редактировать ]Для горизонтального края интерполяция выполняется в вертикальном направлении, используя только столбец с центром в пикселе.
Выходной пиксель = (-1 * P(X, Y - 3) + 9 * P(X, Y - 1) + 9 * P(X, Y + 1) - 1 * P(X, Y + 3))/ 16
Значение пикселя необходимо будет привести к допустимому диапазону значений пикселей (обычно от 0 до 255).
Вертикальный край
[ редактировать ]Для вертикального края интерполяция выполняется в горизонтальном направлении, используя только строку с центром в пикселе.
Выходной пиксель = (-1 * P(X — 3, Y) + 9 * P(X — 1, Y) + 9 * P(X + 1, Y) — 1 * P(X + 3, Y)) / 16
Значение пикселя необходимо будет привести к допустимому диапазону значений пикселей (обычно от 0 до 255).
Гладкая область
[ редактировать ]В гладкой области сила горизонтального края будет способствовать весу пикселя с вертикальной выборкой, а прочность вертикального края будет способствовать весу пикселя с горизонтальной выборкой.
w1 = 1/(1 + d1^5)
w2 = 1 / (1 + d2^5)
вес1 = w1 / (w1 + w2)
вес2 = w2 / (w1 + w2)
ГоризонтальныйПиксель = (-1 * P(X — 3, Y) + 9 * P(X — 1, Y) + 9 * P(X + 1, Y) — 1 * P(X + 3, Y)) / 16
ВертикальныйПиксель = (-1 * P(X, Y - 3) + 9 * P(X, Y - 1) + 9 * P(X, Y + 1) - 1 * P(X, Y + 3)) / 16
Выходной пиксель = вертикальный пиксель * вес1 + горизонтальный пиксель * вес2
Значение пикселя необходимо будет привести к допустимому диапазону значений пикселей (обычно от 0 до 255).
Не указан
[ редактировать ]Граничные пиксели
[ редактировать ]Алгоритм не определяет, что делать при выборке граничных областей за пределами изображения. Возможные действия включают копирование граничного пикселя, перенос пикселей с другой стороны изображения, перенос той же стороны изображения в обратном направлении или использование определенного значения цвета границы.
Цветные изображения
[ редактировать ]Цветные изображения не задаются алгоритмом, однако можно суммировать все различия компонентов RGB при расчете силы края и использовать все компоненты RGB при интерполяции пикселей. Или можно разделить на YCbCr , обработать только компонент яркости и растянуть цветность, используя другой алгоритм.
См. также
[ редактировать ]- Масштабирование изображения
- Билинейная интерполяция
- Бикубическая интерполяция
- Сплайн-интерполяция
- Передискретизация Ланцоша
- Галерея сравнения алгоритмов масштабирования изображений
Ссылки
[ редактировать ]- ^ Дэнвэнь Чжоу; Сяолю Шен. «Масштабирование изображения с использованием интерполяции направленной кубической свертки» . Проверено 13 сентября 2015 г.
- ^ Сабир, Эссаид; Медроми, Хичам; Садик, Мохамед (2 февраля 2016 г.). Достижения в области повсеместных сетей: материалы UNet'15 . Спрингер. ISBN 978-981-287-990-5 .