www.pudn.com > ReadingPeopleTracker-1.28.rar > Kernel.cc


/*
 * Kernel.cc
 * 3x3 Kernel class
 * for image processing
 */


#include "Kernel.h"

namespace ReadingPeopleTracker
{

Kernel::Kernel( int row1[3], int row2[3], int row3[3], bool by_row )
{
  if (by_row)
    {
      coeff[0][0] = row1[0]; coeff[0][1] = row1[1]; coeff[0][2] = row1[2];      
      coeff[1][0] = row2[0]; coeff[1][1] = row2[1]; coeff[1][2] = row2[2];      
      coeff[2][0] = row3[0]; coeff[2][1] = row3[1]; coeff[2][2] = row3[2];
    }
  else
    {
      coeff[0][0] = row1[0]; coeff[1][0] = row1[1]; coeff[2][0] = row1[2];      
      coeff[0][1] = row2[0]; coeff[1][1] = row2[1]; coeff[2][1] = row2[2];      
      coeff[0][2] = row3[0]; coeff[1][2] = row3[1]; coeff[2][2] = row3[2];
    }
}

Kernel::Kernel(int data[9] , bool by_row)
{
  if (by_row)
    {
      coeff[0][0] = data[0]; coeff[0][1] = data[1]; coeff[0][2] = data[2];      
      coeff[1][0] = data[3]; coeff[1][1] = data[4]; coeff[1][2] = data[5];      
      coeff[2][0] = data[6]; coeff[2][1] = data[7]; coeff[2][2] = data[8];
    }
  else
    {
      coeff[0][0] = data[0]; coeff[0][1] = data[3]; coeff[0][2] = data[6];      
      coeff[1][0] = data[1]; coeff[1][1] = data[4]; coeff[1][2] = data[7];      
      coeff[2][0] = data[2]; coeff[2][1] = data[5]; coeff[2][2] = data[8];
    }
}

Kernel::Kernel(int d1,int d2, int d3, int d4, int d5, int d6, int d7, 
	       int d8, int d9, bool by_row)
{
  if (by_row)
    {
      coeff[0][0] = d1; coeff[0][1] = d2; coeff[0][2] = d3;      
      coeff[1][0] = d4; coeff[1][1] = d5; coeff[1][2] = d6;      
      coeff[2][0] = d7; coeff[2][1] = d8; coeff[2][2] = d9;
    }
  else
    {
      coeff[0][0] = d1; coeff[0][1] = d4; coeff[0][2] = d7;      
      coeff[1][0] = d2; coeff[1][1] = d5; coeff[1][2] = d8;      
      coeff[2][0] = d3; coeff[2][1] = d6; coeff[2][2] = d9;
    }
}
  
Kernel operator+ (Kernel& K1 , Kernel& K2)
{
  Kernel sum;
  for (int i = 0; i < 3; i++)
    {
      for (int j = 0; j < 3; j++)
	{
	  sum.coeff[i][j] = K1.coeff[i][j] + K2.coeff[i][j];
	}
    }
  return sum;
}

Kernel operator* (Kernel& K1, Kernel& K2)
{
  Kernel sum;
  for (int i = 0; i < 3; i++)
    {
      for (int k = 0; k < 3; k++)
	{
	  sum.coeff[i][k] = 0;
	  for (int j = 0; j < 2; j++)
	    {
	      sum.coeff[i][k] += K1.coeff[i][j] * K2.coeff[j][k];
	    }
	}
    }
  return sum;
}

} // namespace ReadingPeopleTracker