Який формат та параметри використовувати для фотографій антен у QGIS?


10

Наступне запитання, яке стосувалося поводження антен з ArcGIS:

Найефективніший формат для керування повітряною фотографією лише для перегляду

Здається, є два основні варіанти зберігання / переустановки / повторного проектування тощо антен:

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

gdal доступні формати

Що я зрозумів залежно від версії QGIS для обох там, як правило, потрібно встановити додаткові бібліотеки. ECW має деяке обмеження - для стиснення потрібно купувати ліцензію?

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

Відповідь повинна містити:

  1. Що доступно за замовчуванням у QGIS 2.0.1 настільних та / або OSGEO?
  2. Як це працює з великими файлами - збільшення / зменшення (піраміди)?
    • це параметри створення - РЕЗОЛЮЦІЇ для пірамід jp2?

1
Інший підхід: великі серії ортофото часто подаються в якості сервісу OGC WMS / WMTS з таким постачальником, як GeoServer або MapServer.
Якоб

2
GeoTIFF та NITF є загальними для супутникових знімків. Також підтримується в GDAL, але не впевнений, чи підтримує QGIS NITF.
BradHards

@Jakob - я бачу сенс. Але все ж зображення потрібно якось зберігати на сервері (у якомусь форматі), правда?
Миро

@BradHards - Тифф насправді був моїм першим вибором, але єдиним способом його ефективного стиснення є стиснення JPEG, яке приводить мене до такого ж обмеження максимальних розмірів, як якщо б воно зберігалося безпосередньо в JPEG. Справа в тому, що для супутникових знімків в основному потрібне стиснення без втрат. Але це питання більш орієнтоване на повітряні фотографії, які можуть понести певні втрати заради економії величезного зберігання / передачі даних.
Миро

Відповіді:


8

На основі відповідей huckfinn, декількох інших коментарів та моїх висновків:

Формат виграшу - JPEG2000 (чому і яка версія згадується нижче. Чому б не інші )

Чому б не інші:

  1. JPEG
    • Обмеження розміру і розміру даних, і розмірів (4 ГБ та 65500х65500)
    • відсутність (внутрішніх) пірамід = більша кількість зображень, тим більше часу потрібно для її відображення при панорамуванні / збільшення / зменшенні
  2. GeoTIFF
    • Добре для сіток, але для растрових зображень немає ефективної компресії втрат, крім JPEG = така ж проблема, як JPEG
  3. ECW та містер SID
    • Вам потрібна спеціальна ліцензія, щоб можна було економити в 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 / Conversion / Translate , встановіть все, що вам потрібно, і, можливо, натисніть кнопку редагування, щоб налаштувати команду відповідно до ваших потреб):

gdal_translate -of JP2OpenJPEG -co QUALITY=10 srcGridOrImage image.jp2  

6

Для теми 2: Ось більш тривале дослідження JP2, тому що мене також зацікавило використання більш ефективного стиснення. І результат ІМО: У межах GDAL / QGIS (як QgsRastrerDataProvider) ви не можете просто поєднувати правильні параметри стиснення jpeg2000 та швидке кешування, такі як набори плиток та блокові структури.

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

Ви можете знайти можливості драйвера даних JP2 на сторінці gdal. Для ваших потреб jp2k JPEG2000 (залежність від лібясперів) вказаний на цій сторінці: http://www.gdal.org/frmt_jpeg2000.html . Як зазначено на http://www.gdal.org/formats_list.html, "драйвер" підтримує читання, запис, обмежений 2GiB та вбудований з GDAL версії 1.9 та має деякі параметри блоку ...

Тож, щоб бути впевненим, що можливо з JP2, я створив тестовий набір.

Я використовую великі аріальні фотографії для виявлення морських птахів у Балтійському морі розміром приблизно. 12000 на 10000 пікселів (RGB) та роздільну здатність землі 2 см (сподіваюся, що вона досить велика). На даний момент у моєму QGIS-проекті 270 файлів ємністю близько 130 ГіБ. І він добре працює на 64-бітній ОС Debian 7.0 Linux з ядрами 8GB та 4xAMD Opteron. ... але з GeoTiff.

Щоб отримати швидкий доступ у GIS-інструменті, на зображення посилаються та перекомпонуються з 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 = ТАК -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.
  ....

Тож куди піти звідси. На сторінці вкладеного файлу драйвера Jasper JP2000 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.


1
Дякую, дуже ціную це. Тим часом я також робив власні тести. Як я бачу, JPEG2000 - це формат, з яким потрібно йти. Як я вже згадував раніше, TIFF не використовувати becuase, я можу використовувати лише стиснення JPEG (не JP2000), тому є обмеження розміру. Я використовував драйвер (код) JP2OpenJPEG, який доступний у моїй версії QGIS / GDAL і не має обмеження розміру. І найголовніше, що він має хороші параметри створення - серед інших роздільної здатності та BLOCK * SIZE (обидва встановлені за розумними значеннями за замовчуванням).
Миро

Дякую, це хороші новини. На жаль, Debian wheezy не підтримує цього драйвера на даний момент .. але добре знати, хто з багатьох jp2000'eндів є реальним. -
huckfinn

5

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


Дякуємо за gdal-config --формати. Перша частина головоломки виконана.
Миро

1
gdal-config --формати призначені лише для систем Unix. У Windows можна зробити gdal_translate --формати або gdalwarp --формати, щоб побачити, що є в наявності.
Миро

Так, справжній gdal-config дає компіляторам unix поради щодо бібліотечних залежностей. ОК, це не має сенсу в Windows (cygwin або mingw exeped). Але gdalinfo --format $ DRIVERNAME дає вам інформацію.
huckfinn
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.