7
votes

Égalisation de l'histogramme avec correction de couleur (iPhone / objectif-c)

J'essaie de mettre en œuvre une méthode d'égalisation de l'histogramme (il) pour un uiImage dans mon application iPhone.

J'ai lu ce qui suit:

http://fr.wikipedia.org/wiki/histogramme_qualisation

mais il dit:

Néanmoins, il convient de noter que l'application de la même méthode sur les composants rouge, vert et bleu d'une image RVB peut générer des modifications dramatiques de la balance des couleurs de l'image puisque les distributions relatives des canaux de couleur changent à la suite de l'application de l'algorithme. Toutefois, si l'image est d'abord convertie en un autre espace couleur, l'espace de couleur de laboratoire ou un espace de couleur HSL / HSV en particulier, l'algorithme peut être appliqué sur le canal de luminance ou de valeur sans entraîner des modifications apportées à la teinte et à la saturation de l'image. .

Cela serait-il une approche réalisable?

  1. Prenez des données UIImage et convertir de RVB en HSL
  2. appliquer il sur la chaîne de luminance
  3. Convertissez les données à RVB
  4. créer de nouveaux uiimages à partir de données

    Est-ce que cela sera lent, je me demande? Aussi, devrais-je traiter des données 8/16/24 bits différemment, car je n'ai aucune idée du type d'image utilisera avec mon application? Ou puis-je supposer 24 bits pour des images dans l'iPhone?

    J'apprécierais tous les indicateurs du code de l'objectif-C qui corrigea la péréquation de l'histogramme de couleur.

    J'ai examiné la bibliothèque ci-dessous, mais cela ne fait aucune correction de couleur pour lui:

    http : //code.google.com/p/Simple-iphone-Image-Processing/source/browse/#svn/trunk/classes%3fstate%3dclosed

    Merci!


2 commentaires

Il y a une facilité de mise en œuvre comme réponse à cette question: Stackoverflow.com/Questtions/3278560/... Mais cela ne fonctionnera pas dans l'espace de courant autre que les images natives.


Merci, j'ai vu ça. Je voulais plus d'informations sur l'aspect de la correction des couleurs ...


4 Réponses :


1
votes

Oui, vous pouvez le faire de cette façon, cela fonctionnera. Oui, cela va "coûter plus cher" puisque vous devez faire la conversion de la conversion - mais c'est le prix que vous devrez payer si vous ne voulez pas affecter la teinte et la saturation. Est-ce que ça vaut la peine pour les images que vous corrigez? Cela dépend de votre candidature, vous allez bien avec un coup de performance vs la meilleure qualité? Vous ne devrez probablement pas traiter avec des composants de couleur 8 bits, vous pouvez assumer "24 bits" pour les images, mais il s'agit de 3 composants 8 bits le seul moyen de connaître vos réponses, cependant, c'est essayer.


0 commentaires

0
votes

Je recommande d'utiliser Yuv Colorspace . À la fois pour la précision et la simplicité de calcul (combinaison linéaire).

Une méthode appliquerait l'égalisation de l'histogramme sur l'image RVB (image2). Ensuite, laissez l'utilisateur de choisir ce qu'il veut, s'applique uniquement sur la luminosité ou les 3 canaux. Pour le premier choix, prenez des canaux UV de l'image d'origine avec le canal Y de l'image égalisée et convertissez-la à RVB. Pour le deuxième choix, laissez l'utilisateur avec image2.


0 commentaires

-2
votes

Écrivez simplement les codes et le modèle appliquant à chacun des composants RVB. Bien qu'il y ait beaucoup de calcul pour ses 3 composants, mais la vitesse de programmation est correcte. Dans la plupart des cas, le contraste est amélioré, mais le "look" de l'image est modifié. Alors acceptez de transformer le RVB dans un autre espace, puis appliquez-le à nouveau. Je cherche la formule et aussi l'espace de couleur correct pour le lui. Quel espace de couleur est plus facile?

J'écris le SE dans la plate-forme iPad, mais je trouve après avoir ouvert une grosse image prise de mon canon, l'ensemble du programme se bloque après UipopperContoller, UiImagePickerController. Je pense que c'est peut-être dû au fait que je pousse trop sur le système d'exploitation du téléphone ou que le système d'exploitation n'alloue qu'une quantité limite d'espace mémoire pour chacune des applications. Si les applications utilisent plus que la mémoire pré-définie, l'IOS tue juste les applications immédiatement. Donc, doit prendre en charge la taille de l'image d'entrée et la collecte des ordures de mémoire inutilisée et une fuite de mémoire. L'utilisation de l'outil d'instrument de Xcode pour vérifier la fuite est un must.


1 commentaires

Appliquer à chaque composant RVB individuellement déformerait la couleur de l'image.



0
votes

Depuis la transformation, vous traitez d'I / V comme étant des valeurs continues, vous devrez appliquer une stratégie de binning, ce qui entraînera un histogramme d'étape pour la quantité que vous souhaitez égaliser. Par conséquent, vous pourriez accélérer cela en réduisant la taille de la corbeille?


0 commentaires