По сути, вы спрашиваете, можно ли изменить процесс декодирования изображения JPEG. Это совсем другое намерение, чем у обычного кодера JPEG, и я не знаю ни о каком программном обеспечении, которое выполняет это. Математически это возможно * до тех пор, пока к изображению не было применено преобразование или другая модификация после того, как оно было закодировано, но насколько сложно это может быть программно?
Первая проблема - это цветовое пространство - JPEG использует субсэмплирование (цвет, сэмплированный по группе пикселей) yCbCr, тогда как растровое изображение - RGB. Неизбежные потери при преобразовании между этими цветовыми пространствами (а также при любой гамма-коррекции) создают шум. Вторая проблема, которую необходимо решить, - JPEG записывает данные изображения в виде макроблоков (подизображений размера NxN), которые должны быть выведены из выходного изображения декодера. Более подробное объяснение формата JPEG и процесса кодирования можно найти здесь http://www.guillermito2.net/stegano/jsteg/
«расшифровка» JPEG:
Чтобы создать аппроксимацию исходных данных JPEG, нам нужно найти подвыборку, размер и выравнивание макроблоков и коэффициенты дискретного косинусного преобразования (DCT), которые использовались для их кодирования. Остальное идентично обычному процессу кодирования JPEG. Одна наивная реализация, которая приходит на ум, это "образованное предположение и проверка": предположим, что для создания изображения использовались некоторые распространенные реализации JPEG, и пытайтесь применять их до тех пор, пока не будет обнаружено, что в DCT получаются "подобные JPEG" результаты (обычно нули для высокие частоты).
После этого выполните точную настройку коэффициентов для минимальной ошибки по сравнению с оригиналом (т. Е. Растровое изображение сжатого изображения). Этот процесс все еще приведет к компромиссу между ошибкой и размером файла, но он должен быть достаточно близок для практических целей.
Источник: Предыдущая работа по проверке видеокодеков DNx и ProRes, которые применяют кодирование в стиле JPEG к каждому отдельному кадру (программное обеспечение реверсирования декодированных кадров было бы очень интересным и потенциально полезным побочным проектом).
* Существует набор входных данных, которые будут выдавать идентичные выходные данные при прохождении через оригинальный декодер JPEG, однако для любой реконструкции крайне маловероятно, чтобы любая реконструкция была побайтной копией (игнорируя метаданные) исходного файла, поскольку информация была потеряна во время декодирования. процесс.