Какой формат и настройки использовать для фотографий с антенн в QGIS?

10

Следующий вопрос, касающийся работы с антеннами в ArcGIS:

Самый эффективный формат для управления аэрофотосъемкой только для просмотра

Кажется, есть 2 основных варианта для хранения / повторной выборки / перепроектирования и т. Д. Антенн:

  1. JP2000 / JP2 / JPEG 2000 (недавно 5 кодов для обработки GDAL)
  2. ECW (сжатые ERDAS вейвлеты (.ecw))
  3. что-нибудь еще я пропустил?

GDAL доступные форматы

То, что я понял в зависимости от версии QGIS для обоих, обычно должно быть установлено несколько дополнительных библиотек. У ECW есть некоторые ограничения - для сжатия нужно покупать лицензию?

Я протестировал jpeg, который не могу использовать для больших файлов (ограничение по максимальному размеру), и он также работает медленнее с большими размерами.

Ответ должен содержать:

  1. Что доступно по умолчанию для рабочего стола QGIS 2.0.1 и / или OSGEO?
  2. Как это работает с большими файлами - увеличение / уменьшение (пирамиды)?
    • такое Варианты создания - РАЗРЕШЕНИЯ для пирамид jp2?
Miro
источник
1
Просто другой подход: большие серии ортофотопланов часто используются в качестве сервисов OGC WMS / WMTS с бэкэнд-провайдером, таким как GeoServer или MapServer.
Якоб
2
GeoTIFF и NITF являются общими для спутниковых снимков. Также поддерживается в GDAL, но не уверен, поддерживает ли QGIS NITF.
BradHards
@ Якоб - я вижу смысл. Но все же изображения должны быть как-то сохранены на сервере (в каком-то формате), верно?
Миро
@BradHards - Tiff на самом деле был моим первым выбором, но единственный способ эффективно сохранить его в сжатом виде - это сжатие JPEG, которое приводит к тому же максимальному ограничению размеров, как если бы оно сохранялось непосредственно в JPEG. Дело в том, что для спутниковых снимков обычно требуется сжатие без потерь. Но этот вопрос больше сфокусирован на аэрофотоснимках, которые могут понести некоторые потери ради экономии огромного объема хранения / передачи данных.
Миро

Ответы:

8

На основании ответов Хакфинна, нескольких других комментариев и моих выводов:

Формат победы - JPEG2000 (почему и какая версия указана ниже. Почему нет других )

Почему не другие

  1. JPEG
    • Ограничение размера и размера данных и размеров (4 ГБ и 65500x65500)
    • нет (внутренних) пирамидных возможностей = чем больше изображение, тем больше времени требуется для его отображения при панорамировании / увеличении / уменьшении
  2. GeoTIFF
    • Хорошо для сеток, но для растровых изображений нет эффективного сжатия с потерями, кроме JPEG = та же проблема, что и в JPEG
  3. ECW и мистер Сид
    • Вам нужна специальная лицензия для сохранения в ECW и Mr. SID - вы не можете сделать это по умолчанию с GDAL (QGIS). Если у вас есть специальная лицензия, вам, вероятно, не нужно читать этот ответ, потому что обработка изображений - это ваш ежедневный хлеб (наша компания обычно получает изображения в формате ECW от наших клиентов)
  4. База данных / Картографический сервер
    • Это, безусловно, хороший вариант, если у вас уже запущен какой-либо сервер баз данных / карт или, по крайней мере, вы знаете, как это сделать легко и быстро. В этом случае данные могут быть сохранены в формате GeoTIFF или где-либо еще и обычно отправляются в виде JPEG вашему клиенту - веб-браузеру или программному обеспечению для настольных компьютеров, например QGIS. Но если у вас нет сервера и вы хотите что-то легко загружать / просматривать изображения в QGIS, это слишком сложно.

ПОЧЕМУ JPEG2000:

