快速高斯濾波

2021-07-23 06:11:58 字數 2301 閱讀 9123

高斯濾波器是影象處理中經常用到的濾波器,其濾波核函式為:

為簡單起見,這裡省略了歸一化因子。

由的可分離特性:

得:其中為輸入影象,為輸出影象,為濾波模板半徑。根據準則,通常使。

由上式可見,我們可以將二維高斯濾波分解為兩次一維高斯濾波。

對於二維高斯濾波,設影象大小,高斯模板大小,處理每個畫素點需要次操作,則演算法複雜度。若使用一維高斯核先對影象逐行濾波,再對中間結果逐列濾波,則處理每個畫素需要次操作,演算法複雜度,隨著濾波模板尺寸的增大,演算法優勢越明顯。

程式:#include "stdafx.h"

#include

#include

//邊界處理

int edge(int i,int x,int max)

//二維高斯處理灰度影象

extern "c" _declspec(dllexport) void gaussfiltergray(unsigned char *a, int nwidth, int nheight, int stride,double dsigma)

}  //歸一化

for(int i=0; i}  

//逐畫素處理

for(int inx=0,i=0; i} 

a[inx]= max(min(255,dfilter),0);

}  }  

deletepdkernel;  

deletebuffer;

}//一維高斯處理灰度影象

extern "c" _declspec(dllexport) void gaussfiltergray1d(unsigned char *a, int nwidth, int nheight, int stride,double dsigma)

//歸一化

for(int i=0; i//橫向濾波

for(int inx=0,i=0; ibuffer[inx]= max(min(255,dfilter),0);//中間結果放在buffer中

}  }

//縱向濾波

for(int i=0;ia[j*stride+i]= max(min(255,dfilter),0);}}

deletepdkernel;  

deletebuffer;

}//二維高斯處理彩色影象

extern "c" _declspec(dllexport) void gaussfiltercolor(unsigned char *a, int nwidth, int nheight, int stride,double dsigma)

} //歸一化

for(int i=0; i}  

for(int i=0; i}      

index=i*stride+j*step;

a[index]=max(min(dfilterb,255),0);

a[index+1]=max(min(dfilterg,255),0);

a[index+2]=max(min(dfilterr,255),0);

}  }  

deletepdkernel;  

deletebuffer;

}//一維高斯處理彩色影象

extern "c" _declspec(dllexport) void gaussfiltercolor1d(unsigned char *a, int nwidth, int nheight, int stride,double dsigma)

//歸一化

for(int i=0; i//橫向濾波

for(int i=0; iindex=i*stride+j*step;

buffer[index]=max(min(dfilterb,255),0);//中間結果放在buffer中

buffer[index+1]=max(min(dfilterg,255),0);

buffer[index+2]=max(min(dfilterr,255),0);

}      

}  //縱向濾波

for(int i=0;iindex=j*stride+i*step;

a[index]=max(min(dfilterb,255),0);

a[index+1]=max(min(dfilterg,255),0);

a[index+2]=max(min(dfilterr,255),0);}}

deletepdkernel;  

deletebuffer;

}演示結果:

上面對一幅512*512的彩色影象,基本的高斯演算法耗時1469ms,而快速高斯耗時439ms。選取的,此時的濾波模板大小為。

快速高斯濾波

高斯濾波器是影象處理中經常用到的濾波器,其濾波核函式為 為簡單起見,這裡省略了歸一化因子。由得 其中由上式可見,我們可以將二維高斯濾波分解為兩次一維高斯濾波。對於二維高斯濾波,設影象大小 程式 include stdafx.h include include 邊界處理 int edge int i,...

OpenCV 高斯濾波

一 前言 關於高斯濾波在我的前一篇文章 數字影象基本處理演算法 中有所談及那篇只是介紹了高斯濾波的應用,現在這一篇將著重簡介高斯濾波的原理和應用,一探個究竟!二 啥是高斯濾波?好吃麼?高斯濾波,說白了就是乙個函式來對輸入的訊號 其實這裡的訊號就是影象的畫素值 進行計算然後得出結果作為該訊號的值,只不...

高斯濾波001

高斯濾波 高斯濾波去噪方法就是對整幅影象畫素進行加權然後取平均的過程,影象中的每乙個畫素點的灰度值,都由其本身和鄰域內的其他畫素點的灰度值經過加權平均後得到。高斯濾波演算法的具體操作步驟是 用乙個固定大小的模板 或稱卷積 掩模 平滑數字影象中的每乙個畫素點,用模板大小確定的鄰域內畫素灰度值的加權平均...