GroundPolyFitter<degree>::GroundPolyFitter(void) :
	nrows(480), ncols(640), pixelToGround(nrows, ncols), allPixels(nrows * ncols)
{
	double pixelPointInit[] = { 0.0, 0.0, 1.0 }; // homogeneous coordinates
	cv::Mat_<double> pixelPoint(3, 1, pixelPointInit);
	cv::Mat_<double> groundPoint(3, 1);

	int i = 0;
	for(int r = 0; r < nrows; r++) {
		for(int c = 0; c < ncols; c++) {
			pixelPoint(1, 1) = (double) r;
			pixelPoint(1, 2) = (double) c;

			groundPoint = homography * pixelPoint;

			double x = groundPoint(1, 1);
			double y = groundPoint(1, 2);
			double scale = groundPoint(1, 3);
			pixelToGround(r, c).setX(x /scale);
			pixelToGround(r, c).setY(y /scale);

			allPixels[i] = RowCol(r, c);
			i++;
		}
	}
}
Exemplo n.º 2
0
	double PixelIterator::calculatePixelIndex()
	{
		double pixelIndex = -1;
		if(usesTransform)
		{
			Vector2d pixelPoint = inverseTransform.transform(currentPoint);
			pixelPoint.x *= ratio.x;
			pixelPoint.y *= ratio.y;
			if(mirrorHorizontal)
			{
				pixelPoint.x = srcRectD.x + (srcRectD.width - (pixelPoint.x-srcRectD.x));
			}
			else
			{
				pixelPoint.x = srcRectD.x + pixelPoint.x;
			}
			if(mirrorVertical)
			{
				pixelPoint.y = srcRectD.y + (srcRectD.height - (pixelPoint.y-srcRectD.y));
			}
			else
			{
				pixelPoint.y = srcRectD.y + pixelPoint.y;
			}
			if(pixelPoint.x < srcRectD.x || pixelPoint.y < srcRectD.y || pixelPoint.x > srcRectRight || pixelPoint.y > srcRectBottom)
			{
				pixelIndex = -1;
			}
			else
			{
				pixelIndex = (dimensions.x*Math::floor(pixelPoint.y))+pixelPoint.x;
			}
		}
		else
		{
			Vector2d pixelPoint(currentPoint.x*ratio.x, currentPoint.y*ratio.y);
			if(mirrorHorizontal)
			{
				pixelPoint.x = srcRectD.x + (srcRectD.width - (pixelPoint.x-srcRectD.x));
			}
			else
			{
				pixelPoint.x = srcRectD.x + pixelPoint.x;
			}
			if(mirrorVertical)
			{
				pixelPoint.y = srcRectD.y + (srcRectD.height - (pixelPoint.y-srcRectD.y));
				row = Math::ceil(pixelPoint.y) - pixelPoint.y;
			}
			else
			{
				pixelPoint.y = srcRectD.y + pixelPoint.y;
				row = pixelPoint.y - Math::floor(pixelPoint.y);
			}
			pixelIndex = (dimensions.x*Math::floor(pixelPoint.y))+pixelPoint.x;
		}
		return pixelIndex;
	}