Filtraggio gaussiano è ampiamente utilizzato nel campo dell'elaborazione delle immagini. Viene utilizzato per ridurre il rumore di un'immagine. In questo articolo genereremo un file Il kernel gaussiano 2D segue la distribuzione gaussiana indicata di seguito.
G(x y)=frac{1}{2pi sigma ^{2}}e^{-frac{x^{2}+y^{2}}{2sigma ^{2}}}
Dove y è la distanza lungo l'asse verticale dall'origine x è la distanza lungo l'asse orizzontale dall'origine e ? è la deviazione standard.
Cos'è il filtraggio gaussiano?
Il filtraggio gaussiano è una tecnica utilizzata nell'elaborazione delle immagini per uniformare le immagini e ridurre il rumore. Funziona applicando un effetto sfocato utilizzando una funzione matematica chiamata funzione gaussiana che dà più peso ai pixel centrali e meno a quelli circostanti. Ciò si traduce in una sfocatura dall'aspetto naturale che aiuta a rimuovere dettagli indesiderati come grana o piccoli artefatti. Il filtraggio gaussiano è ampiamente utilizzato come fase di preelaborazione in attività come il riconoscimento dei bordi, il riconoscimento degli oggetti e il miglioramento delle immagini, rendendo più semplice per gli algoritmi concentrarsi su caratteristiche importanti.
Implementazione in C++
C++// C++ program to generate Gaussian filter #include #include #include using namespace std; // Function to create Gaussian filter void FilterCreation(double GKernel[][5]) { // initialising standard deviation to 1.0 double sigma = 1.0; double r s = 2.0 * sigma * sigma; // sum is for normalization double sum = 0.0; // generating 5x5 kernel for (int x = -2; x <= 2; x++) { for (int y = -2; y <= 2; y++) { r = sqrt(x * x + y * y); GKernel[x + 2][y + 2] = (exp(-(r * r) / s)) / (M_PI * s); sum += GKernel[x + 2][y + 2]; } } // normalising the Kernel for (int i = 0; i < 5; ++i) for (int j = 0; j < 5; ++j) GKernel[i][j] /= sum; } // Driver program to test above function int main() { double GKernel[5][5]; FilterCreation(GKernel); for (int i = 0; i < 5; ++i) { for (int j = 0; j < 5; ++j) cout << GKernel[i][j] << 't'; cout << endl; } }
Produzione:
0.00296902 0.0133062 0.0219382 0.0133062 0.00296902
0.0133062 0.0596343 0.0983203 0.0596343 0.0133062
0.0219382 0.0983203 0.162103 0.0983203 0.0219382
0.0133062 0.0596343 0.0983203 0.0596343 0.0133062
0.00296902 0.0133062 0.0219382 0.0133062 0.00296902
Applicazioni reali del filtraggio gaussiano
I filtri gaussiani sono utilizzati in molte tecnologie quotidiane per migliorare la qualità dell'immagine E estrarre informazioni utili :
- Visione artificiale : Aiuta a rilevare bordi e forme riducendo il rumore prima di applicare algoritmi di rilevamento.
- Imaging medico : Utilizzato per attenuare le scansioni MRI o TC rendendo più semplice l'identificazione dei tessuti e delle anomalie.
- Rilevamento oggetti : prepara le immagini rimuovendo le distrazioni consentendo ai modelli di concentrarsi sulle caratteristiche principali.
- Strumenti di fotoritocco : Comunemente utilizzato per applicare effetti di sfocatura ammorbidire le immagini o ridurre la granulosità per un aspetto più pulito.
Confronto con altri filtri
Ecco come Filtro gaussiano si distingue dagli altri filtri comuni:
- Filtro a casella (filtro medio) : Sfoca l'immagine dando uguale peso a tutti i pixel circostanti. Il filtro gaussiano è migliore perché dà più peso per centrare i pixel creando una sfocatura più fluida e naturale.
- Filtro mediano : sostituisce ogni pixel con mediano dei valori vicini che è ottimo per la rimozione rumore di sale e pepe . A differenza della gaussiana, non sfoca molto l'immagine ma può distorcere i bordi.
- Filtro bilaterale : Come la gaussiana ma considera anche intensità dei pixel preservazione delle differenze bordi mentre leviga. È più avanzato ma anche di più computazionalmente pesante .
Filtraggio gaussiano 2D e 1D
UN Filtro gaussiano 2D può essere suddiviso in due filtri 1D — uno orizzontale e uno verticale. Questo si chiama separabilità e significa che non abbiamo bisogno di applicare un kernel 2D completo in una sola volta.
Perché è importante:
Invece di fare calcoli pesanti con un grosso kernel 2D (ad esempio 5×5) applichiamo a Kernel 1D in orizzontale poi il stesso kernel verticalmente . Ciò riduce il tempo di calcolo e fornisce il file stesso risultato .
bordo usando css
Considerazioni sulle prestazioni
Generazione e applicazione di a Nucleo gaussiano può essere computazionalmente costoso soprattutto per immagini o kernel di grandi dimensioni.
- Complessità temporale :
- Per un nocciolo di dimensioni k × k applicato a un n×n immagine la complessità del tempo è O(n² × k²) .
- Questo perché ogni operazione sui pixel comporta il looping dell'intero kernel.
- Ottimizzazione – Filtri separabili :
I kernel gaussiani lo sono separabile il che significa che è possibile violare un filtro 2D due filtri 1D : uno orizzontale e uno verticale.- Ciò riduce la complessità temporale O(n² × k) realizzandolo molto più veloce per chicchi più grandi.
L'uso di filtri separabili è un trucco comune nei sistemi del mondo reale per accelerare il filtraggio gaussiano senza perdere la qualità.
Deve leggere
- Applica un filtro Gauss a un'immagine con Python
- Come generare un array gaussiano 2-D utilizzando NumPy?
- Integrazione di funzioni gaussiane
Conclusione
Il filtraggio gaussiano è una tecnica semplice ma potente per riducendo il rumore e la sfocatura dell'immagine utilizzando una media ponderata uniforme basata sulla funzione gaussiana. In questo articolo abbiamo generato a Nucleo gaussiano 2D ed esplorato il suo ruolo in vari applicazioni del mondo reale come l'imaging medicale della visione artificiale e il fotoritocco. Lo abbiamo anche confrontato con altri filtri e abbiamo discusso i modi per farlo ottimizzare le prestazioni utilizzando filtri separabili. Nel complesso il filtraggio gaussiano è a strumento fondamentale nell'elaborazione delle immagini contribuendo a migliorare la qualità dell'immagine e rendendo più semplice per gli algoritmi concentrarsi su importanti dettagli visivi.