Équilibre des couleurs et publication d'une grande quantité d'images haute résolution dans le géoserveur

11

J'ai une grande quantité d'images RapidEye (+300 Go) que je veux utiliser comme fond de carte pour une application en ligne. Jusqu'à présent, j'ai réussi à les utiliser comme ImagePyramid dans geoserver en suivant les étapes indiquées dans une présentation intitulée "Geoserver on steroids". Le problème est que je n'ai pas été en mesure de faire une bonne balance des couleurs, donc quand on regarde l'ensemble de données, la mosaïque semble très pauvre mais en zoomant, elle s'améliore (photos ci-dessous).

Mon processus est:

  1. Convertir toutes les images en 8 bits, epsg 4326, interpolation cubique à l'aide de gdal
  2. Générer un raster virtuel gdal avec toutes les images (gdalbuildvrt)
  3. Générez la pyramide d'images (gdal_retile avec compression et géotiffage) et publiez sur le géoserveur (en utilisant l'étirement d'histogramme dans le style de calque)

Des conseils pour améliorer le processus et obtenir un meilleur équilibre des couleurs?

entrez la description de l'image ici entrez la description de l'image ici entrez la description de l'image ici

Daniel
la source

Réponses:

6

Je crois que je l'ai.

J'ai forcé un étirement d'histogramme moyen + -2 d'écart standard dans chaque image RapidEye pendant la conversion en 8 bits.

J'ai utilisé un script python pour identifier l'image min, max, moyenne et SD. J'ai ensuite réglé la valeur de la moyenne - 2SD (ou l'image min, selon la valeur la plus élevée) sur 2 et la moyenne + 2SD (ou max) sur 254. Et juste pour être sûr, la valeur d'origine de zéro dans l'image a été définie sur 1 et 2 ^ 16 défini sur 255. NoData a été défini sur 0.

Ce sont les vecteurs de fonction de transfert:

original image values = [0, mean-2SD, mean+2SD, 65536]
rescaled values = [1 2, 254, 255]

Voici quelques captures d'écran. Les problèmes que je dois résoudre maintenant sont

  1. Supprimer la bordure noire autour de l'image Pyramide
  2. Obtenez une meilleure image lorsque vous effectuez un zoom complet. Il ressemble maintenant à un vieux téléviseur réglé sur la mauvaise chaîne

entrez la description de l'image ici entrez la description de l'image ici entrez la description de l'image ici

Modifier
J'ai maintenant placé le code sur GitHub. Cela fait un moment que je ne l'ai pas utilisé. Le code est un peu compliqué, tout comme le référentiel. Mais devrait toujours fonctionner.
https://github.com/dvictori/rapideye_hist2sd

Daniel
la source
Bravo, monsieur. Vous obtenez 10 sur 10 pour cela. En ce qui concerne votre deuxième préoccupation (meilleure apparence lorsque vous zoomez à pleine échelle), pourriez-vous simplement utiliser des images à grain plus bas, telles que LandSat ou ASTER? Je pense que l'imagerie plus grossière serait plus belle lors d'un zoom arrière. ..comme pour votre première préoccupation, j'essaie toujours de casser cette noix, moi-même. J'adorerais voir une description complète de la façon dont vous avez fait cela, y compris le script py si vous êtes prêt à le partager. Avez-vous une chance de présenter votre approche n'importe où?
elrobis
Je n'avais pas l'intention de présenter cela ou de rédiger un article. Mais maintenant que vous l'avez mentionné, qui sait. Avez-vous des suggestions sur un média approprié pour présenter cela? Quant au script py, vous pouvez le télécharger sur dropbox.com/s/1hfobfp9ymtku2n/rapideye_hist2sd.py Cependant, soyez averti. Je me considère comme un programmeur merdique et je suis sûr que mon programme pourrait utiliser beaucoup d'améliorations.
Daniel
2
J'ai changé le lien de téléchargement du commentaire ci-dessus. Si vous voulez regarder le code python que j'ai utilisé, vous pouvez le télécharger sur goo.gl/ePEc7G
Daniel
Merci @Daniel. Je tiens un blog où je publie des tutoriels pour ce genre de choses. Si je tombe sur quelque chose qui n'a pas été facile et pour lequel je n'ai pas pu trouver beaucoup d'aide sur le Web, je vais publier un blog pour deux raisons. Tout d'abord, je suppose que je devrai répéter la tâche un jour, donc si je consolide les étapes dans un article, je peux facilement les revoir plus tard. Deuxièmement, je pense qu'il y a toujours une chance que quelqu'un là-bas veuille faire quelque chose de similaire, et il pourrait bénéficier du poste. Ce que vous avez fait ici est très digne d'un blog, même si c'est votre seul message pendant un certain temps. :)
elrobis
C'est une idée incroyable, et j'essaie de l'adapter à un cadre plus petit, une caméra 3 bandes allant de 8 bits à 8 bits, mais j'ai du mal à l'implémenter. Comment dois-je diriger le répertoire des images d'entrée vers ce script? D'où sont-ils appelés? Je suppose que tout cela doit être exécuté via le géoserveur, mais puis-je le décomposer et l'exécuter de manière autonome?
Wes
4

