// 画像処理11:移動平均フィルタ(フィルタサイズ1固定) void moving_average( Image image) { int x, y, k; int buf; Image bufimage; //重複して処理しないようオリジナル画像のコピーを用意する bufimage = createImage(image->height, image->width); //画像のメモリ確保・初期化 for(y = 0; y < image->height; y++){ for(x = 0; x < image->width; x++){ for(k = 0; k < 3; k++) { bufimage->pdata[y][x][k] = image->pdata[y][x][k]; //入力画像をコピーする } } } //フィルタ処理 for(y = 1; y < image->height-1; y++){ for(x = 1; x < image->width-1; x++){ for(k = 0; k < 3; k++){ //フィルタ内の強度値の合計を計算 buf=0; buf += bufimage->pdata[y-1][x-1][k]; buf += bufimage->pdata[y-1][x ][k]; buf += bufimage->pdata[y-1][x+1][k]; buf += bufimage->pdata[y ][x-1][k]; buf += bufimage->pdata[y ][x ][k]; buf += bufimage->pdata[y ][x+1][k]; buf += bufimage->pdata[y+1][x-1][k]; buf += bufimage->pdata[y+1][x ][k]; buf += bufimage->pdata[y+1][x+1][k]; image->pdata[y][x][k] = (byte)(buf/9); } } } deleteImage(bufimage); //処理用画像のメモリを解放 }