MML:n JPEG2000 ortoilmakuvat ja niiden käyttö

JPEG2000 on upea tiedostomuoto, mutta valitettavasti niin mutkikas, että maailmasta ei löydy monta hyvää ja nopeaa ohjelmakirjastoa niiden käsittelemiseen. Yksikään todella nopea kirjasto ei ole vapaa. Kuitenkin netistä löytyy ilmaisia ja laillisia ohjelmia tehokkaaseen JPEG2000-käsittelyyn vähintään omaan henkilökohtaiseen käyttöön. Tarkistakaa lisenssit ennen kuin alatte käydä kauppaa kuvanmuunnoksilla.

Kirjoitan aikanaan lisää JPEG2000:sta, mutta koska niitä nyt on jo MML:ltä saatavissa, niin annetaan tässä lyhyt ensiapu.

Nämä kannattaa ladata ja pitää tallessa ikuisesti, sillä jonain päivänä ne saattavat kadota netistä.

http://home.gdal.org/fwtools/
FWTools 2.0.4 (Kakadu ja ECW-JPEG2000)
FWTools 2.4.7 (ECW-JPEG2000 ja MrSID-JPEG2000)

Kakadu-demo-ohjelmat
http://www.kakadusoftware.com/index.php?option=com_content&task=view&id=26&Itemid=22

Tuoreista GDAL-versioissa on oletuksena vain avoin OpenJPEG-JPEG2000 ajuri, eikä sillä saa MML:n tiedostoja edes puretuksi tiffeiksi. Ja koska mm. Quantum GIS käyttää GDAL:ia, niin vakio-JPEG2000 ajurilla tulee saamaan kurjan kokemuksen.

Tässä pienet nopeusvertailut MML:n mustavalkokuvan ja värikuvan purkamisesta eri GDAL-ajureilla geotiffiksi:

GDAL-JP2KAK (Kakadu) (FWtools 2.0.4) mustavalko 100 sekuntia, värikuva 340 sekuntia
GDAL-JP2ECW (ECW-JPEG2000) FWTools 2.4.7 mustavalko 160 sekuntia, värikuva 514 sekuntia
GDAL-JP2MrSID FWTools 2.4.8 mustavalko 130 sekuntia, värikuva 263 sekuntia

MrSID-ajurin käyttämiseksi täytyy antaa FWTools 2.4.7:lle ympäristömuuttuja GDAL_SKIP=JP2ECW
Winsdowsissa siis komentoriviltä:
set GDAL_SKIP=JP2ECW

Vertailuaika Kakadun kdu_expand-ohjelmalla mustavalko 71 sekuntia, värikuva 194 sekuntia

Yksi toisto, mutta tulokset vastaavat omia kokemuksia. GDAL-Kakadun värikuva-ajan hitaus on ainoa, mikä kummastuttaa.

Ohjelma, joka kannattaa myös pitää tallessa, jos on sellaisen joskus ER Mapperilta ladannut, on nimeltään
ECW JPEG 2000 Compressor 7.0
Se oli aikanaan vapaasti ladattavissa ja sen käyttö oli ja on täysin vapaata, mutta sitä ei ole koskaan saanut jakaa eteenpäin.

Sitten vielä luultavasti nämä OSSIM-versiot tulevat Kakadu-laajennoksen kanssa, mutta en pysty nyt tarkistamaan:
http://download.osgeo.org/ossim/installers/windows/ossim-svn-12062011-installer.exe (Win 32-bit)
http://download.osgeo.org/ossim/installers/windows/ossim-osgeo_x64_1_8_12-4.exe (Win 64-bit)

OSSIM:in kehittäjillä on täysi Kakadu-lisenssi, ja siksi OSSIM:in Kakadu-ominaisuuksien käytöllä ei ole mitään rajaa, eli OSSIM:lla saa tehdä JPEG2000-bisnestä aivan vapaasti. Tosin sen Kakadu-ohjain ei ole vielä ihan huippuluokkaa.

OpenJUMP Plus-versio avaa hienosti MML:n JPEG2000 kuvat. Juuri nyt hyvä versio ladattavaksi on 1.5.2 RC3, joka löytyy omasta kansiostaan täältä
http://sourceforge.net/projects/jump-pilot/files/OpenJUMP_snapshots/