Как я уже писал в своем вопросе - GDAL предоставляет больше возможностей для сохранения в формате JPEG2000, но, как указано на веб-сайте GDAL, его не следует указывать в версии GDAL по умолчанию. Во время тестирования я пробовал, вероятно, 6 разных версий QGIS, и все они имели по крайней мере одну опцию JPEG2000 (в Windows 7). Чтобы убедиться, что я предлагаю установить OSGeo4W (32- или 64-разрядную) версию QGIS и проверить в оболочке OSGeo4W, доступен ли какой-либо код JPEG2000. (В Windows просто запустите оболочку OSGeo4W из меню «Пуск» / «Программы» и напишите там команду gdal_translate --formatsили gdalwarp --formats).

Во всех версиях QGIS, которые я пробовал, был доступен код JP2OpenJPEG (библиотека OpenJPEG (v2)). И после некоторого более длительного тестирования, включая другие, я нашел это наиболее удобным.

Преимущества JP2OpenJPEG

  • бесплатно использовать для открытия / сохранения
  • нет «маленького» размера (определенно может превышать 65500x65500)
  • очень эффективное сжатие (возможно установить%)
  • включает в себя пирамиды (превью) для быстрого просмотра (также можно установить)

(варианты настройки сжатия ( -co КАЧЕСТВО ), пирамид ( -co РАЗРЕШЕНИЯ ) и некоторые другие - http://www.gdal.org/frmt_jp2openjpeg.html )

Простой пример преобразования в QGIS с использованием gdal_translate (в QGIS перейдите в Raster / Converion / Translate , установите все, что вам нужно, и, возможно, нажмите кнопку редактирования, чтобы настроить команду в соответствии с вашими потребностями):

gdal_translate -of JP2OpenJPEG -co QUALITY=10 srcGridOrImage image.jp2  
Miro
источник
6

Для темы 2: Здесь более длинное исследование JP2, потому что мне также было интересно использовать более эффективное сжатие. И результат IMO таков: в GDAL / QGIS (как QgsRastrerDataProvider) вы не можете простым способом сочетать правильное сжатие jpeg2000 и быстрые параметры кэширования, такие как наборы плиток и блочные структуры.

Обычно я предпочитаю GeoTiff для Raster-DB, он давно поддерживается GDAL и имеет множество функций, облегчающих жизнь.

Вы можете найти возможности драйвера данных JP2 на странице gdal. Для ваших нужд jp2k JPEG2000 (зависимости libjasper) перечислены на этой странице: http://www.gdal.org/frmt_jpeg2000.html . Как указано на http://www.gdal.org/formats_list.html, «драйвер» поддерживает чтение, запись, ограничен 2 ГБ и встраивается начиная с версии 1.9 GDAL и имеет некоторые параметры блока ...

Чтобы быть уверенным, что возможно с JP2, я создал тестовый набор.

Я использую большие фотографии с места обитания, чтобы обнаружить морских птиц в Балтийском море размером ок. 12000 на 10000 пикселей (RGB) и разрешение экрана 2 см (надеюсь, оно достаточно большое). В моем QGIS-проекте на данный момент у меня 270 файлов объемом около 130 ГиБ. И он хорошо работает на 64-битной ОС Debian 7.0 Linux с ядрами Opteron 8 ГБ и 4xAMD. ... но с GeoTiff.

Чтобы получить быстрый доступ к ГИС-инструменту, на изображения ссылаются и пересэмплируют с помощью GDAL, используя следующие шаги и опции (извините за стиль сценария bash):

Ссылка на изображение с наборами данных из журнала gps:

    gdal_translate \
    -of GTiff \
    -gcp   0     0 $ulx   $uly \
    -gcp   0   $hg $llx   $lly \
    -gcp $cwd $chg $cpx   $cpy \
    -gcp $wd     0 $urx   $ury \
    -gcp $wd   $hg $lrx   $lry \
    -a_srs epsg:32632 \ 
    $raw_tif $ref_tif

Переменные $ [u | o] [l | r] [x | y] - это углы изображения, заданного фотограмметрическим исчислением, а переменная $ wd - ширина изображения, $ hg высота изображения и $ cwd $ chg - Центральная точка.

Деформируйте изображение с помощью набора параметров плитки в реальном мире:

    gdalwarp \
    --config GDAL_CACHEMAX 2000 -wm 2000 -wo NUM_THREADS=4 \
    -r bilinear -dstnodata '0 0 0' \
    -of GTiff \
    -t_srs epsg:32632 \
    -tr 0.02 0.02 \
    -co COMPRESS=LZW \
    -co TILED=YES \
    -co BLOCKXSIZE=512 \
    -co BLOCKYSIZE=512 \
    $ref_tif $geo_tif

Параметры: --config GDAL_CACHEMAX 2000 -wm 2000 -wo NUM_THREADS = 4 указывает железу использовать большое количество кеша и четыре процессорных потока для вычисления материала. Повторная выборка выполняется билинейным способом, а система координат - UTM-32 .. но я хочу использовать блочные плитки размером 512x512, чтобы сделать операции навигации (масштабирование, панорамирование, наведение) быстрыми и плавными. Это делается с помощью опций -co TILED = YES -co BLOCKXSIZE = 512 -co BLOCKYSIZE = 512.

Запишите пирамиды в GeoTiff на уровнях масштабирования 2,4,8 и 16:

    gdaladdo -r gauss $geo_tif 2 4 8 16

Результирующий GeoTiff, показанный gdalinfo:

 Driver: GTiff/GeoTIFF
 Files: CF006135.TIF
 Size is 12419, 9900
 Coordinate System is:
 PROJCS["WGS 84 / UTM zone 32N",
    GEOGCS["WGS 84",
        DATUM["WGS_1984",
             SPHEROID["WGS 84",6378137,298.257223563,
                 AUTHORITY["EPSG","7030"]],
             AUTHORITY["EPSG","6326"]],
        PRIMEM["Greenwich",0],
        UNIT["degree",0.0174532925199433],
        AUTHORITY["EPSG","4326"]],
    PROJECTION["Transverse_Mercator"],
    PARAMETER["latitude_of_origin",0],
    PARAMETER["central_meridian",9],
    PARAMETER["scale_factor",0.9996],
    PARAMETER["false_easting",500000],
    PARAMETER["false_northing",0],
    UNIT["metre",1,
        AUTHORITY["EPSG","9001"]],
    AUTHORITY["EPSG","32632"]]
Origin = (656099.007276594405994,5998980.139660121873021)
Pixel Size = (0.020000000000000,-0.020000000000000)
Metadata:
  AREA_OR_POINT=Area
Image Structure Metadata:
  INTERLEAVE=PIXEL
Corner Coordinates:
  Upper Left  (  656099.007, 5998980.140) ( 11d23'17.54"E, 54d 6'54.87"N)
  Lower Left  (  656099.007, 5998782.140) ( 11d23'17.17"E, 54d 6'48.47"N)
  Upper Right (  656347.387, 5998980.140) ( 11d23'31.21"E, 54d 6'54.60"N)
  Lower Right (  656347.387, 5998782.140) ( 11d23'30.84"E, 54d 6'48.20"N)
  Center      (  656223.197, 5998881.140) ( 11d23'24.19"E, 54d 6'51.54"N)
Band 1 Block=512x512 Type=Byte, ColorInterp=Red
 NoData Value=0
 Overviews: 6210x4950, 3105x2475, 1553x1238, 777x619
Band 2 Block=512x512 Type=Byte, ColorInterp=Green
 NoData Value=0
 Overviews: 6210x4950, 3105x2475, 1553x1238, 777x619
Band 3 Block=512x512 Type=Byte, ColorInterp=Blue
 NoData Value=0
 Overviews: 6210x4950, 3105x2475, 1553x1238, 777x619

Так что в GeoTiff все хорошо! Если я попытаюсь создать JP2 с прямым шагом разговора:

 gdalwarp -of jpeg2000 -co TILED=YES -co BLOCKSIZEX=512 -co BLOCKSIZEY=512 CF006135.TIF CF006135.jp2 
 Output driver `jpeg2000' not recognised or does not support
 direct output file creation.  The following format drivers are configured
 and support direct output:
   VRT: Virtual Raster
   GTiff: GeoTIFF
   NITF: National Imagery Transmission Format
   HFA: Erdas Imagine Images (.img)
   ELAS: ELAS
   MEM: In Memory Raster
   BMP: MS Windows Device Independent Bitmap
   PCIDSK: PCIDSK Database File
   ILWIS: ILWIS Raster Map
   SGI: SGI Image File Format 1.0
   Leveller: Leveller heightfield
   Terragen: Terragen heightfield
   netCDF: Network Common Data Format
   HDF4Image: HDF4 Dataset
   ISIS2: USGS Astrogeology ISIS cube (Version 2)
   ERS: ERMapper .ers Labelled
   RMF: Raster Matrix Format
   RST: Idrisi Raster A.1
   INGR: Intergraph Raster
   GSBG: Golden Software Binary Grid (.grd)
   PNM: Portable Pixmap Format (netpbm)
   ENVI: ENVI .hdr Labelled
   EHdr: ESRI .hdr Labelled
   PAux: PCI .aux Labelled
   MFF: Vexcel MFF Raster
   MFF2: Vexcel MFF2 (HKV) Raster
   BT: VTP .bt (Binary Terrain) 1.3 Format
   LAN: Erdas .LAN/.GIS
   IDA: Image Data and Analysis
   GTX: NOAA Vertical Datum .GTX
   NTv2: NTv2 Datum Grid Shift
   ADRG: ARC Digitized Raster Graphics
   SAGA: SAGA GIS Binary Grid (.sdat)

и это не удается. Может быть, сообщение об ошибке дает вам подсказку или другой формат, который вы можете использовать.

Попытка с инструментом gdal_translate даст вам правильный JP2000

 gdal_translate -of jpeg2000\
    -co TILED=YES -co BLOCKSIZEX=512 -co BLOCKSIZEY=512\
    CF006135.TIF CF006135.jp2

 ls -l 
 -rw-r--r-- 1 huckfinn huckfinn  63538529 Jan 28 23:55 CF006135.jp2
 -rw-r--r-- 1 huckfinn huckfinn       388 Jan 28 23:04 CF006135.jp2.aux.xml
 -rw-r--r-- 1 huckfinn huckfinn 519882980 Sep 30 21:01 CF006135.TIF

и степень сжатия составляет 1: 8, но мы теряем свойства блока и набора листов, как показано в gdalinfo:

 gdalinfo CF006135.jp2 
 Driver: JPEG2000/JPEG-2000 part 1 (ISO/IEC 15444-1)
 Files: CF006135.jp2
        CF006135.jp2.aux.xml
 Size is 12419, 9900
 Coordinate System is:
 PROJCS["WGS 84 / UTM zone 32N",
     GEOGCS["WGS 84",
         DATUM["WGS_1984",
             SPHEROID["WGS 84",6378137,298.257223563,
                 AUTHORITY["EPSG","7030"]],
             AUTHORITY["EPSG","6326"]],
         PRIMEM["Greenwich",0],
         UNIT["degree",0.0174532925199433],
         AUTHORITY["EPSG","4326"]],
     PROJECTION["Transverse_Mercator"],
     PARAMETER["latitude_of_origin",0],
     PARAMETER["central_meridian",9],
     PARAMETER["scale_factor",0.9996],
     PARAMETER["false_easting",500000],
     PARAMETER["false_northing",0],
     UNIT["metre",1,
         AUTHORITY["EPSG","9001"]],
     AUTHORITY["EPSG","32632"]]
 Origin = (656099.007276594405994,5998980.139660121873021)
 Pixel Size = (0.020000000000000,-0.020000000000000)
 Metadata:
   AREA_OR_POINT=Area
 Corner Coordinates:
 Upper Left  (  656099.007, 5998980.140) ( 11d23'17.54"E, 54d 6'54.87"N)
 Lower Left  (  656099.007, 5998782.140) ( 11d23'17.17"E, 54d 6'48.47"N)
 Upper Right (  656347.387, 5998980.140) ( 11d23'31.21"E, 54d 6'54.60"N)
 Lower Right (  656347.387, 5998782.140) ( 11d23'30.84"E, 54d 6'48.20"N)
 Center      (  656223.197, 5998881.140) ( 11d23'24.19"E, 54d 6'51.54"N)

Последний тест состоял в том, чтобы использовать GeoTiff с внутренним сжатием JPEG, но мы получаем:

 gdalwarp -of GTiff \
  -co COMPRESS=JPEG \
  -co TILED=YES -co BLOCKSIZEX=512 -co BLOCKSIZEY=512\
  CF006135.TIF CF006135_IJPG.TIF
  Creating output file that is 12419P x 9900L.
  Warning 6: Driver GTiff does not support BLOCKSIZEX creation option
  Warning 6: Driver GTiff does not support BLOCKSIZEY creation option
  Processing input file CF006135.TIF.
  ....

Итак, куда идти отсюда. На странице lib драйвера JP2000 Jasper в GDAL перечислены некоторые параметры для создания образа jp2000 с опциями блока:

 Encoding parameters, directly delivered to the JasPer library described in the JasPer documentation. Quoted from the docs:

``The following options are supported by the encoder:
imgareatlx=x    Set the x-coordinate of the top-left corner of the image area to x.
imgareatly=y    Set the y-coordinate of the top-left corner of the image area to y.
tilegrdtlx=x    Set the x-coordinate of the top-left corner of the tiling grid to x.
tilegrdtly=y    Set the y-coordinate of the top-left corner of the tiling grid to y.
tilewidth=w     Set the nominal tile width to w.
tileheight=h    Set the nominal tile height to h.
prcwidth=w  Set the precinct width to w. The argument w must be an integer  power of two. The default value is 32768.
prcheight=h     Set the precinct height to h. The argument h must be an integer power of two. The default value is 32768.
cblkwidth=w     Set the nominal code block width to w. The argument w must be an integer power of two. The default value is 64.
cblkheight=h    Set the nominal code block height to h. The argument h must be an integer power of two. The default value is 64.

но вопрос в том, какой из них будет использовать QGIS.

huckfinn
источник
1
Спасибо, очень ценю это. Я также провел свои собственные тесты. Как я вижу, JPEG2000 - это формат. Как я упоминал ранее, TIFF не должен использоваться, потому что я могу использовать только сжатие JPEG (не JP2000), поэтому есть ограничение по размеру. Я использовал драйвер (код) JP2OpenJPEG, который доступен в моей версии QGIS / GDAL и не имеет ограничения по размеру. И самое главное, он имеет хорошие параметры создания - среди прочего Resolutions и BLOCK * SIZE (для обоих установлены приемлемые значения по умолчанию).
Миро
Спасибо, это хорошие новости. К сожалению, в настоящий момент Debian Wheezy не поддерживает этот драйвер ... но хорошо бы знать, какой из множества jp2000'-концов является самым подходящим. -
Хакфинн
5

Для темы 1. QGIS использует GDAL в качестве QgsRasterdataProvider. Таким образом, возможности чтения и записи растрового формата реализованы в GDAL lib. Вы можете найти поддерживаемый формат по следующей ссылке http://www.gdal.org/formats_list.html . Команда gdal-config --formats дает вам общее представление о том, какие форматы встроены в вашу библиотеку или редакцию. То, что предоставляется вашей редакцией, зависит от вашего пакета, ОС и так далее. Для получения дополнительной информации читайте http://trac.osgeo.org/gdal/wiki/BuildHints .

huckfinn
источник
Спасибо за gdal-config --formats. Первая часть головоломки выполнена.
Миро
1
gdal-config --formats предназначен только для систем Unix. В Windows можно сделать gdal_translate --formats или gdalwarp --formats, чтобы увидеть, что доступно.
Миро
Хм, это правда, gdal-config дает компиляторам unix совет для определения зависимостей библиотеки. ОК, это не имеет смысла в Windows (за исключением cygwin или mingw). Но gdalinfo --format $ DRIVERNAME дает вам информацию.
huckfinn