#質問内容
C言語で,ガウシアンフィルターのソースコードを書いているのですが,なぜ,以下の処理を行っているのかが理解できません.
分かる方がいらっしゃいましたら,教えて頂けると幸いです.
##ガウスフィルターで用いた公式
##質問箇所のコード
C
1y = i + k - size / 2; 2x = j + l - size / 2; 3 4k_y = k - size / 2; 5k_x = l - size / 2;
#全体のコード
C
1void GaussianFilter(unsigned char gray_img[Y_SIZE][X_SIZE], unsigned char gauss_img[Y_SIZE][X_SIZE], int size, double sigma) 2{ 3 int i, j, k, l, x, y; 4 int k_x, k_y; 5 6 double mask; 7 double gauss_mask; 8 double PI = 3.141592; 9 double gauss_const = 1.0 / (2.0*PI*sigma*sigma); 10 double sum_weight; 11 12 13 for (i = 0; i < Y_SIZE; i++) 14 { 15 for (j = 0; j < X_SIZE; j++) 16 { 17 //初期化 18 gauss_mask = 0; 19 mask = 0; 20 sum_weight = 0; 21 22 for (k = 0; k < size;k++) 23 { 24 for (l = 0; l < size; l++) 25 { 26 y = i + k - size / 2; 27 x = j + l - size / 2; 28 29 k_y = k - size / 2; 30 k_x = l - size / 2; 31 32 //端処理 33 if ((y >= 0 && y < Y_SIZE) && (x >= 0 && x < X_SIZE)) 34 { 35 mask = gauss_const * exp(-(((k_y)*(k_y)+(k_x)*(k_x)) / (2 * sigma*sigma))); 36 //画素位置(j,i)の計算に用いたmaskの総和を計算 37 sum_weight += mask; 38 39 //gray_img[y][x]は輝度値 40 gauss_mask += gray_img[y][x] * mask; 41 } 42 else 43 { 44 gauss_mask += 0; 45 } 46 } 47 } 48 49 50 if (gauss_mask >= 0) 51 { 52 //平滑化後の値を代入(正規化) 53 gauss_img[i][j] = gauss_mask / sum_weight; 54 } 55 else 56 { 57 gauss_img[i][j] = 0; 58 } 59 } 60 } 61}
#参考資料
ガウシアンフィルターのソースコード
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/23 04:05
2020/05/05 07:19
2020/05/05 09:16
2020/05/06 02:12