Так как это работает в теории?
Во-первых, когда вы нажимаете кнопку «Сохранить», происходит преобразование цветовой системы RGB в YCrCb. Если вы плохо это реализуете, вот ваш первый шаг к потере данных. Есть практические причины, почему это преобразование необходимо, но здесь это не имеет решающего значения После этого преобразования из каждого пикселя вычитается значение 128 для создания изображения с нулевым средним.
После завершения преобразования RGB в YCrCb изображение разделяется на блоки размером 8x8 пикселей, которые называются блоками, или MCU (минимальная кодированная единица).
После того как ваше изображение будет разделено на блоки 8x8, косинусное преобразование Forward Descreete выполняется для каждого блока 8x8. Формула FDCT приведена ниже:
где M и N - размеры блока 8x8, в нашем примере M = N = 8, а C (u), C (v) - константы, которые приведены на рисунке ниже:
«
F (u, v) является результатом FDCT, который также является матрицей / блоком 8x8 пикселей, а элементы F (u, v) называются коэффициентами FDCT, и они являются частотным представлением изображения. Первый элемент F (0,0) называется коэффициентом постоянного тока, а остальные - элементами переменного тока. Первый элемент наиболее важен, потому что он содержит большую часть данных блока 8х8. Если мы выполним некоторые математические вычисления, то получим, что первый элемент F (0,0) является средним значением всех остальных узлов, умноженным на 8, что описано в формулах ниже.
и вы получите
Достаточно математики :).
Если вы следуете за мной, вы увидите, что мы до сих пор не теряли столько данных (мы все еще можем запустить IDCT (I-inverse), и мы получим наше начальное изображение с некоторыми потерями). Так где же процесс, что меняется, когда вы устанавливаете размер Photoshop / Lightroom, когда сохраняете изображение .jpeg? Давайте продолжим.
Допустим, у нас есть изображение 16x16 пикселей. Когда мы разделяем наше изображение на блоки 8x8, мы получаем два блока 8x8. После того, как мы сделаем преобразование цветов, мы перейдем к FDCT. Мы запускаем FDCT в первом блоке 8x8, а в качестве результата получаем новый блок 8x8, который является продуктом FDCT. Затем мы запускаем FDCT для второго блока 8x8 исходного изображения, и в результате мы получаем еще один блок 8x8 FDCT. Итак, в целом, результат FDCT на нашей картинке / матрице 16x16 - это новая матрица 16x16, и давайте назовем ее F матрица.
Теперь матрица F разделена на блоки 8x8 и разделена на таблицу квантования , которая представляет собой матрицу 8x8 пикселей. Значения таблицы квантования - это константы / числа, которые даны экспериментальными результатами на человеческом глазу. Классическая таблица квантования приведена ниже.
Эта матрица, которая называется Q-матрицей, делится на нашу F-матрицу, фактически сначала на 8x8 блок F-матрицы, затем на второй 8x8 блок F-матрицы и так далее. Зачем? Чтобы получить меньшие числа, для которых нам нужно меньше битов, чтобы представить их в цифровом файле. Если у вас есть значение 105, вам нужно 8 бит для цифрового представления. Но если вы разделите 105 на 52, то вы получите 1,90. Вы принимаете только целую часть, которая составляет 1,00. Представляя десятичное число 1, вам нужен только один бит, поэтому вы сохранили 7 бит. Теперь представьте экономию для изображения с 4000x4000 пикселей:).
Этот процесс деления таблицы F на таблицу Q - это место, где происходит потеря jpeg. Если элементы Q больше, потери больше, и наоборот.
Таким образом, когда вы меняете спиннер Photoshop с плохого на отличное качество, фактически вы меняете значения таблицы Q.
Также вы видите, что первый элемент матрицы Q, Q (0,0), является наименьшим. Это потому, что этот элемент будет разделен на две части с элементом F (0,0), который является элементом DC (элементом, который содержит большую часть данных), и если мы разделим его с большим числом, вы увидите блоки 8x8 на вашем изображении, как вы это можно увидеть на фотографиях, опубликованных @ mattdm.
Ваш ответ - да, это так:)
Надеюсь, я вам помог:)