Égalisation d'histogramme ne fonctionne pas sur la couleur de l'image OpenCV
Je suis en train d'effectuer une égalisation d'histogramme à l'aide d'OpenCV à l'aide de la fonction suivante
Mat Histogram::Equalization(const Mat& inputImage)
{
if(inputImage.channels() >= 3)
{
vector<Mat> channels;
split(inputImage,channels);
Mat B,G,R;
equalizeHist( channels[0], B );
equalizeHist( channels[1], G );
equalizeHist( channels[2], R );
vector<Mat> combined;
combined.push_back(B);
combined.push_back(G);
combined.push_back(R);
Mat result;
merge(combined,result);
return result;
}
return Mat();
}
Mais quand je reçois le résultat, il semble n'y avoir aucune différence dans l'entrée et la sortie de l'image, ce que je fais mal?
Désolé pour la mauvaise qualité d'image, la "Séquence" (à gauche) est histogramme égalisé, vous pouvez voir ses même que l'entrée (à droite).
Ce qui manquait?
- Split -> Égaliser -> Merge n'est pas la bonne approche pour effectuer une égalisation d'histogramme de la couleur de l'image. Il sera sévèrement effet l'équilibre des couleurs de l'image. Apporter un objet de multiples couleurs dans l'image et vous verrez la couleur de déséquilibre qu'il va créer.
Vous devez vous connecter pour publier un commentaire.
Égalisation d'histogramme est un processus non linéaire. Canal du fractionnement et de l'égalisation de chaque canal séparément n'est pas la bonne façon de péréquation de contraste. La péréquation consiste à Intensité valeurs de l'image pas les composants de la couleur. Ainsi, pour une simple couleur RVB de l'image, IL ne devrait pas être appliquée individuellement sur chaque canal. Au contraire, il devrait être appliquée de telle sorte que les valeurs d'intensité sont égalisées sans perturber l'équilibre des couleurs de l'image. Ainsi, la première étape est de convertir l'espace couleur de l'image RVB dans l'une des couleurs les espaces qui séparent les valeurs d'intensité à partir de composantes de couleur. Certains de ces facteurs sont:
Convertissez l'image en RVB pour l'un de ces espaces de couleurs. YCbCr est préféré car il est conçu pour numérique images. Effectuez-IL de l'intensité de l'avion Y. Convertir l'image en RVB.
Dans votre situation actuelle, vous n'êtes pas observer aucun changement significatif, parce qu'il y a seulement 2 éminents couleurs de l'image. Lorsqu'il y a beaucoup de couleurs dans l'image, le mode de découpage sera la cause de la couleur de déséquilibre.
Considérez, par exemple, les images suivantes:
Image D'Entrée
L'Intensité De L'Image De L'Égalisation
Personne Égalisation De Canal
(Avis de l'fausses couleurs)
Ici est l'utilisation d'OpenCV code pour égalisation d'histogramme de la couleur de l'image à l'aide de YCbCr de l'espace couleur.
Et la version de python, @sga:
Cependant cela permettra de produire du bruit dans l'image (par exemple, l'image de gauche ci-dessous)
J'ai mis en place une égalisation d'histogramme pour BGRA image. Je pense que cette fonction est utile pour votre objectif, mais vous devez ignorer le canal alpha).
cv::mixChannels
pour l'extrait de R, G et B à partir de 4 canaux de l'image.