Espansione del contrasto
Il contrasto è una misura dell'intervallo dei valori di intensità in un'immagine ed è definito come la differenza tra il valore massimo e il valore minimo del pixel. Il contrasto completo di un'immagine a 8 bit è $ 255 (max) – 0 (min) = 255$.
Qualsiasi valore inferiore a questo indica che l'immagine presenta un contrasto più basso rispetto a quello possibile. L'espansione del contrasto tenta di migliorare il contrasto dell'immagine espandendo l'intervallo dei valori di intensità mediante un ridimensionamento lineare.
Si assuma che $𝐼$ sia l'immagine di input originale e $𝑂$ sia l'immagine di output. Siano $𝑎$ e \𝑏 i valori di pixel minimo e massimo consentiti (per un'immagine a 8 bit ciò significa $𝑎$ = 0 e $𝑏$ = 255) e siano $𝑐$ e $𝑑 $ i valori di pixel minimo e massimo trovati in $𝐼$. Allora l'immagine con contrasto espanso $𝑂$ è data dalla funzione:
\( 𝑂(𝑥, 𝑦) = (𝐼(𝑥, 𝑦) − 𝑐)( \frac {b-a}{d-c}) +a\)
Rilevamento dei bordi
I bordi rappresentano un'importante fonte di informazioni semantiche nelle immagini. Nella percezione visiva umana, essi si manifestano in corrispondenza delle divisioni tra aree con diversa intensità, colore o texture. Un'immagine in scala di grigi può essere pensata come un paesaggio 2D con aree di diversa intensità situate ad altezze differenti. Una transizione tra aree di diversa intensità in un'immagine $𝐼$ indica la presenza di una pendenza ripida, che formalizziamo come il (vettore) gradiente:
Poiché l'immagine 𝐼 è discreta, dobbiamo approssimare le derivate continue $\frac{\partial I}{\partial x}$ mediante differenze finite. Semplici esempi di kernel di convoluzione che eseguono la differenziazione finita sono i filtri di Sobel definiti come segue:
- heading
- code
-
def edge_detection(image, filter): image_x = convolution2D(image, filter) plt.imshow(image_x, cmap='gray') plt.title("Bordo orizzontale S_x") plt.show() image_y = convolution2D(image, np.flip(filter.T, axis=0)) plt.imshow(image_y, cmap='gray') plt.title("Bordo verticale S_y") plt.show() G_magnitude = np.sqrt(np.square(image_x) + np.square(image_y)) max_value = get_max_ele(G_magnitude) print("il valore massimo è :",max_value,"dobbiamo normalizzarlo") # normalizza il risultato G_magnitude = G_magnitude * 255.0 / max_value plt.imshow(G_magnitude, cmap='gray') plt.title("risultato") plt.show() return G_magnitude