Aiheeseen liittyviä vanhoja tekstiluonnoksia
http://latuviitta.org/documents/OpenJUMP_with_JPEG2000.pdf
http://latuviitta.org/documents/OpenJUMP_image_layer_tool.pdf

Kosmo GIS ja gvSIG pärjäävät oletettavasti yhtä hyvin, koska ne käyttävät samoja JPEG2000-komponentteja.

Ja ettei tarvitse ruveta väittämään, että JPEG2000 on hidas tiedostomuoto, niin kannattaa katsella kuvia Kakadu-demopakettiin kuuluvalla kdu_show-ohjelmalla.

Windowsin QGis osaa näyttää MML:n JPEG2000-ilmakuvat oikein ja oikeassa paikassa, ainakin OSGEO4W-asennuksena. Tämä GDAL-versiolla 1.9.1.

En kylläkään muista, mitä kaikkea lisäpaketteja asensin (valinnan Advanced Install kautta).

Sitten on mahdollista omiin tarpeisiin muuntaa häviöllisesti pakatuksi.


Jos on tarpeen, niin jp2-tiedostoista on mahdollista irroittaa metadata ExifToolilla. (Windowsille on versio, joka ei vaadi perliä - en ole testannut.) Esimerkiksi Savonlinnan keskustan ilmakuvan olennainen data näyttää tältä:


File Name                       : N5311A.jp2
Image Height                    : 12000
Image Width                     : 12000
Pixel Scale                     : 0.5 0.5 0
Model Tie Point                 : 0 0 0 596000 6864000 0
Geo Tiff Version                : 1.1.0
GT Model Type                   : Projected
GT Raster Type                  : Pixel Is Area
GT Citation                     : ETRS89 / TM35FIN(E,N)
Geog Citation                   : ETRS89
Geog Angular Units              : Angular Degree
Projected CS Type               : Unknown (3067)
Proj Linear Units               : Linear Meter
Image Size                      : 12000x12000

Pitää paikkansa. Näyttäisi siltä, että kuvat saa nykyviin asentamalla tämän:
gdal-mrsid: MrSID Raster Plugin for GDAL

Asennus ei vaadi mitään muuta, esimerkiksi erikseen hankittavien dll:ien laittamista oikeaan paikkaan kuten ECW Raster Plugin vaatii. Tämä oli hyvä tieto.

Gdalinfo listaa enemmänkin metadataa kaikenlaisista tukemistaan kuvista.

D:\100t_deflate>gdalinfo  UX51L_RVK_5.tif
Driver: GTiff/GeoTIFF
Files: UX51L_RVK_5.tif
Size is 9600, 9600
Coordinate System is:
PROJCS["ETRS89 / TM35FIN(E,N)",
    GEOGCS["ETRS89",
        DATUM["European_Terrestrial_Reference_System_1989",
            SPHEROID["GRS 1980",6378137,298.2572221010002,
                AUTHORITY["EPSG","7019"]],
            TOWGS84[0,0,0,0,0,0,0],
            AUTHORITY["EPSG","6258"]],
        PRIMEM["Greenwich",0],
        UNIT["degree",0.0174532925199433],
        AUTHORITY["EPSG","4258"]],
    PROJECTION["Transverse_Mercator"],
    PARAMETER["latitude_of_origin",0],
    PARAMETER["central_meridian",27],
    PARAMETER["scale_factor",0.9996],
    PARAMETER["false_easting",500000],
    PARAMETER["false_northing",0],
    UNIT["metre",1,
        AUTHORITY["EPSG","9001"]],
    AUTHORITY["EPSG","3067"]]
Origin = (500000.000000000000000,7770000.000000000000000)
Pixel Size = (5.000000000000000,-5.000000000000000)
Metadata:
  AREA_OR_POINT=Area
  TIFFTAG_RESOLUTIONUNIT=2 (pixels/inch)
  TIFFTAG_XRESOLUTION=254
  TIFFTAG_YRESOLUTION=254
Image Structure Metadata:
  COMPRESSION=DEFLATE
  INTERLEAVE=PIXEL
