Генерисање Гаусовог филтера у Ц++
Гаусово филтрирање има широку примену у области обраде слика. Користи се за смањење шума слике. У овом чланку ћемо генерисати а 2Д Гаусово језгро. 2Д Гаусово језгро следи доле дату Гаусову расподелу.
Г(к и)=фрац{1}{2пи сигма ^{2}}е^{-фрац{к^{2}+и^{2}}{2сигма ^{2}}}
Где је и растојање дуж вертикалне осе од почетка к је растојање дуж хоризонталне осе од почетка и ? је стандардна девијација.
Шта је Гаусово филтрирање?
Гаусово филтрирање је техника која се користи у обради слике за углађивање слика и смањење шума. Функционише применом ефекта замућења користећи математичку функцију која се зове Гаусова функција која даје већу тежину централним пикселима, а мању околним пикселима. Ово доводи до замућења природног изгледа које помаже у уклањању нежељених детаља попут зрна или малих артефаката. Гаусово филтрирање се широко користи као корак предобраде у задацима као што су препознавање објеката за детекцију ивица и побољшање слике, што олакшава алгоритмима да се фокусирају на важне карактеристике.
Имплементација у Ц++
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 ; } }
Излаз:
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Примене Гаусовог филтрирања у стварном свету
Гаусови филтери се користе у многим свакодневним технологијама за побољшати квалитет слике и извући корисне информације :
- Цомпутер Висион : Помаже у откривању ивица и облика смањујући шум пре примене алгоритама детекције.
- Медицал Имагинг : Користи се за изглађивање МРИ или ЦТ скенирања што олакшава идентификацију ткива и абнормалности.
- Детекција објеката : Припрема слике уклањањем ометања омогућавајући моделима да се фокусирају на кључне карактеристике.
- Алати за уређивање фотографија : Обично се користи за примену ефекти замућења
Поређење са другим филтерима
Ево како Гаусов филтер издваја се од осталих уобичајених филтера:
- Филтер оквира (просечан филтер) : Замагљује слику давањем једнака тежина на све околне пикселе. Гаусов филтер је бољи јер даје већа тежина до централних пиксела стварајући глаткије природније замућење.
- Медијан филтер : Замењује сваки пиксел са медијана оближњих вредности што је одлично за уклањање бука соли и бибера . За разлику од Гауссовог, он не замагљује слику толико, али може изобличити ивице.
- Билатерални филтер : Као Гаусов али и сматра интензитет пиксела очување разлика ивице при глађењу. Напреднији је, али и више рачунски тежак .
2Д вс 1Д Гаусово филтрирање
А 2Д Гаусов филтер може се разбити на два 1Д филтера — једна хоризонтална и једна вертикална. Ово се зове одвојивости и то значи да не морамо одједном да примењујемо комплетно 2Д језгро.
Зашто је важно:
Уместо да радимо тешке прорачуне са великим 2Д кернелом (нпр. 5×5), примењујемо 1Д кернел хоризонтално затим тхе исто језгро вертикално . Ово скраћује време израчунавања и даје исти резултат .
Разматрање перформанси
Генерисање и примена а Гаусово језгро може бити рачунарски скупо посебно за велике слике или језгра.
- Временска сложеност :
- За језгро величине к × к примењено на ан н × н слика временска сложеност је О(н² × к²) .
- То је зато што свака операција пиксела укључује петљу преко целог кернела.
- Оптимизација – одвојиви филтери :
Гаусова језгра су одвојиви што значи да се 2Д филтер може пробити два 1Д филтера : једна хоризонтална и једна вертикална.- Ово смањује временску сложеност на О(н² × к) правећи га много брже за већа језгра.
Коришћење одвојивих филтера је уобичајен трик у системима из стварног света за убрзавање Гаусовог филтрирања без губитка квалитета.
Муст Реад
- Примените Гаусс филтер на слику помоћу Питхон-а
- Како генерисати 2-Д Гаусов низ користећи НумПи?
- Интеграција Гаусових функција
Закључак
Гаусово филтрирање је једноставна, али моћна техника за смањење шума и замућења слике користећи глатки пондерисани просек заснован на Гаусовој функцији. У овом чланку смо генерисали а 2Д Гаусово језгро и истраживао његову улогу у разним апликације у стварном свету попут компјутерског вида медицинског снимања и уређивања фотографија. Такође смо га упоредили са другим филтерима и разговарали о начинима да оптимизовати перформансе коришћењем одвојивих филтера. Свеукупно Гаусово филтрирање је а основни алат у обради слике помаже у побољшању квалитета слике и олакшава алгоритмима да се фокусирају на важне визуелне детаље.