Immagini Digitali

[Slide](C:\UNI\Magistrale\visione\02_Immagini digitali.pdf)

Indice


Formazione dell’Immagine

Il processo di conversione da una scena 3D continua a un’immagine digitale discreta è il fondamento della visione artificiale.

Da Continuo a Digitale

Definizione

Un’immagine può essere interpretata come una funzione matematica dove associa a ogni posizione un valore di intensità luminosa.

Un’immagine digitale di dimensioni è un segnale discreto (insieme finito di valori), ottenuto attraverso due processi principali:

  1. Campionamento: acquisizione di campioni del segnale analogico a intervalli uniformi (griglia con celle)
  2. Quantizzazione: approssimazione di ogni campione con uno dei valori appartenenti a un range predefinito (finito)

Risultato: un’immagine è rappresentabile come una matrice dove ogni elemento (pixel) contiene un valore numerico discreto.

Immagini a Colori

Un’immagine a colori è semplicemente la composizione di tre funzioni, una per ogni canale colore:

Dove:

  • r(x,y) = intensità rosso
  • g(x,y) = intensità verde
  • b(x,y) = intensità blu

Rappresentazione Digitale

Matrice di Pixel

Un’immagine digitale è rappresentabile come una matrice di dimensione (larghezza × altezza). Ogni elemento è un pixel (picture element) che contiene un valore di intensità ottenuto tramite campionamento e quantizzazione.

Esempio di rappresentazione:

  • Scala di grigi [0, 255]: ogni pixel è un singolo valore (8 bit)
  • Colore RGB [0, 255] per canale: ogni pixel contiene 3 valori (24 bit totali)
  • Normalizzato [0, 1]: valori in virgola mobile per processamento

Sampling e Quantizzazione in Pratica

Campionamento: l’immagine continua viene “fotografata” su una griglia regolare. Meno campioni = immagine più grossolana ma file più piccolo.

Quantizzazione: ogni campione viene arrotondato al valore più vicino nel range disponibile. Meno livelli = perdita di dettagli, ma file più piccolo.

Note

Il trade-off classico: più campioni e più livelli di quantizzazione = immagine migliore ma file più grande.


Il Colore

Sintesi Additiva (RGB)

Definizione

La sintesi additiva è il modo in cui funziona la percezione umana e i dispositivi che emettono luce (schermi, fotocamere, monitor).

I tre colori fondamentali sono Rosso, Verde, Blu (RGB). Combinandoli si generano tutti gli altri colori:

  • Rosso + Verde = Giallo
  • Rosso + Blu = Magenta
  • Verde + Blu = Ciano
  • Rosso + Verde + Blu = Bianco (tutti insieme)
  • Nessuno = Nero

Dispositivi che usano RGB:

  • Fotocamere digitali (sensori catturano separatamente R, G, B)
  • Monitor e TV
  • Smartphone
  • Proiettori

Storico: Il primo dispositivo per la sintesi additiva fu il disco di Newton (XVII secolo), dove settori colorati rotanti si mescevano visivamente in bianco.

Sintesi Sottrattiva (CMY)

Definizione

La sintesi sottrattiva è il modo opposto: funziona togliendo luce. È usata quando si stampa o si filtra luce.

I tre colori fondamentali sono i complementari dell’RGB:

  • Ciano (C) = complementare del Rosso
  • Magenta (M) = complementare del Verde
  • Giallo (Y) = complementare del Blu

In pratica: ogni filtro sottrae una componente di luce. Più filtri = meno luce = colore più scuro.

Dispositivi che usano CMY:

  • Stampanti (inchiostri colorati)
  • Pellicola fotografica analogica (tre strati sovrapposti)
  • Filtri ottici

Nota: In stampa, si aggiunge il nero (K)CMYK, perché è più economico e efficace di mescolare CMY per ottenere nero.


Spazi Colore

Definizione

Uno spazio colore è un modello multidimensionale utilizzato per la rappresentazione dei colori.

Ogni colore nello spazio è descritto da tre dimensioni (gli assi fondamentali dipendono dallo spazio scelto). Diversi spazi colore sono ottimizzati per diversi usi.

Dimensioni Fondamentali

Indipendentemente dallo spazio, i colori sono descritti da tre aspetti:

AspettoDescrizione
Tinta (Hue)Il colore puro (rosso, blu, verde, ecc.)
SaturazioneQuanto “intenso” è il colore (da grigio a colore puro)
Luminosità/LuminanzaQuanta luce contiene il colore (da nero a bianco)

Gli Spazi Colore Più Comuni

RGB (Red-Green-Blue)

Caratteristiche:

  • Più semplice e naturale per dispositivi che emettono luce
  • Le coordinate sono indipendenti (una non influenza le altre)
  • Uno dei tre assi è sempre una combinazione lineare degli altri