Daniel, ces images sont-elles de saisons très différentes? Ou des moments de la journée? S'il s'agit de saisons différentes, il peut être difficile d'obtenir un bon équilibre des couleurs. Mais si ce sont des moments différents de la journée, l'application d'une correction pour l'angle du soleil peut aider de manière notable. Une bonne approximation de premier ordre pour l'angle du soleil consiste à multiplier les pixels multipliés par 1,0 / cos (angle_of_sun_off_directly_above). Donc pas d'ajustement si le soleil est directement au dessus, augmentant à ... enfin l'infini à l'approche de l'aube / crépuscule.

J'ai eu de mauvais résultats dans le passé en utilisant l'histogramme correspondant entre des scènes sur des régions qui se chevauchent pour assembler de grandes mosaïques, car vous obtenez d'étranges effets de dérive à travers la mosaïque. Je pense qu'une approche plus utile pourrait être une sorte d'histogramme correspondant à une image cible de couleur de base (peut-être une jolie mosaïque Landsat de la région). Je suis également intéressé par la façon de résoudre ce problème. Charlie Loyd de MapBox pourrait également avoir des idées.

Frank Warmerdam
la source
Frank, les images proviennent principalement de la saison sèche, lorsque la couverture nuageuse est faible. Mais il y a des images de différents mois, comme août, novembre, etc. J'essaie maintenant de diviser les images en petits blocs et de faire une mosaïque pour chacun. Vous fera savoir comment cela se passe. J'ai également écrit un script python pour faire une correspondance CDF et cela fonctionne bien (pas génial) quand j'ai un petit nombre d'images (20) mais quand j'arrive à un grand nombre, une des images est liée à avoir des valeurs en dehors de mon référence image gamme et puis les choses cessent de fonctionner. Il faudra peut-être penser à une meilleure façon de sélectionner l'image de référence.
Daniel
0

J'ai parfois utilisé l'éditeur de liens OSSIM avec une correspondance d'histogramme pour créer des mosaïques à couleurs équilibrées. Le didacticiel de l'éditeur de liens d'images donne un exemple http://download.osgeo.org/ossim/docs/pdfs/ImageLinker_Tutorial.pdf Cependant, l'éditeur de liens d'images n'est pas activement maintenu et je ne sais pas s'il fonctionne plus longtemps. Ossim geocell est le programme actuel mais il n'y a pas beaucoup de documents utilisateur à ce sujet. Je me souviens que pour obtenir un bon résultat, j'ai d'abord prétraité mes scènes Landsat une par une avec OpenEV en appliquant un étirement LUT pour que les images aient visuellement la même apparence. Ensuite, il était plus facile pour OSSIM de faire l'appariement final. Le produit final était à peu près aussi bon que celui que j'avais fait avec l'utilitaire de mosaïque ER Mapper.

user30184
la source