Corner Coordinates:
Upper Left  (  500000.000, 7770000.000) ( 27d 0' 0.00"E, 70d 2'13.22"N)
Lower Left  (  500000.000, 7722000.000) ( 27d 0' 0.00"E, 69d36'23.66"N)
Upper Right (  548000.000, 7770000.000) ( 28d15'34.32"E, 70d 1'57.21"N)
Lower Right (  548000.000, 7722000.000) ( 28d14' 2.67"E, 69d36' 8.02"N)
Center      (  524000.000, 7746000.000) ( 27d37'24.25"E, 69d49'14.49"N)
Band 1 Block=9600x1 Type=Byte, ColorInterp=Red
Band 2 Block=9600x1 Type=Byte, ColorInterp=Green
Band 3 Block=9600x1 Type=Byte, ColorInterp=Blue

Kirjoittelenpa tähän kun kummiskin asiaa läheltä liipataan. Elikkäs asiani koskee semmoista kun olen tuolla JOSMilla täydennellyt paikallisia mehtäpolkuja yms. sitä mukaa kun niitä on tullut koluttua ja siinä apuna olen käyttänyt jonkun verran vielä bingin ilmakuvia. Mielenkiinto näitä ortokuvia kohtaan heräsi kun ne näyttäisi olevan hivenen tarkempia ja tuoreempia niin siinäpä sitten aloin tohkeissani OSGeo4W ohjelmalla noita .jp2 tiedostoja muuntamaan .tiffeiksi, että saisi ne JOSMissa näkymään.

Ohjelma teki muunnoksen ja samalla yksittäisen tiedoston kooksi muodostui n. 500Mt ja tämähän ei sitten enää oikein tunnu JOSMin kanssa pelittävän ainakaan omalla koneella kun ei mukamas muisti riitä kuvien latailuun vaikka -Xmx###M-komennolla sitä parhaimmillaan ~1600Mt tarjosin.

Joten kysymykseni lyhykäisyydessään olisi, että mitä minun täytyy tehdä jotta nämä hienot ortokuvat omassa windows koneessani mahdollisimman vähällä kikkailulla saisin JOSMin kanssa toimimaan :)?

Kiitokset etukäteen.

edit: Hieman keskustelupalstaa tutkimallahan selvisi, että loistava kapsi tarjoaa moisen palvelun erittäin kätevästi ja ohjeet näiden ortokuvien käyttöön JOSM:lla löytyy sivuston alapuoliskolta.

http://kartat.kapsi.fi/#

Tästä pitäisi varmaan kirjoittaa ohje, mutta GDAL:ia käyttäville ohjelmille (QGis, Mapserver, Merkaartor ym.) saadaan pienet ja nopeasti toimivat ilmakuvat näillä kahdella komennolla:

gdal_translate -of GTiff -co PHOTOMETRIC=YCBCR -co tiled=yes
-co COMPRESS=JPEG input.jp2 output.tif

gdaladdo --config COMPRESS_OVERVIEW JPEG --config PHOTOMETRIC_OVERVIEW YCBCR
output.tif 2 4 8 16 32 64

Ensimmäinen tekee sisäisesti laatoitetun tiff:in, joka käyttää jpeg-pakkausta, toinen tekee kuvan käytöstä nopeampaa kaukaa katsottuna, koska tiff:iin lasketaan 1, 2, 4, 8, 16 ja 32 metrin pikselikoon versiot heti saataville.

Nyt kun MML on laittanut keväisiä ortokuvia jakoon, ajattelin elvyttää tätä ketjua ja kysellä onko kellä näppärää komentoa GDALille linuxissa jolla saisi JP2 kuvat GeoTiffeiksi?
Kapsin WMS palvelusta kun tuntuu puuttuvan aika paljon myös vanhempaa materiaalia.

Nykyisellään käännän opj_decodella JP2–>TIFF, haen ohjelmallisesti JP2-kuvasta paikkatiedon ja sitten gdal_translatella TIFF–>Geotiff
Tuntuu tämäkin toimivan mutta yhtään ei harmittaisi jos jotain välivaiheita saisi pois.

Gdal_translate:lla suoraan muunnettaessa pääsin puolessa tunnissa vaiheeseen “0…”, jonka jälkeen varoitus “Warning 1: Right position of the decoded area (region_x1=12288) is outside the image area (Xsiz=12000)”

Käytössä GDAL 1.11dev (git haettu 13.6.) openjpeg (svn haettu 13.6.)

Manu

GDAL:n OpenJPEG-ajuri toimii joillakin JPEG2000-tiedostoilla ihan kohtuullisesti, mutta ei MML:n käyttämillä parametreillä pakatuilla tiedostoilla. Eipä tässä parissa vuodessa juuri mikään ole muuttunut, samat JPEG2000-kirjastot ovat edelleen käyttökelpoisimpia. Kakadun demo-ohjelmista pitäsi olla Linuxille (Ubuntu) versiot saatavissa http://www.kakadusoftware.com/index.php?option=com_content&task=view&id=26&Itemid=22 ja se on varmasti nopein vaihtoehto. Kdu_expand kirjoittaa ulos geotiffejä. ECWJPEG2000-kirjaston 5.x -versioita voi käyttää read-only lisenssillä vapaasti, jos sellaisen Linuxille käännetyn version löytää, niin se varmaan toimii kohtuullisesti. Kirjaston seuraavaan versioon pitäisi tulla MML:n kuville reilusti lisää vauhtia.

Jos et löydä hyvää GDAL-ajuria Linuxille ja työ pitää vain saada tehdyksi ja periaatteissa on riittävästi joustoa, niin hanki jostain Windows-kone lainaksi.

Nuo JRA:n ohjeistamat FWTools versiot, joissa toimiva J2000 purku toimivat myös winellä.

Oletko kääntänyt itse ohjelmia Linuxissa? Jos olet, ei ole erityisen vaikeaa liittää Mrsid-kirjastoa (JP2-tukineen) itse käännettyyn GDALiin. Ensiksi tosin täytyy rekisteröityä Lizardtechin developer-sivuilla. Sitten lataa “Linux unified” -paketti, ja valitse RedHat Enterprise Linux 6 x86-64 (64-bittinen) tai x86 (32-bittinen).

Pura .tar.gz jonnekin. Sen sisällön voi sitten kopioida jonnekin sopivaan paikkaan, esim. /opt/mrsid.

Sitten GDALin configure-vaiheessa tehdään kuten ohje sanoo, ts. lisätään komentoon (edellä sanotun paikan mukaisesti) --with-mrsid=/opt/mrsid/Raster_DSDK --with-mrsid_lidar=/opt/mrsid/Lidar_DSDK --with-jp2mrsid . Täten esimerkki configuresta, jossa on erityisesti estetty opensource-JPEG2000-kirjastojen käyttö:

./configure --prefix=/opt/gdal/ --with-mrsid=/opt/mrsid/Raster_DSDK --with-mrsid_lidar=/opt/mrsid/Lidar_DSDK \
--with-jp2mrsid --without-openjpeg --without-jasper --with-liblzma --with-epsilon --with-opencl \
--with-armadillo --with-webp --with-poppler --with-mysql --with-odbc --with-spatialite

Voin antaa yksityiskohtaisetkin ohjeet, jos joku haluaa.


Tällä hetkellä Windowsissa JPEG2000-muunnos toimii ainakin 64-bittisessä OSGEO4W-shellissä. Se käyttää JP2ECW-ajuria, joten asennusvaiheessa pitää valita gdal-ecw-paketti:

Tämän asennuksen jälkeen esim. tämä komento toimii:

gdal_translate -of GTiff -co PHOTOMETRIC=YCBCR -co TILED=YES -co COMPRESS=JPEG V4312A.jp2 V4312A.tif

Muistia kuluu enimmillään puolitoista gigaa, mikä ei ole liikaa nykyisillä tietokoneilla.

Kiitos tästä. Itse tosiaan olen ohjelmat käännellyt tuon Mrsid kirjaston kanssa kuvien kääntely formaatista toiseen sujuvoitui kummasti. :smiley: OpenJpeg:illä muistin käyttö pomppasi muistaakseni loppuvaiheessa noin viiteen gigaan.
Huomasin myös latailleeni joskus Mrsidistäkin jonkun aikaisemman version mutta jostain syystä en koskaan ollut kääntänyt sille tukea Gdaliin. :frowning: