Я кодирую видеокодек с использованием технологии сжатия JPEG для каждого кадра. До сих пор я уже кодировал YUV, DCT и квантовал DCT (кодирование и декодирование). Я уже кодировал кодировку YUV422, но я не понимаю, как сделать обратное (декодирование).Как преобразовать YUV422 (под выборка) в YUV?
Чтобы вычислить мой YUV для каждого пикселя я использовал следующие уравнения:
Кодирование:
Y = 0.299 * R + 0.587 * G + 0.114 * B
U = -0.1687 * R - 0.4187 * G + 0.5 * B + 128
V = 0.5 * R - 0.4187 * G - 0.0813 * B + 128
Декодирования:
R = Y + 1.402 * (V - 128)
G = Y - 0.34414 * (U - 128) - 0.71414 * (V - 128)
B = Y + 1.772 * (U - 128)
Это уравнение сделать идеальную работу.
Теперь, чтобы выполнить кодировку с суб-выборкой, я беру свое изображение, закодированное в YUV, и я вычисляю сумму из двух смежных пикселей, и я делю результат на 2. Результат задается для 2 пикселей.
Пример:
Для простоты я буду принимать значение пикселя в диапазоне от 0 до 255 (без использования компонентов RGB).
Только что: 2 примера с тем же результатом.
Pixel_1 = 15, Pixel_2 = 5 -> (Pixel_1 + Pixel_2)/2 = 10
Pixel_3 = 10, Pixel_4 = 10 -> (Pixel_3 + Pixel_4)/2 = 10
Если я применить это уравнение для всех пикселей моего YUV изображения, я получаю новый образ, но на этот раз закодирован в YUV422 подвыборке.
Мне интересно, как я могу вернуть изображение YUV из изображения YUV422. Мой пример чуть выше показывает, что вернуть исходное изображение YUV невозможно, потому что есть много комбинаций, которые приводят к такому же результату (здесь 10). Тем не менее, я думаю, что есть способ получить, дать или взять несколько, те же оригинальные значения пикселей YUV. Кто-нибудь может мне помочь, пожалуйста? Я действительно потерян. Большое спасибо за вашу помощь.
Ссылка на код MPEG, к сожалению, не работает. Но хорошо, что вы опубликовали это. – Thorben