Gauso filtravimas yra plačiai naudojamas vaizdo apdorojimo srityje. Jis naudojamas vaizdo triukšmui sumažinti. Šiame straipsnyje mes sukursime a 2D Gauso branduolys. 2D Gauso branduolys atitinka toliau pateiktą Gauso pasiskirstymą.
G(x y)=frac{1}{2pi sigma ^{2}}e^{-frac{x^{2}+y^{2}}{2sigma ^{2}}}
Kur y yra atstumas išilgai vertikalios ašies nuo pradžios x yra atstumas išilgai horizontalios ašies nuo pradžios ir ? yra standartinis nuokrypis.
Kas yra Gauso filtravimas?
Gauso filtravimas yra vaizdo apdorojimo metodas, skirtas vaizdams išlyginti ir triukšmui sumažinti. Jis veikia taikant suliejimo efektą naudojant matematinę funkciją, vadinamą Gauso funkcija, kuri suteikia daugiau svorio centriniams pikseliams, o aplinkiniams – mažiau. Dėl to susidaro natūraliai atrodantis suliejimas, kuris padeda pašalinti nepageidaujamas detales, pvz., grūdelius ar smulkius artefaktus. Gauso filtravimas plačiai naudojamas kaip išankstinio apdorojimo žingsnis atliekant tokias užduotis kaip krašto aptikimo objekto atpažinimas ir vaizdo tobulinimas, todėl algoritmams lengviau sutelkti dėmesį į svarbias funkcijas.
Diegimas 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; } }
Išvestis:
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
Realaus pasaulio Gauso filtravimo taikymas
Gauso filtrai naudojami daugelyje kasdienių technologijų pagerinti vaizdo kokybę ir išgauti naudingos informacijos :
- Kompiuterinė vizija : Padeda aptikti kraštus ir formas, sumažindama triukšmą prieš taikant aptikimo algoritmus.
- Medicininis vaizdavimas : Naudojamas MRT arba KT skenavimui išlyginti, kad būtų lengviau nustatyti audinius ir anomalijas.
- Objektų aptikimas : Paruošia vaizdus pašalindamas trukdžius, leidžiančius modeliams sutelkti dėmesį į pagrindines funkcijas.
- Nuotraukų redagavimo įrankiai : dažniausiai naudojamas taikyti suliejimo efektai sušvelninkite vaizdus arba sumažinkite grūdėtumą, kad vaizdas būtų švaresnis.
Palyginimas su kitais filtrais
Štai kaip Gauso filtras išsiskiria iš kitų įprastų filtrų:
- Dėžutės filtras (vidutinis filtras) : sulieja vaizdą duodamas vienodo svorio į visus aplinkinius pikselius. Gauso filtras yra geresnis, nes jis suteikia daugiau svorio centriniams pikseliams sukurti sklandesnį ir natūralesnį suliejimą.
- Vidutinis filtras : pakeičia kiekvieną pikselį į mediana netoliese esančių vertybių, kurias puikiai galima pašalinti druskos ir pipirų triukšmas . Skirtingai nuo Gauso, jis nesulieja vaizdo, bet gali iškraipyti kraštus.
- Dvišalis filtras : Kaip Gauso, bet taip pat mano pikselių intensyvumas skirtumus išsaugant briaunos o lyginant. Tai pažangesnė, bet ir daugiau skaičiuojant sunkus .
2D ir 1D Gauso filtravimas
A 2D Gauso filtras galima suskirstyti į du 1D filtrai — vienas horizontalus ir vienas vertikalus. Tai vadinama atskiramumas ir tai reiškia, kad mums nereikia vienu metu taikyti viso 2D branduolio.
Kodėl tai svarbu:
Užuot atlikę sunkius skaičiavimus su dideliu 2D branduoliu (pvz., 5 × 5), taikome 1D branduolys horizontaliai tada tas pats branduolys vertikaliai . Tai sumažina skaičiavimo laiką ir suteikia tas pats rezultatas .
paryškinimas css
Veiklos svarstymai
A. generavimas ir taikymas Gauso branduolys gali būti skaičiuojant brangus ypač dideliems vaizdams ar branduoliams.
- Laiko sudėtingumas :
- Dėl dydžio branduolio k × k kreipėsi į an n × n vaizdas yra laiko sudėtingumas O(n² × k²) .
- Taip yra todėl, kad kiekviena pikselio operacija apima kilpą per visą branduolį.
- Optimizavimas – atskiriami filtrai :
Gauso branduoliai yra atskiriamas tai reiškia, kad 2D filtrą galima sulaužyti du 1D filtrai : vienas horizontalus ir vienas vertikalus.- Tai sumažina laiko sudėtingumą iki O(n² × k) jį gaminant daug greičiau didesniems branduoliams.
Atskiriamų filtrų naudojimas yra įprastas triukas realaus pasaulio sistemose, siekiant pagreitinti Gauso filtravimą neprarandant kokybės.
Būtina perskaityti
- Taikykite Gauso filtrą vaizdui naudodami Python
- Kaip sukurti 2-D Gauso masyvą naudojant NumPy?
- Gauso funkcijų integravimas
Išvada
Gauso filtravimas yra paprastas, bet galingas metodas sumažinti vaizdo triukšmą ir susiliejimą naudojant sklandų svertinį vidurkį, pagrįstą Gauso funkcija. Šiame straipsnyje mes sukūrėme a 2D Gauso branduolys ir tyrinėjo jos vaidmenį įvairiose realaus pasaulio programas kaip kompiuterinis medicininis vaizdavimas ir nuotraukų redagavimas. Taip pat palyginome jį su kitais filtrais ir aptarėme būdus optimizuoti našumą naudojant atskiriamuosius filtrus. Bendras Gauso filtravimas yra a pagrindinė vaizdo apdorojimo priemonė padeda pagerinti vaizdo kokybę ir palengvina algoritmų sutelkimą į svarbias vaizdines detales.