Deux choses pour votre problème. D'abord, voici la raison de votre problème de multiplication: différents types. I
et G
sont de type uint8
. H
est de type double
. Lorsque vous effectuez la multiplication, Matlab semble utiliser le type le plus restrictif, alors voici uint8
. Ainsi, le résultat de Hist(2)*G(2)
est de type uint8
, compris entre 0 et 255.
Deuxièmement: s'il vous plaît NE PAS calculer un histogramme de cette façon. Matlab a de nombreuses fonctions pour cela (hist
et histc
pour les plus courantes), donc s'il vous plaît lisez le doc et utilisez-le au lieu de créer votre propre code. Si vous voulez néanmoins écrire votre propre fonction (but d'apprentissage), ce code est beaucoup trop lent. Vous parcourez l'image environ 256 fois, c'est inutile. Au lieu de cela, d'une manière classique serait:
Hist = zeros(1,256);
for i=1:numel(I)
Hist(int32(I(i))+1) = Hist(int32(I(i))+1)+1
end
Vous utilisez directement la valeur du pixel courant (+1 parce que l'indice commence à 1 dans Matlab) pour accéder à l'emplacement correspondant de votre histogramme. En outre, vous devez convertir la valeur du pixel en int32, pour éviter le problème de la valeur 255 (avec les variables uint8, 255 + 1 = 0). Je ne veux pas ici être pédant, mais Matlab vient avec des milliers de fonctions (sans mentionner les dizaines de boîtes à outils) et un doc très bien écrit, donc s'il vous plaît lisez-le et utilisez tous les éléments que vous pouvez trouver à l'intérieur, C'est le meilleur conseil que je puisse donner à quiconque commence à apprendre Matlab.
Vous m'avez sauvé la vie merci! – Apastrix