このフィルタも平均化フィルタの1種ですが,平均化フィルタや加重平均フィルタと違い,縦方向のみ平均化を行います.
式を見ても分かるように注目しているピクセルの1列だけで平均をとっています.
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 = 0;
if(!l)weight = 1;
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/3;
temp->data[i*temp->width + j].g = sumg/3;
temp->data[i*temp->width + j].b = sumb/3;
}
}
平均化する範囲が小さいため画像に1回フィルタをかけたぐらいではあまり大きな変化は見られませんが,複数回フィルタにかけたりフィルタの範囲を大きくすれば変化が大きくなって面白いと思います.