rspfRefPtr<rspfImageData> rspfOpenCVSobelFilter::getTile(const rspfIrect& tileRect,
                                                                rspf_uint32 resLevel)
{
  
	if(!isSourceEnabled())
   	{
	      return rspfImageSourceFilter::getTile(tileRect, resLevel);
	}
	long w     = tileRect.width();
	long h     = tileRect.height();
   
   	if(!theTile.valid()) initialize();
	if(!theTile.valid()) return 0;
  
	rspfRefPtr<rspfImageData> data = 0;
	if(theInputConnection)
	{
		data  = theInputConnection->getTile(tileRect, resLevel);
   	} else {
	      return 0;
   	}

	if(!data.valid()) return 0;
	if(data->getDataObjectStatus() == RSPF_NULL ||  data->getDataObjectStatus() == RSPF_EMPTY)
   	{
	     return 0;
   	}

	theTile->setImageRectangle(tileRect);
	theTile->makeBlank();
   
	theTile->setOrigin(tileRect.ul());
	runUcharTransformation(data.get());
   
	printf("Tile (%d,%d) finished!\n",tileRect.ul().x,tileRect.ul().y); 	
   	return theTile;
   
}
ossimRefPtr<ossimImageData> ossimCFARFilter::getTile(const ossimIrect& tileRect,
        ossim_uint32 resLevel)
{

    if(!isSourceEnabled())
    {
        return ossimImageSourceFilter::getTile(tileRect, resLevel);
    }

    if(!outputTile.valid()) initialize();
    if(!outputTile.valid()) return 0;

    ossimRefPtr<ossimImageData> data = 0;
    if(theInputConnection)
    {
        data  = theInputConnection->getTile(tileRect, resLevel);
    } else {
        return 0;
    }

    if(!data.valid()) return 0;
    if(data->getDataObjectStatus() == OSSIM_NULL ||  data->getDataObjectStatus() == OSSIM_EMPTY)
    {
        return 0;
    }

    outputTile->setImageRectangle(tileRect);
    outputTile->makeBlank();

    outputTile->setOrigin(tileRect.ul());
    runUcharTransformation(data.get());

    if(tileRect.ul().x % 1024 == 0 && tileRect.ul().y % 1024 == 0)
        std::cout << "Processing tile: (" << tileRect.ul().x << "," << tileRect.ul().y << ")" << std::endl;

    return outputTile;

}