Étirement du contraste
Le contraste est une mesure de la plage des valeurs d'intensité dans une image et est défini comme la différence entre la valeur maximale et la valeur minimale d'un pixel. Le contraste maximal d'une image 8 bits est de $ 255 (max) – 0 (min) = 255$.
Toute valeur inférieure à cela signifie que l'image présente un contraste plus faible que possible. L'étirement du contraste tente d'améliorer le contraste de l'image en étirant la plage des valeurs d'intensité à l'aide d'une mise à l'échelle linéaire.
Supposons que $𝐼$ soit l'image d'entrée d'origine et que $𝑂$ soit l'image de sortie. Soient $𝑎$ et \𝑏 les valeurs minimale et maximale de pixels autorisées (pour une image 8 bits, cela signifie $𝑎$ = 0 et $𝑏$ = 255) et soient $𝑐$ et $𝑑 $ les valeurs minimale et maximale de pixels trouvées dans $𝐼$. L'image à contraste étiré $𝑂$ est alors donnée par la fonction :
\( 𝑂(𝑥, 𝑦) = (𝐼(𝑥, 𝑦) − 𝑐)( \frac {b-a}{d-c}) +a\)
Détection de contours
Les contours constituent une source importante d'informations sémantiques dans les images. Ils apparaissent dans la perception visuelle humaine au niveau des transitions entre des zones d'intensité, de couleur ou de texture différentes. Une image en niveaux de gris peut être vue comme un paysage en 2D où des zones d'intensité différente se trouvent à différentes altitudes. Une transition entre des zones d'intensité différente dans une image $𝐼$ signifie qu'il doit y avoir une pente raide, que nous formalisons sous la forme du gradient (vecteur) :
Comme l'image 𝐼 est discrète, nous devons approximer les dérivées continues $\frac{\partial I}{\partial x}$ par des différences finies. Des exemples simples de noyaux de convolution effectuant des différences finies sont les filtres de Sobel définis comme suit :
- heading
- code
-
def edge_detection(image, filter): image_x = convolution2D(image, filter) plt.imshow(image_x, cmap='gray') plt.title("Horizontal Edge S_x") plt.show() image_y = convolution2D(image, np.flip(filter.T, axis=0)) plt.imshow(image_y, cmap='gray') plt.title("Vertical Edge S_y") plt.show() G_magnitude = np.sqrt(np.square(image_x) + np.square(image_y)) max_value = get_max_ele(G_magnitude) print("max value is :",max_value,"we need normalize it") # normalize the result G_magnitude = G_magnitude * 255.0 / max_value plt.imshow(G_magnitude, cmap='gray') plt.title("result") plt.show() return G_magnitude