Vantaggi:

  • Standard per fotocamere, monitor, web
  • Semplice da implementare in hardware

Svantaggi:

  • Poco intuitivo per l’umano: se vuoi un colore, non è immediato sapere quali R, G, B usare
  • Colori simili dal punto di vista umano possono essere lontani nello spazio RGB (es. due sfumature di rosso)

Quando usarlo: acquisizione da telecamere, display, trasmissione dati grezzo


HSV (Hue-Saturation-Value) e HSL (Hue-Saturation-Lightness)

Caratteristiche comuni:

  • Codificano le percezione umana del colore
  • H (Hue): [0°, 360°] = il colore puro (angolo su una ruota)
  • S (Saturation): [0, 1] = intensità del colore (0 = grigio, 1 = colore puro)
  • V o L (Value/Lightness): [0, 1] = luminosità

Differenza tra HSV e HSL:

  • HSV: asse verticale è il Value (massimo di RGB). Uno spazio cilindrico.
  • HSL: asse verticale è Lightness (media tra min e max di RGB). Uno spazio conico.

Vantaggi:

  • Molto intuitivo: se vuoi un rosso scuro, sai che hai bisogno di H=0°, S=alto, V=basso
  • I colori simili all’occhio sono vicini nello spazio (facile per segmentazione per colore)

Svantaggi:

  • Conversione da/verso RGB è più computazionalmente costosa
  • Non è uno spazio “uniforme” percettivamente (in HSV, due punti a uguale distanza non necessariamente rappresentano colori ugualmente diversi)

Quando usarlo: quando devi selezionare oggetti per colore, filtri interattivi, segmentazione basata su colore

Formule di Conversione RGB ↔ HSV/HSL

Partendo da R, G, B ∈ [0,1], definiamo:

Hue (H):

