Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Equalizzazione dell'Istogramma | Elaborazione delle Immagini con OpenCV
Fondamenti di Computer Vision

book
Equalizzazione dell'Istogramma

Equalizzazione Semplice dell'Istoogramma

L'equalizzazione dell'istogramma è una tecnica utilizzata per migliorare il contrasto globale di un'immagine. Funziona ridistribuendo i valori di intensità in modo che coprano l'intero intervallo possibile (da 0 a 255 nelle immagini a 8 bit). Questo è particolarmente utile per immagini troppo scure o troppo chiare, poiché rende le caratteristiche più visibili equalizzando l'istogramma delle intensità dei pixel.

  • cv2.equalizeHist(image)

    • image: immagine di input in scala di grigi (deve essere a canale singolo);

    • Restituisce una nuova immagine con contrasto migliorato tramite l'espansione e l'appiattimento dell'istogramma.

Equalizzazione Adattiva dell'Istogramma (CLAHE)

CLAHE (Contrast Limited Adaptive Histogram Equalization) è una versione avanzata dell'equalizzazione dell'istogramma che opera su piccole regioni (tile) dell'immagine invece che sull'intera immagine. Migliora il contrasto locale ed evita di amplificare eccessivamente il rumore limitando il contrasto dell'istogramma all'interno di ciascun tile.

  • cv2.createCLAHE(...) crea un oggetto CLAHE con:

    • clipLimit: soglia per la limitazione del contrasto (valore più alto = maggiore contrasto);

    • tileGridSize: dimensione della griglia per suddividere l'immagine in riquadri (ad esempio, 8x8).

  • clahe.apply(image) applica CLAHE all'immagine di input.

Compito

Swipe to start coding

Ti viene fornita una variabile image:

  • Applica l'equalizzazione dell'istogramma semplice e salva il risultato in equalized;
  • Definisci un oggetto della classe CLAHE nella variabile clahe;
  • Applica l'equalizzazione dell'istogramma CLAHE e salva il risultato in clahe_equalized (parametri consigliati: clipLimit=2.0 e tileGridSize=(8, 8)).

Soluzione

import io
import cv2
import numpy as np
import urllib.request
from PIL import Image
import matplotlib.pyplot as plt

url = "https://content-media-cdn.codefinity.com/courses/ef049f7b-ce21-45be-a9f2-5103360b0655/task_pictures/stone_head.png"
with urllib.request.urlopen(url) as response:
image_data = response.read()
image = np.array(Image.open(io.BytesIO(image_data)))
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Apply histogram equalization
equalized = cv2.equalizeHist(image)

# CLAHE equalization
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))
clahe_equalized = clahe.apply(image) # Apply CLAHE

# Show results
plt.figure(figsize=(15, 10))

# Original Image
plt.subplot(3, 2, 1)
plt.imshow(image, cmap="gray")
plt.title("Original Image")
plt.axis("off")

# Simaple Equalized Image
plt.subplot(3, 2, 3)
plt.imshow(equalized, cmap="gray")
plt.title("Equalized Image")
plt.axis("off")

# CLAHE Equalized Image
Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 2. Capitolo 5
single

single

import io
import cv2
import numpy as np
import urllib.request
from PIL import Image
import matplotlib.pyplot as plt

url = "https://content-media-cdn.codefinity.com/courses/ef049f7b-ce21-45be-a9f2-5103360b0655/task_pictures/stone_head.png"
with urllib.request.urlopen(url) as response:
image_data = response.read()
image = np.array(Image.open(io.BytesIO(image_data)))
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

equalized = ___

clahe = ___
clahe_equalized = ___

# Display the results
plt.figure(figsize=(15, 10))

plt.subplot(3, 2, 1)
plt.imshow(image, cmap="gray")
plt.title("Original Image")
plt.axis("off")

plt.subplot(3, 2, 3)
plt.imshow(equalized, cmap="gray")
plt.title("Equalized Image")
plt.axis("off")

plt.subplot(3, 2, 5)
plt.imshow(clahe_equalized, cmap="gray")
plt.title("CLAHE Equalized Image")
plt.axis("off")

plt.subplot(3, 2, 2)
plt.hist(image.ravel(), bins=255, color="red")
plt.title("Original Histogram")

plt.subplot(3, 2, 4)
plt.hist(equalized.ravel(), bins=255, color="green")
plt.title("Equalized Histogram")

plt.subplot(3, 2, 6)
plt.hist(clahe_equalized.ravel(), bins=255, color="blue")
plt.title("Equalized Histogram")

plt.tight_layout()
plt.show()

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

some-alt