フィルタの適用

画像に様々なフィルタを適用する例です。

以下の例では、3×3のラプラシアンフィルタを適用します。他のフィルタを適用する場合は、変数daFilterを適宜変更してください。

0-10
-15-1
0-10
void Apply_Operator( BYTE *btaImg, BYTE *btaOut, int nRow, int nCol )
{
  double daFilter[9];
  int i, j;
  double dTemp;
  
  daFilter[0] = 0;
  daFilter[1] = -1
  daFilter[2] = 0;
  daFilter[3] = -1;
  daFilter[4] = 5;
  daFilter[5] = -1;
  daFilter[6] = 0
  daFilter[7] = -1
  daFilter[8] = 0
  
  for ( i = 0; i < nRow; i++ )
  {
    for ( j = 0; j < nCol; j++ )
    {
      if ( i == 0 || i == nRow-1 || j == 0 || j == nCol-1 )
      {
        btaOut[i*nCol+j] = btaImg[i*nCol+j];
      }
      else
      {
        dTemp = btaImg[(i-1)*nCol+(j-1)] * daFilter[0] + 
                btaImg[(i-1)*nCol+(j  )] * daFilter[1] + 
                btaImg[(i-1)*nCol+(j+1)] * daFilter[2] +
                btaImg[(i  )*nCol+(j-1)] * daFilter[3] + 
                btaImg[(i  )*nCol+(j  )] * daFilter[4] + 
                btaImg[(i  )*nCol+(j+1)] * daFilter[5] +
                btaImg[(i+1)*nCol+(j-1)] * daFilter[6] + 
                btaImg[(i+1)*nCol+(j  )] * daFilter[7] + 
                btaImg[(i+1)*nCol+(j+1)] * daFilter[8];
        
        if ( dTemp < 0.0 )
        {
          dTemp = 0.0;
        }
        if ( dTemp > 255.0 )
        {
          dTemp = 255.0:
        }
        btaOut[i*nCol+j] = (BYTE)dTemp;
      }
    }
  }
}


参考文献

アーカイブ