Большой JPEG/PNG Image Sequence Looping

Я работаю над своим проектом относительно обработки изображений с дистанционным управлением и циклами последовательности изображений. Каждое результирующее изображение (в формате JPEG или PNG) имеет приблизительно 8000 * 4000 пикселей. Наши пользователи обычно хотят зацикливать последовательность изображений (более 50 изображений) на основе интересующей области. Таким образом, я должен извлечь требуемую область просмотра из каждого изображения в соответствии с размером клиента визуализации пользователя. Например, если текущее клиентское представление пользователя составляет 640 * 480, мне нужно будет найти размер блока данных 640 * 480 из каждого исходного изображения на основе текущих координат x (столбцов) и y (строк) и переназначить клиентский вид. Когда пользователь перемещается в другую область просмотра путем перетаскивания мышью, наша программа должна, как можно скорее, повторно загружать региональные данные из каждого исходного изображения.

Я не знаю, что ни библиотека JPEG, ни библиотека PNG не имеют встроенных процедур чтения блоков данных, таких как long ReadRectangle (long x0, long y0, long x1, long y1, char * RectData); long ReadInaRectangle (длинный x0, длинный y0, короткая ширина, короткая высота, char * RectData);

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

Кто-то предположил, что я использую CreateFileMapping, MapViewOfFile и CreateDIBSection для фиксации количества байтов сопоставления файлов для сопоставления с представлением. В отличие от простых плоских бинарных форматов изображений, таких как .raw, *.img и *.bmp, JPEG Blob будет содержать не только данные изображения, но и сложный заголовок JPG. Поэтому нелегко отобразить блок данных из файла JPEG.

Кто-то порекомендует, что я использую технологию обработки изображений или пирамиды изображений для создания суб-изображений, таких как mnay popular, визуализация изображений (Google Earth и т.д.), а также приложения GIS (WebGIS и т.д.).

Как я могу решить эту проблему?

Спасибо за вашу помощь.

Золотой Ли

Ответ 1

Если вы согласны с региональными координатами, кратными 8, библиотека JPEG из ijg может помочь вы загружаете частичные изображения в формате JPEG.

Вы хотите:

  • Получить все коэффициенты DCT для всего изображения. Здесь пример того, как это сделать. Да, это будет включать энтропийное декодирование всего изображения, но это менее дорогостоящий шаг декодирования JPEG (IDCT является самым дорогим, и мы избегаем его).
  • Отбросьте блоки, которые вам не нужны (каждый блок состоит из 8x8). Вам придется сделать это вручную, но так как макет довольно прост (блоки находятся в порядке scanline), это не должно быть так сложно.
  • Применить блок обратного DCT к каждому из кадров. Вы, вероятно, можете заставить IJG сделать это за вас. Если вы этого не сделаете, вам нужно будет сделать свой собственный IDCT и преобразование цвета обратно на [0, 255], потому что интенсивности находятся в [-127, 128] в мире JPEG.
  • Если все пойдет хорошо, вы получите изображение с декодированным JPEG. Из-за цветовой передискретизации каналы яркости и цветности могут иметь разные размеры, и вам придется компенсировать это самим путем масштабирования.

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

Ответ 2

Это легко с gd library. LibGD - это библиотека с открытым исходным кодом для динамического создания изображений на лету программистами.