0° & \text{if } MAX = MIN \Leftrightarrow R = G = B \\ 60° \cdot \left(0 + \frac{G - B}{MAX - MIN}\right) & \text{if } MAX = R \\ 60° \cdot \left(2 + \frac{B - R}{MAX - MIN}\right) & \text{if } MAX = G \\ 60° \cdot \left(4 + \frac{R - G}{MAX - MIN}\right) & \text{if } MAX = B \end{cases}$$ Se $H < 0°$ allora $H := H + 360°$ **Saturazione (HSV)**: $$S_{HSV} := \begin{cases} 0 & \text{if } MAX = 0 \\ \frac{MAX - MIN}{MAX} & \text{otherwise} \end{cases}$$ **Saturazione (HSL)**: $$S_{HSL} := \begin{cases} 0 & \text{if } MAX = 0 \text{ or } MIN = 1 \\ \frac{MAX - MIN}{1 - |MAX + MIN - 1|} & \text{otherwise} \end{cases}$$ **Value (HSV)**: $$V := MAX$$ **Lightness (HSL)**: $$L := \frac{MAX + MIN}{2}$$ --- ### YCbCr (Luma + Chrominance) **Caratteristiche**: - Codifica il colore attraverso **luminanza (Y)** e **differenze cromatiche (Cb, Cr)** - **Y**: luminanza (luminosità) - equivalente alla versione in scala di grigi - **Cb**: differenza blu (blue-difference) - quanto il blu differisce dalla luminanza - **Cr**: differenza rosso (red-difference) - quanto il rosso differisce dalla luminanza **Vantaggi**: - Sfrutta la **visione umana**: siamo molto sensibili a cambiamenti di luminanza, meno a cambiamenti di colore - **Compressione**: si può ridurre la risoluzione di Cb/Cr mentre si mantiene la piena risoluzione di Y - Standard per **trasmissione digitale** di immagini (TV, video, JPEG, ecc.) **Svantaggi**: - Non intuitivo come HSV - Richiede conoscenza della fisologia della visione per capire perché è efficace **Quando usarlo**: trasmissione video, compressione JPEG, broadcast digitale #### Formula di Conversione RGB → YCbCr Assumendo RGB normalizzato in [0,1]: $$Y = 0.299 \cdot R + 0.587 \cdot G + 0.114 \cdot B$$ $$C_b = 0.564 \cdot (B - Y)$$ $$C_r = 0.713 \cdot (R - Y)$$ (Note: i coefficienti variano leggermente in diverse standardizzazioni) --- ## Comparazione Spazi Colore | Spazio | Applicazione | Vantaggi | Svantaggi | Quando Usarlo | |--------|--------------|----------|-----------|---------------| | **RGB** | Acquisizione, display | Semplice, standard, hardware-friendly | Non intuitivo, colori simili lontani | Fotocamere, monitor, trasmissione grezza | | **HSV/HSL** | Segmentazione colore, interfacce | Intuitivo, colori simili vicini | Conversione costosa, non uniforme percettivamente | Selezione per colore, filtri, elaborazione artistica | | **YCbCr** | Trasmissione, compressione | Sfrutta visione umana, compressione efficace | Non intuitivo, due spazi (Y separato da Cb/Cr) | Video digitale, JPEG, broadcast | --- ## Operazioni su Immagini Le immagini digitali possono soffrire di vari problemi e difetti: - **Sfocatura** - perdita di nitidezza - **Rumore** - artefatti casuali - **Basso contrasto** - manca separazione tra elementi - **Aliasing** - artefatti da campionamento insufficiente - **Edge poco definiti** - bordi sfumati È possibile **migliorare** le immagini applicando **trasformazioni** ai pixel. ### Trasformazioni Puntuali Le trasformazioni più semplici operano su **ogni pixel indipendentemente**: $$g(x, y) = f(x, y) + 20$$ Aumenta la luminosità aggiungendo una costante a ogni pixel. $$g(x, y) = f(-x, y)$$ Specchia l'immagine orizzontalmente. Queste sono utili ma limitate - non usano il contesto del pixel. ### Trasformazioni Locali (Filtraggio) Le trasformazioni **più potenti** operano considerando il **vicinato** di ogni pixel. L'operazione principale è la **convoluzione** con filtri digitali. --- ## Filtraggio Digitale > [!info] Definizione > > **Applicare un filtro digitale** significa modificare il valore di ogni pixel sostituendolo con un valore calcolato a partire dai valori dei pixel intorno (il vicinato). ### Come Funziona Consideriamo un pixel centrale e il suo intorno (finestra 3×3): ``` Intorno del pixel: Kernel (filtro): 10 5 3 0 0 0 4 5 1 → 0 2 0 1 1 7 0 1 2 ``` Il nuovo valore del pixel centrale si calcola come **combinazione lineare** (pesata) dei pixel dell'intorno: $$g(5) = 0 \cdot 10 + 0 \cdot 5 + 0 \cdot 3 + 0 \cdot 4 + 2 \cdot 5 + 0 \cdot 1 + 0 \cdot 1 + 1 \cdot 1 + 2 \cdot 7 = 10 + 1 + 14 = 25$$ Normalizzando per il numero di operazioni: $g(5) = 25 / 3 ≈ 8$ > [!note] > > I **pesi nel kernel** determinano quale effetto si ottiene. Kernel diversi producono risultati diversi: > - Kernel di smoothing → sfocatura > - Kernel di edge detection → bordi evidenti > - Kernel di sharpening → nitidezza aumentata --- ## Cross-Correlation e Convoluzione ### Cross-Correlation Siano: - $f$: un'immagine digitale - $h$: un kernel di dimensioni $(2k + 1) \times (2k + 1)$ La **cross-correlation** è: $$g(x, y) = \sum_{u=-k}^{k} \sum_{v=-k}^{k} h(u, v) \cdot f(x + u, y + v)$$ Intuitivamente: il kernel viene posizionato sul pixel $(x, y)$ e si calcola la somma pesata. ### Convoluzione Se il kernel viene **capovolto** (orizzontalmente e verticalmente) si ha la **convoluzione**: $$g(x, y) = \sum_{u=-k}^{k} \sum_{v=-k}^{k} h(u, v) \cdot f(x - u, y - v)$$ > [!tip] > > **Differenza pratica**: nella maggior parte dei casi non fa differenza (specialmente per kernel simmetrici). La convoluzione è principalmente rilevante nella teoria del signal processing. --- ## Filtri Lineari Comuni ### Smoothing (Blurring) - Gaussiano > [!info] Kernel Gaussiano > > Un kernel basato sulla distribuzione gaussiana riduce il rumore creando una sfocatura naturale. Applica pesi decrescenti dai pixel centrali a quelli periferici. Molto utile per: - Ridurre rumore - Preparare l'immagine per altre operazioni - Creare effetti di blur **Effetto**: l'immagine diventa più morbida, i dettagli fini si perdono ma il rumore diminuisce. --- ## Estrazione di Edge (Bordi) Gli **edge** (bordi) sono punti dove l'intensità cambia rapidamente. Rilevarli è cruciale per: - Riconoscimento di oggetti - Estrazione di contorni - Analisi strutturale ### Il Gradiente Un edge è un punto dove il **gradiente** dell'immagine è elevato. Il gradiente è un vettore che punta nella direzione di massima variazione: $$\nabla f(x, y) = \begin{bmatrix} \frac{\partial f}{\partial x} \\ \frac{\partial f}{\partial y} \end{bmatrix}$$ In pratica, si calcola usando **kernel di derivata**: - Derivata in X: rileva cambiamenti orizzontali (edge verticali) - Derivata in Y: rileva cambiamenti verticali (edge orizzontali) ### Operatori per Edge Detection Ci sono tre operatori principali. Ognuno usa kernel diversi per approssimare le derivate: | Operatore | Derivata X | Derivata Y | Pregi | Difetti | |-----------|-----------|-----------|-------|---------| | **Roberts** | $\begin{bmatrix} 1 & 0 \\ 0 & -1 \end{bmatrix}$ | $\begin{bmatrix} 0 & 1 \\ -1 & 0 \end{bmatrix}$ | Semplice, veloce, immagini nette | Sensibile al rumore, sensibile a diagonali | | **Prewitt** | $\begin{bmatrix} -1 & 0 & 1 \\ -1 & 0 & 1 \\ -1 & 0 & 1 \end{bmatrix}$ | $\begin{bmatrix} -1 & -1 & -1 \\ 0 & 0 & 0 \\ 1 & 1 & 1 \end{bmatrix}$ | Meno sensibile al rumore di Roberts | Leggermente più costoso, bordi meno marcati | | **Sobel** | $\begin{bmatrix} -1 & 0 & 1 \\ -2 & 0 & 2 \\ -1 & 0 & 1 \end{bmatrix}$ | $\begin{bmatrix} -1 & -2 & -1 \\ 0 & 0 & 0 \\ 1 & 2 & 1 \end{bmatrix}$ | Buon bilancio tra sensibilità e robustezza | Leggermente più costoso di Prewitt | **Come usarli**: per ogni pixel, calcola: 1. Gx = convoluzione con kernel derivata X 2. Gy = convoluzione con kernel derivata Y 3. Magnitudine edge = $\sqrt{G_x^2 + G_y^2}$ 4. Soglia: se magnitudine > soglia → edge --- ## Elaborazione nel Dominio della Frequenza ### Trasformata di Fourier > [!info] Idea Base > > Ogni immagine può essere **scomposta** in componenti di frequenza: basse frequenze (variazioni lente, forme larghe) e alte frequenze (variazioni rapide, dettagli fini). La **Trasformata di Fourier (2D)** converte un'immagine da dominio spaziale (pixel) a dominio della frequenza (spettro). **Vantaggi della visione nel dominio della frequenza**: - Operazioni di filtraggio sono più facili: bassa frequenza = blur, alta frequenza = edge - Alcune operazioni sono più efficienti computazionalmente - Capire cosa l'immagine contiene in termini di "dettagli" ### Filtri nel Dominio della Frequenza Invece di convoluzione spaziale, puoi **moltiplicare** lo spettro per un filtro: - **Passa-basso**: attenua alte frequenze (smoothing) - **Passa-alto**: attenua basse frequenze (edge detection) - **Passa-banda**: lasciar passare solo una banda di frequenze #### Filtro di Butterworth Un filtro **passa-basso di Butterworth** di ordine $n$ attenuisce gradualmente le alte frequenze: $$H(u, v) = \frac{1}{1 + \left(\frac{D(u,v)}{D_0}\right)^{2n}}$$ Dove: - $D(u, v)$ = distanza dal centro dello spettro - $D_0$ = frequenza di cutoff (dove l'attenuazione è 50%) - $n$ = ordine (controlla quanto è "ripida" la transizione) Ordini più alti = transizione più netta tra frequenze passanti e attenuate. ### Filtri Angolari (Direzionali) Esistono anche filtri che selezionano solo determinate **direzioni** nello spettro di frequenza: - Filtro angolare a **0°**: rileva solo edge orizzontali - Filtro angolare a **90°**: rileva solo edge verticali - Filtro angolare a **45°**: rileva edge diagonali Utili per applicazioni specializzate (es. rilevare linee ferroviarie in immagini satellitari). --- ## Riassunto Operazioni Comuni | Operazione | Uso | Effetto | |-----------|-----|--------| | **Smoothing Gaussiano** | Ridurre rumore | Sfocatura naturale | | **Contrast Stretching** | Aumentare contrasto | Separazione migliore tra elementi | | **Roberts / Prewitt / Sobel** | Rilevare bordi | Edge map (evidenzia transizioni) | | **Sharpening** | Aumentare nitidezza | Enfatizza i dettagli fini | | **Butterworth Lowpass** | Rimuovere alte frequenze | Smoothing controllato | | **Butterworth Highpass** | Rimuovere basse frequenze | Evidenzia dettagli e texture | --- ## Prossimi Argomenti Continueremo con: - [[03. Segmentazione|Segmentazione]] - come dividiamo l'immagine in regioni significative - [[05. Estrazione feature 1|Estrazione di Feature]] - come descriviamo le caratteristiche delle regioni