Это вики сообщества, так что вы можете исправить этот ужасный, ужасный пост.
Grrr, нет латекса. :) Я думаю, я просто должен сделать все возможное.
Определение:
У нас есть изображение (PNG или другой формат без потерь *) с именем A размера A x от A y . Наша цель - масштабировать его на p = 50% .
Изображение ( «массив») B будет «непосредственно масштабируется» версия А . Он будет иметь B s = 1 количество шагов.
A = B B s = B 1
Изображение ( «массив») C будет «постепенно масштабируются» версия А . У него будет C s = 2 количество шагов.
A ≅ C C s = C 2
Забавный материал:
A = B 1 = B 0 × p
C 1 = C 0 × p 1 ÷ C s
A ≅ C 2 = C 1 × p 1 ÷ C s
Вы видите эти дробные силы? Теоретически они будут ухудшать качество растровых изображений (растры внутри векторов зависят от реализации). Как много? Мы выясним это в следующем ...
Хороший материал:
C e = 0, если p 1 ÷ C s ∈ ℤ
C e = C s, если p 1 ÷ C s ∉ ℤ
Где e представляет максимальную ошибку (в худшем случае) из-за целочисленных ошибок округления.
Теперь все зависит от алгоритма даунскейлинга (суперсэмплинг, бикубический, выборка Ланцоша, ближайший сосед и т. Д.).
Если мы используем Nearest Neighbor ( худший алгоритм для любого качества), «истинная максимальная ошибка» ( C t ) будет равна C e . Если мы используем любой из других алгоритмов, это усложняется, но не будет так плохо. (Если вам нужно техническое объяснение, почему это не будет так плохо, как «Ближайший сосед», я не могу дать вам одну причину, это всего лишь предположение. ПРИМЕЧАНИЕ: Привет, математики! Исправьте это!)
Возлюби ближнего твоего:
Давайте создадим «массив» изображений D с D x = 100 , D y = 100 и D s = 10 . р остается прежним: р = 50% .
Алгоритм ближайшего соседа (ужасное определение, я знаю):
N (I, p) = mergeXYDuplicates (floorAllImageXYs (I x, y × p), I) , где умножаются только сами x, y ; не их значения цвета (RGB)! Я знаю, что вы не можете сделать это в математике, и именно поэтому я не ЛЕГЕНДАТИЧЕСКИЙ МАТЕМАТИК пророчества.
( mergeXYDuplicates () сохраняет только самые нижние / самые левые x, y «элементы» в исходном изображении I для всех найденных им дубликатов и отбрасывает остальные.)
Давайте возьмем случайный пиксель: D 0 39,23 . Затем применяйте D n + 1 = N (D n , p 1 ÷ D s ) = N (D n , ~ 93,3%) снова и снова.
c n + 1 = этаж (c n × ~ 93,3%)
c 1 = пол ((39,23) × ~ 93,3%) = пол ((36,3,21,4)) = (36,21)
c 2 = пол ((36,21) × ~ 93,3%) = (33,19)
с 3 = (30,17)
с 4 = (27,15)
с 5 = (25,13)
с 6 = (23,12)
с 7 = (21,11)
с 8 = (19,10)
с 9 = (17,9)
с 10 = (15,8)
Если бы мы сделали простое уменьшение только один раз, мы бы получили:
b 1 = пол ((39,23) × 50%) = пол ((19,5,11,5)) = (19,11)
Давайте сравним b и c :
b 1 = (19,11)
с 10 = (15,8)
Это ошибка (4,3) пикселей! Давайте попробуем это с конечными пикселями (99,99) и учтем фактический размер ошибки. Я не буду делать всю математику здесь снова, но я скажу вам, что это становится (46,46) , ошибка (3,3) от того, что должно быть, (49,49) .
Давайте скомбинируем эти результаты с оригиналом: «реальная ошибка» равна (1,0) . Представьте, если это происходит с каждым пикселем ... это может в конечном итоге изменить ситуацию. Хм ... ну, наверное, лучший пример. :)
Вывод:
Если ваше изображение изначально имеет большой размер, это не будет иметь большого значения, если вы не сделаете несколько уменьшений (см. «Пример из реальной жизни» ниже).
Это ухудшается максимум на один пиксель за шаг (вниз) в ближайшем соседе. Если вы сделаете десять уменьшений, качество вашего изображения будет немного ухудшено.
Пример из реальной жизни:
(Нажмите на миниатюры для увеличения.)
Уменьшено на 1% с использованием Super Sampling:

Как видите, Super Sampling «размывает» его, если применять его несколько раз. Это "хорошо", если вы делаете один downscale. Это плохо, если вы делаете это постепенно.
* В зависимости от редактора и формата, это может иметь значение, поэтому я сохраняю это простым и называю это без потерь.
(100%-75%)*(100%-75%) != 50%. Но я верю, что знаю, что вы имеете в виду, и ответ на этот вопрос - «нет», и вы действительно не сможете заметить разницу, если она есть.