inline void bi::SparseStaticUpdaterVisitorHost<B,S,L,PX,OX>::accept(
    State<B,ON_HOST>& s, const Mask<L>& mask, const int p, const PX& pax,
    OX& x) {
  typedef typename front<S>::type front;
  typedef typename pop_front<S>::type pop_front;
  typedef typename front::target_type target_type;
  typedef typename front::coord_type coord_type;

  const int id = var_id<target_type>::value;
  int ix = 0;
  coord_type cox;

  if (mask.isDense(id)) {
    while (ix < mask.getSize(id)) {
      front::simulates(s, p, ix, cox, pax, x);
      ++cox;
      ++ix;
    }
  } else if (mask.isSparse(id)) {
    while (ix < mask.getSize(id)) {
      cox.setIndex(mask.getIndex(id, ix));
      front::simulates(s, p, ix, cox, pax, x);
      ++ix;
    }
  }

  SparseStaticUpdaterVisitorHost<B,pop_front,L,PX,OX>::accept(s, mask, p, pax,
      x);
}
Example #2
0
float operator*(const Mask& mask1, const Mask& mask2)
{
    if(mask1.getSize() != mask2.getSize())
	return 0.0;
    int size = mask1.getSize();
    double sum = 0.0;
    for(int i = 0; i < size; i++)
    {
	for (int j = 0; j < size; j++)
	{
	    sum += mask1.get(i, j)*mask2.get(size - i - 1, size - j - 1);
	}
    }
    sum /= size*size;
    return sum;
}
Example #3
0
void convolution(Mat& img, Mask mask)
{
    Mat image;
    img.copyTo(image);
    int cols = image.cols;
    int rows = image.rows;
    int size = mask.getSize();
    Mask mask_temp;
    if(cols < size || rows < size)
	return;
    for (int i = size/2; i < rows-size/2; i++)
    {
	for (int j = size/2; j < cols-size/2; j++)
	{
	    for (int k = 0; k < 3; ++k)
	    {
		mask_temp.extractMaskFromImage(image, i, j, size, k);
		float convolution = mask_temp*mask;
		img.at<Vec3b>(i, j)[k] = convolution;
	    }
	}
    }
}