以下の例は、グレイスケールの画像に対して3×3のメディアンフィルタを適用するものです。
フィルタ領域でのソートは、とりあえずバブルソートを適用しています。
/* グレイスケール画像に対する3×3 メディアンフィルタ */ void median_filter ( BYTE *btIn, BYTE *btOut, int nRow, int nCol ) { int i, j, k, l int naPix[9]; BYTE btTemp; for ( i = 0; i < nRow; i++ ) { for ( j = 0; j < nCol; j++ ) { //隅の4辺は、そのままコピー if ( i == 0 || i == nRow-1 || j == 0 || j == nCol-1 ) { btOut[i*nCol+j] = btIn[i*nCol+j]; } else { naPix[0] = btIn[(i-1)*nCol+(j-1)]; naPix[1] = btIn[(i-1)*nCol+(j )]; naPix[2] = btIn[(i-1)*nCol+(j+1)]; naPix[3] = btIn[(i )*nCol+(j-1)]; naPix[4] = btIn[(i )*nCol+(j )]; naPix[5] = btIn[(i )*nCol+(j+1)]; naPix[6] = btIn[(i+1)*nCol+(j-1)]; naPix[7] = btIn[(i+1)*nCol+(j )]; naPix[8] = btIn[(i+1)*nCol+(j+1)]; //バブルソート for ( k = 0; k < 8; k++ ) { for ( l = k; l < 9; l++ ) { if ( naPix[k] > naPix[l] ) { btTemp = naPix[k]; naPix[k] = naPix[l]; naPix[l] = btTemp; } } } btOut[i*nCol+j] = naPix[4]; } } } }