Histogramme de correspondance de deux Images sans utiliser le histeq
Il est bien connu que histeq
dans MATLAB pouvez effectuer histogramme correspondant de sorte qu'une image de l'histogramme est transformé pour ressembler à une autre de l'histogramme. Je suis en train de réaliser la même opération sans l'aide de histeq
. Je suis conscient que vous avez besoin de calculer le Cdf entre les deux images, mais je ne sais pas quoi faire ensuite. Que dois-je faire?
- je vois.l'écrou de je veux de l'histogramme de l'appariement de deux image
- J'ai écrit une réponse. Avez-vous besoin d'une aide supplémentaire?
- oui. je pense que la cdf est incorrect dans votre code . Cdfi propability et vous devriez utiliser ceci: probc=cumsum(freq)/numel(GIm);
- Autre que la normalisation de la CDF, le code est bon. C'est une chose que j'ai oublié de le faire, alors merci pour cette correction.
Vous devez vous connecter pour publier un commentaire.
Histogramme correspondant est concerné par la transformation d'une image de l'histogramme de sorte qu'il ressemble à un autre. Le principe de base est de calculer l'histogramme de chaque image individuellement, puis calculer leur discrète cumulé les fonctions de distribution (Cdf). Nous allons désigner le CDF de la première image que désignerait ce que le CDF valeur de l'intensité
x
pour la première image.Une fois que vous calculez la Cdf pour chacune des images, vous avez besoin pour calculer une cartographie qui transforme l'intensité à partir de la première image de sorte qu'elle est en accord avec la répartition de l'intensité de la deuxième image. Pour ce faire, pour chaque intensité de la première image - appelons cette dans la deuxième image (dans la gamme de
[0,255]
) tels que:Il peut y avoir des cas où vous n'aurez pas exactement une égalité, donc, ce que vous devez faire est de trouver la plus petite valeur absolue de la différence entre tels que:
Vous voulez faire cela pour toutes les 256 valeurs, et nous permettrait de produire une cartographie. Une fois que vous trouvez cette cartographie, il vous suffit d'appliquer cette cartographie sur la première image pour l'obtenir à regarder comme la répartition de l'intensité de la deuxième image. Une rude (et peut-être inefficace) algorithme ressemblerait à quelque chose comme ça. Laissez
im1
être la première image (de typeuint8
), tandis queim2
est la deuxième image (de typeuint8
):out
devrait contenir votre appariés image où il transforme la répartition de l'intensité de la première image pour correspondre à celui de la deuxième image. Prendre soin de laout
déclaration. La plage d'intensité deim1
s'étend entre[0,255]
, mais MATLAB indexation pour les tableaux commence à 1. Par conséquent, nous avons besoin d'ajouter 1 à chaque valeur deim1
afin que nous puissions correctement index dansM
pour produire notre sortie. Cependant,im1
est de typeuint8
, et MATLAB acides gras saturés valeurs devriez-vous l'essayer et aller au-delà de 255. En tant que tel, pour s'assurer que nous obtenons à 256, nous devons à un type de données qui est au-delà de 8 bits de précision. J'ai décidé d'utiliserdouble
, alors quand on ajoute 1 à chaque valeur dansim1
, nous allons durée entre 1 à 256 pour que nous puissions correctement index dansM
. Également de prendre pas que, lorsque je trouver l'emplacement qui minimise la différence, j'ai aussi doit soustraire 1 au type de données s'étend de[0,255]
.cumsum
conséquent, le code est correct. Le diagramme le prouve, mais je vous remercie pour le lien!