Большой цикл JPEG / PNG изображений - PullRequest
5 голосов
/ 30 января 2011

Я работал над своим проектом по обработке изображений с дистанционным зондированием и зацикливанию последовательности изображений.Каждое результирующее изображение (в формате 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 (long x0, long y0, короткая ширина, короткая высота, символ * RectData);

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

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

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

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

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

Голден Ли

Ответы [ 2 ]

3 голосов
/ 30 января 2011

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

Вы бы хотели:

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

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

0 голосов
/ 30 января 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...