加重平均フィルタは平均化フィルタに重みづけしたものです.注目しているピクセルに近いピクセルの値の影響を大きくしたもので,
のようになります.全体の合計の値が変わらなければ重みづけはいくらでも問題ないですが今回は上のフィルタを作ります.
for(i=1; i<img->height-1; i++){ for(j=1; j<img->width-1; j++){ sumr = sumg = sumb = 0; for(k=-1; k<=1; k++){ for(l=-1; l<=1; l++){ weight = 1; if(!k)weight *= 2; if(!l)weight *= 2; sumr += weight * img->data[(i+k)*img->width + j + l].r; sumg += weight * img->data[(i+k)*img->width + j + l].g; sumb += weight * img->data[(i+k)*img->width + j + l].b; } } temp->data[i*temp->width + j].r = sumr/16; temp->data[i*temp->width + j].g = sumg/16; temp->data[i*temp->width + j].b = sumb/16; } }
平均化フィルタのものと殆ど同じですが重みづけをするためにweightという変数を宣言しています.これを適宜変更してやりながらピクセルの値を足し合わしています.