Как компьютер увеличивает разрешение 1024x768 до 1920x1080?

8

Я имею в виду без черных полос. 1080 не кратно 768, так что есть какая-то потеря данных?

V0ight
источник
5
Существуют алгоритмы масштабирования, такие как бикубическое масштабирование, которые используют сплайны для аппроксимации цвета пикселей при масштабировании до любого размера.
EvilTak
@ EvilTak, вы можете расширить свой комментарий в небольшой ответ?
Гламперт
@glampert сделал это. Вы хотите, чтобы я удалил свой комментарий?
EvilTak
@ EvilTak, я думаю, ты можешь оставить это. Хороший ответ, кстати, спасибо!
гламперт

Ответы:

8

По сути, изображение представляет собой группу точечных выборок (читай пиксель - это не маленький квадрат 3 ). Когда вы преобразуете или масштабируете изображение, вам нужно его повторно сэмплировать. Итак, теоретически вы берете точечные выборки и превращаете их в непрерывную функцию. Затем вы выбираете эту непрерывную функцию и восстанавливаете сигнал. Итак, здесь есть две или три разные фазы.

  1. Преобразование выборок в непрерывную функцию (восстановление функции).
  2. (Трансформирующий)
  3. Повторная выборка сигнала

Обратите внимание, что ни один из этих шагов не имеет фиксированной формы. На практике при оптимизации невозможно сказать, что есть шаги. Преобразование не обязательно должно быть простым, это может быть отображение формы в спираль и т. Д.

Реконструкция сигнала

Изображение 1 : 1-D сигнал, восстановленный различными фильтрами.

На практике известно немного о реконструкции сигналов в области обработки сигналов. Разработка этих фильтров и выбор правильных - это отдельная форма искусства. Но, по сути, выбор фильтра - это компромисс между размытием и звонком . Конечно, у алгоритма есть и другие качества, такие как количество инструкций, которое требуется для выполнения, скорость и объем памяти, которые необходимы, и т. Д. Что может быть очень важно для приложений реального времени или встроенных приложений.

Процесс

Изображение 2 : Обзор всего процесса.

joojaa
источник
5

Существует множество алгоритмов увеличения и уменьшения масштаба для масштабирования изображений от любого разрешения до любого другого произвольного разрешения. Каждый алгоритм обычно включает компромисс между эффективностью, плавностью и четкостью, с различной степенью компромисса для разных алгоритмов.

Проверьте эту статью Wikipedia для таких алгоритмов и примеров таких алгоритмов.

Наиболее популярным (и используемым) алгоритмом является алгоритм бикубической интерполяции . Он интерполирует между 2D точками на прямоугольной сетке. Используя кубические сплайны (или кубическую интерполяцию), он сначала интерполирует в одном измерении (находит интерполированную строку / столбец), затем интерполирует интерполированную строку / столбец в другом измерении.

Билинейная интерполяция аналогична бикубической интерполяции, за исключением того, что первая интерполирует с использованием линейной функции и может интерполировать только между двумя значениями, а вторая использует кубическую функцию и может интерполировать между четырьмя значениями.

Простая функция для бикубической интерполяции выглядит следующим образом:

f(f(p00, p01, p02, p03, y),
  f(p10, p11, p12, p13, y),
  f(p20, p21, p22, p23, y),
  f(p30, p31, p32, p33, y),
  x)

где (x, y) - интерполированная позиция, а p [] [] - двумерный массив, представляющий сетку 4 * 4.

Проверьте эту ссылку для получения дополнительной информации и примера кода, который действительно очень помогает!

EvilTak
источник
0

Хотя остальные ответы верны, я не уверен, что они полностью отвечают на ваш вопрос. Чтобы не получить черные полосы, у вас есть 2 варианта, если назначение не совпадает с формой (или соотношением сторон) с источником:

  1. Заполните место назначения, оставив несколько пикселей от источника вне места назначения. В вашем примере источник - 1024x768, а пункт назначения - 1920x1080. Если вы увеличите исходное изображение до 1920x1440, вы можете затем обрезать верх и / или низ, чтобы получить 1920x1080.
  2. Растянуть изображение назначения, чтобы соответствовать. Таким образом, вы бы масштабировали по вертикали на 1080/768 = 1.40625, а по горизонтали - на 1920/1024 = 1.875. Это почти никогда не то, что вы хотите, и выглядит ужасно в большинстве случаев. (Это то, что заставляет людей выглядеть намного шире, чем они должны, и превращает круги в овалы, а вращения в ножницы.)

Есть и другой вариант, но он не соответствует вашим критериям - масштабируется равномерно, но только до тех пор, пока 1 измерение не станет таким же большим, как пункт назначения. В этом случае вы бы масштабировали как по горизонтали, так и по вертикали на 1.40625, чтобы получить результат 1440x1080. Обычно это называется «масштабирование по размеру».

Для любой из этих опций вы можете использовать любой алгоритм масштабирования, соответствующий вашим потребностям.

user1118321
источник
1
Вы могли бы также иметь белые полосы. Вы также можете использовать некоторую функцию синтеза изображения, чтобы заполнить пиксели, которые вы можете наложить на изображение, например, обрезанное и растягивающее. Здесь просто бесконечное количество способов справиться без данных. Я думаю, что большинство из нас просто предполагали, что это будет неравномерным масштабом.
Джуджаа
Очень верно. Я предположил, что оригинальный постер специально не хотел заполняться сплошным цветом и интересовался только аспектом масштабирования, поскольку об этом они и спрашивали. Но есть много других методов заполнения. Существуют также методы нелинейного масштабирования, когда центр сохраняет свое соотношение сторон, а края растягиваются, например.
user1118321