script day.log

大学生がなんとなく始めた、趣味やら生活のことを記録していく。

フィルタリング(平滑化フィルタ)

差分フィルタは前回やりました.
makose3p1229.hatenablog.com

今回は平滑化フィルタ.

平滑化フィルタとは

画素の濃度値の積分を求めることにより画像中の雑音を除去し,濃度地が変化している部分をぼかす機能を
持たせることができる.なお,注目画素の処理結果に与える影響を2倍にすることでエッジの保存性を高めることも
可能である.このようなフィルタを平滑化フィルタと呼ぶ.
以下に平滑化フィルタの加重マトリックスを示す.

1/9 1/9 1/9
1/9 1/9 1/9
1/9 1/9 1/9

注目画素の強調なし

1/10 1/10 1/10
1/10 2/10 1/10
1/10 1/10 1/10

注目画素の強調あり

平滑化フィルタの実装(C言語

まずは注目画素を強調しない場合.
単純に足して,9で割るだけ.

unsigned char smoothing(unsigned char px0, unsigned char px1,unsigned char px2,unsigned char px3,unsigned char px4,unsigned char px5,unsigned char px6,unsigned char px7,unsigned char px8){
    int px[9] = {px0,px1,px2, px3,px4,px5,px6,px7,px8};

    int px_out = 0;
    for(int i = 0; i < 9; i++){
        px_out += px[i];
    }
    px_out /= 9;
    return (unsigned char)px_out;
}

続いて注目画素を強調する場合.
真ん中の画素値(i=4)だけ2倍して,単純に足して,10で割ってあげるだけ.

unsigned char smoothing(unsigned char px0, unsigned char px1,unsigned char px2,unsigned char px3,unsigned char px4,unsigned char px5,unsigned char px6,unsigned char px7,unsigned char px8){
    double px[9] = {px0,px1,px2, px3,px4,px5,px6,px7,px8};

    double px_out = 0.0;
    for(int i = 0; i < 9; i++){
        if (i == 4) {
            px[i] *= 2;
        }
        px_out += px[i];
    }
    px_out /= 10;
    return (unsigned char)px_out;
}