Histogramme d'une image
Fondamental : Histogramme d'une image en niveaux de gris
Wikipedia : « Pour une image monochrome, c'est-à-dire à une seule composante, l'histogramme est défini comme une fonction discrète qui associe à chaque valeur d'intensité le nombre de pixels prenant cette valeur. La détermination de l'histogramme est donc réalisée en comptant le nombre de pixel pour chaque intensité de l'image. On effectue parfois une quantification, qui regroupe plusieurs valeurs d'intensité en une seule classe, ce qui peut permettre de mieux visualiser la distribution des intensités de l'image. »
Fondamental : Histogramme d'une image couleur
Wikipedia : « Pour les images couleurs, on peut considérer les histogrammes des 3 composantes indépendamment, mais cela n'est en général pas efficace2. On construit plutôt un histogramme directement dans l'espace couleur. Les classes de l'histogramme correspondent désormais à une couleur (ou un ensemble de couleurs, en fonction de la quantification), plutôt qu'à une intensité. On parle alors parfois d'histogramme de couleur. »
Méthode : Construction de l'histogramme de l'image en niveaux de gris à l'aide de Python
Pour construire l'histogramme de l'image en niveau de gris :
import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
img = cv.imread('c:/temp/fruits.jpg',cv.IMREAD_GRAYSCALE)
plt.hist(img.ravel(),256,[0,256]); plt.show()
Pour construire l'histogramme de l'image en niveau de gris et en couleur :
import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
img = cv.imread('c:/temp/fruits.jpg',cv.IMREAD_GRAYSCALE)
roihist = cv.calcHist([img],[0], None, [256], [ 0, 256] )
xs=np.linspace(0,255,256)
plt.subplot(2,1,1)
plt.plot(xs,roihist,color='k')
img = cv.imread('c:/temp/fruits.jpg',cv.IMREAD_COLOR)
color = ('b','g','r')
plt.subplot(2,1,2)
for i,col in enumerate(color):
histr = cv.calcHist([img],[i],None,[256],[0,256])
plt.plot(histr,color = col)
plt.xlim([0,256])
plt.show()
Méthode : Construction de l'histogramme de l'image en Scilab
Pour construire l'histogramme de l'image en niveau de gris :
scicv_Init();
f = scf();
toolbar(f.figure_id, "off");
img = imread("c:/temp/fruits.jpg");
subplot(2, 1, 1);
matplot(img);
title("image");
imgnb=cvtColor(img,CV_BGR2GRAY);
histnb = calcHist(imgnb, 0, [], 1, 32, [0 256]);
subplot(2, 3, 6);
bar(histnb(:), 'black');
delete_Mat(img);
delete_Mat(imgnb);
delete_Mat(histnb);
Pour construire l'histogramme de l'image en niveau de gris et en couleur :
// Scilab Computer Vision Module
// Copyright (C) 2017 - Scilab Enterprises
scicv_Init();
f = scf();
toolbar(f.figure_id, "off");
img = imread("g:/lib/opencv/samples/data/fruits.jpg");
subplot(2, 3, 1);
matplot(img);
title("image");
// Histogram of the three RBG channels taken separately
// Note: OpenCV color channel order is reversed (BGR)
histB = calcHist(img, 0, [], 1, 32, [0 256]);
subplot(2, 3, 2);
bar(histB(:), 'blue');
histG = calcHist(img, 1, [], 1, 32, [0 256]);
subplot(2, 3, 3);
bar(histG(:), 'green');
histR = calcHist(img, 2, [], 1, 32, [0 256]);
subplot(2, 3, 4);
bar(histR(:), 'red');
imgnb=cvtColor(img,CV_BGR2GRAY);
histnb = calcHist(imgnb, 0, [], 1, 32, [0 256]);
subplot(2, 3, 6);
bar(histnb(:), 'black');
delete_Mat(img);
delete_Mat(imgnb);
delete_Mat(histnb);
delete_Mat(histB);
delete_Mat(histG);
delete_Mat(histR);