示例#1
0
    void operator()( const blocked_range2d<size_t>& r ) const
    {
        ContextPtr context = new Context( *m_parentContext );
        const Box2i operationWindow( V2i( r.rows().begin()+m_dataWindow.min.x, r.cols().begin()+m_dataWindow.min.y ), V2i( r.rows().end()+m_dataWindow.min.x-1, r.cols().end()+m_dataWindow.min.y-1 ) );
        V2i minTileOrigin = ImagePlug::tileOrigin( operationWindow.min );
        V2i maxTileOrigin = ImagePlug::tileOrigin( operationWindow.max );
        size_t imageStride = m_dataWindow.size().x + 1;

        for( int tileOriginY = minTileOrigin.y; tileOriginY <= maxTileOrigin.y; tileOriginY += m_tileSize )
        {
            for( int tileOriginX = minTileOrigin.x; tileOriginX <= maxTileOrigin.x; tileOriginX += m_tileSize )
            {
                for( vector<string>::const_iterator it = m_channelNames.begin(), eIt = m_channelNames.end(); it != eIt; it++ )
                {
                    context->set( ImagePlug::channelNameContextName, *it );
                    context->set( ImagePlug::tileOriginContextName, V2i( tileOriginX, tileOriginY ) );
                    Context::Scope scope( context.get() );
                    Box2i tileBound( V2i( tileOriginX, tileOriginY ), V2i( tileOriginX + m_tileSize - 1, tileOriginY + m_tileSize - 1 ) );
                    Box2i b = boxIntersection( tileBound, operationWindow );

                    ConstFloatVectorDataPtr tileData = m_channelDataPlug->getValue();

                    for( int y = b.min.y; y<=b.max.y; y++ )
                    {
                        const float *tilePtr = &(tileData->readable()[0]) + (y - tileOriginY) * m_tileSize + (b.min.x - tileOriginX);
                        float *channelPtr = m_imageChannelData[it-m_channelNames.begin()] + ( m_dataWindow.size().y - ( y - m_dataWindow.min.y ) ) * imageStride + (b.min.x - m_dataWindow.min.x);
                        for( int x = b.min.x; x <= b.max.x; x++ )
                        {
                            *channelPtr++ = *tilePtr++;
                        }
                    }
                }
            }
        }
    }
示例#2
0
    void operator()( const blocked_range2d<size_t>& r ) const {
        for( size_t x=r.rows().begin(); x!=r.rows().end(); ++x )
        {
            for( size_t y=r.cols().begin(); y!=r.cols().end(); ++y ) 
            {
                if(my_cam->isYellow_small(x, y))
                    returnPixel1C(my_seg_yellow, x, y) = 255;
                else
                    returnPixel1C(my_seg_yellow, x, y) = 0;

                // if(my_cam->isGreen_small(x, y))
                //     returnPixel1C(my_seg_green, x, y) = 255;
                // else
                //     returnPixel1C(my_seg_green, x, y) = 0;


                // if(my_cam->isBlue_small(x, y))
                //  returnPixel1C(my_seg_blue, x, y) = 255;
                // else
                //  returnPixel1C(my_seg_blue, x, y) = 0;

                if(my_cam->isRed_small(x, y))
                    returnPixel1C(my_seg_red, x, y) = 255;
                else
                    returnPixel1C(my_seg_red, x, y) = 0;
            }
        }
    }
示例#3
0
文件: TBBCode.cpp 项目: Chalenko/PCM
		void operator()(const blocked_range2d<int>& r) const{
			int begin1 = r.rows().begin(), end1 = r.rows().end();
			int begin2 = r.cols().begin(), end2 = r.cols().end();
			for (int i = begin1; i < end1; i++){
				for (int j = begin2; j < end2; j++){
					dst[i * wN + j] = src[j * hN + i];
				}
			}
		}
示例#4
0
文件: TBBCode.cpp 项目: Chalenko/PCM
		void operator()(const blocked_range2d<int>& r) const{
			int begin1 = r.rows().begin(), end1 = r.rows().end();
			int begin2 = r.cols().begin(), end2 = r.cols().end();
			for (int i = begin1; i < end1; i++){
				for (int j = begin2; j < end2; j++){
					const double *vec1, *vec2;
					vec1 = &(A[i*src1w]);
					vec2 = &(B[j*src1w]);
					dst[i * src2w + j] = TBBSclMlt(vec1, vec2, src1w);
				}
			}
		}
示例#5
0
 void operator()( const blocked_range2d<size_t>& r ) const {
     float (*a)[L] = my_a; // a,b,c used in example to emphasize
     float (*b)[N] = my_b; // commonality with serial code
     float (*c)[N] = my_c;
     for( size_t i=r.rows().begin(); i!=r.rows().end(); ++i ){
         for( size_t j=r.cols().begin(); j!=r.cols().end(); ++j ) {
             float sum = 0;
             for( size_t k=0; k<L; ++k )
                 sum += a[i][k]*b[k][j];
             c[i][j] = sum;
         }
     }
 }
// Block operation
void TBBMatrix_Add_Parallel::operator()(const blocked_range2d<size_t> r) const
{
	TBBMatrix& A=my_A;
	TBBMatrix& B=my_B;
	TBBMatrix& C=my_C;
	for (size_t i = r.rows().begin(); i != r.rows().end(); ++i) 
	{
		for (size_t j = r.cols().begin(); j != r.cols().end(); ++j) 
		{
			double sum=A.Get(i,j)+B.Get(i,j);
			C.Set(sum,i,j);
		}
	}
}
示例#7
0
  void operator()( const blocked_range2d<size_t, size_t>& r ) {   
    double value;
    DoubleVector args(2);		
    // r is a 2-dimensonal range
    for( size_t i=r.rows().begin(); i!=r.rows().end(); ++i ){
	  //pData1 = (m_pGrid1->data) + (m_stride1 * i);
      for( size_t j=r.cols().begin(); j!=r.cols().end(); ++j) {        
        //pData2 = (m_pGrid2->data) + (m_stride2 * j);	
		double arg1, arg2;
		arg1 = * (double*) PyArray_GETPTR1(m_pGrid1, i);
		arg2 = * (double*) PyArray_GETPTR1(m_pGrid2, j);
		args[0] = arg1;
		args[1] = arg2;
        //value = (*m_pFn)(arg1, arg2, m_pArgs);
		value = m_params.objectiveFunction(args);
        if (m_value_of_max == -DBL_MAX || value > m_value_of_max) {
          m_value_of_max = value;
          m_argmax1 = args[0];
		  m_argmax2 = args[1];
		}
      }
    }
  }