カーネルサイズ,標準偏差(σ)を引数として重みを計算し,平滑化を行おうとしています。
size=3, sigma=1.0として,
下記のソースで平滑化はできている(?)と思うのですが,計算後のカーネルサイズ内での重み総和が1とにならず,画像全体が暗くなってしまいます。
なにか解決策はないでしょうか?ご教授お願いします。
GaussianFilter(int size, double sigma){
int i,j,k,l,x,y;
int k_x,k_y;
double mask;
double gauss_mask ;
double PI = 3.141592;
double gauss_const = 1.0 / (2.0 * PI * sigma * sigma);
for(i=0;i<Height;i++){//Height:画像サイズ高さ
for(j=0;j<Width;j++){//Height:画像サイズ幅
gauss_mask = 0;
mask = 0;
for(k=0; k<size; k++){
for(l=0; l<size; l++){
x=i+k-size/2;
y=j+l-size/2;
k_x = k - size/2;
k_y = l - size/2;
if( (x>=0 && x<Height) && (y>=0 && y<Width)){//端処理
mask = gauss_const*exp(-(( (k_y)*(k_y)+(k_x)*(k_x) ) / (2*sigma*sigma) ));
edge_mask += m_ImgGray[x][y] * mask; //m_ImgGray[x][y]:輝度値
}
else{
edge_mask +=0;
}
}
}
if(edge_mask >=0){
m_ImgMask[i][j] = edge_mask;//平滑化後の値を代入
}
else if(edge_mask < 0){
m_ImgMask[i][j] = 0;
}
}
}
}