Esempio n. 1
0
TSubMat sub(const TMat &m, Int nrows, Int ncols)
{
	Assert(ncols > 0 && nrows > 0 && nrows <= m.Rows() && ncols <= m.Cols(), 
		"(sub(Mat)) illegal subset of matrix");

	TSubMat result(nrows, ncols, m.Cols(), m.Ref());

	return(result);
}
Esempio n. 2
0
TSparseMat::TSparseMat(const TMat &m) : row(0)
{
	Int i;
	
	SetSize(m.Rows(), m.Cols());

	for (i = 0; i < rows; i++)
		row[i] = m[i];
}
Esempio n. 3
0
TSubMat sub(const TMat &m, Int top, Int left, Int height, Int width)
{
	Assert(left >= 0 && width > 0 && left + width <= m.Cols(), "(sub(Mat)) illegal subset of matrix");
	Assert(top >= 0 && height > 0 && top + height <= m.Rows(), "(sub(Mat)) illegal subset of matrix");

	TSubMat result(height, width, m.Cols(), m.Ref() + top * m.Cols() + left);

	return(result);
}
Esempio n. 4
0
TVec operator * (const TMat &m, const TVec &v)
{
	Assert(m.Cols() == v.Elts(), "(Mat::*v) matrix and vector sizes don't match");
	
	Int		i;
	TVec	result(m.Rows());
	
	for (i = 0; i < m.Rows(); i++) 
		result[i] = dot(m[i], v);
	
	return(result);
}
Esempio n. 5
0
static void rowSums(TMat<TNumMat> mat, Vec<TNumVec> vec, int nthreads){
	if (mat.nrow != vec.len) throw std::invalid_argument("provided vector has invalid length");

	int nrow = mat.nrow;
	int ncol = mat.ncol;
	
	#pragma omp parallel num_threads(std::max(1, nthreads))
	{
		std::vector<TNumVec> acc(nrow, 0);
		TNumVec* accBegin = acc.data();
		#pragma omp for schedule(static) nowait
		for (int col = 0; col < ncol; ++col){
			TNumMat* matCol = mat.colptr(col);
			TNumVec* accIter = accBegin;
			for (int row = 0; row < nrow; ++row){//this loop should be unrolled...
				*accIter++ += *matCol++;
			}
		}
		#pragma omp critical
		{
			for (int row = 0; row < nrow; ++row){
				vec[row] += acc[row];
			}
		}
	}
}
Esempio n. 6
0
TVec operator * (const TVec &v, const TMat &m)			// v * m
{
	Assert(v.Elts() == m.Rows(), "(Mat::v*m) vector/matrix sizes don't match");
	
	TMVec 	temp(m.Cols(), vl_zero);	// accumulate in high precision
	TVec 	result(m.Cols());			// return low precision.
	Int		i;
	
	for (i = 0; i < m.Rows(); i++) 
		temp += m[i] * v[i];
	
	for (i = 0; i < temp.Elts(); i++)
		result[i] = temp[i];
		
	return(result);
}
Esempio n. 7
0
void ICLASS_API MSER(TMat m, TVectorOfVectorOfPoint2i ** ex)
{
	std::vector<std::vector<cv::Point> > contours;
	cv::Mat* mm;
	mm = m.Mat();
	cv::MSER()(*mm, contours);
	*ex = new TVectorOfVectorOfPoint2i();
	for (int i = 0; i < (int)contours.size(); i++)
	{
		(*ex)->push_back(TVectorOfPoint2i(contours[i]));
	}

}
bool ExpectFundamentalProperties(const TMat &F,
                                 const Mat &ptsA,
                                 const Mat &ptsB,
                                 double precision) {
  bool bOk = true;
  bOk &= F.determinant() < precision;
  assert(ptsA.cols() == ptsB.cols());
  Mat hptsA, hptsB;
  EuclideanToHomogeneous(ptsA, &hptsA);
  EuclideanToHomogeneous(ptsB, &hptsB);
  for (int i = 0; i < ptsA.cols(); ++i) {
    double residual = hptsB.col(i).dot(F * hptsA.col(i));
    bOk &= residual < precision;
  }
  return bOk;
}
Esempio n. 9
0
static void colSums(TMat<TNumMat> mat, Vec<TNumVec> vec, int nthreads){
	if (mat.ncol != vec.len) throw std::invalid_argument("provided vector has invalid length");

	TNumVec*  cs = vec.ptr;
	int nrow = mat.nrow;
	int ncol = mat.ncol;
	
	#pragma omp parallel for schedule(static) num_threads(std::max(1, nthreads))
	for (int col = 0; col < ncol; ++col){
		TNumMat* ptr = mat.colptr(col);
		TNumMat tmp = 0;
		for (int row = 0; row < nrow; ++row){
			tmp += *ptr++;
		}
		cs[col] = tmp;
	}
}
Esempio n. 10
0
TMSubVec diag(const TMat &m, Int diagNum)
{
	CheckRange(diagNum, 1 - m.Rows(), m.Cols(), "(row(Mat)) illegal row index");

	if (diagNum == 0)
		return(TMSubVec(Min(m.Rows(), m.Cols()), m.Cols() + 1, m.Ref()));
	else if (diagNum < 0)
		return(TMSubVec(Min(m.Rows() + diagNum, m.Cols()), m.Cols() + 1,
			m.Ref() - diagNum * m.Cols()));
	else
		return(TMSubVec(Min(m.Cols() - diagNum, m.Rows()), m.Cols() + 1,
			m.Ref() + diagNum));
}
Esempio n. 11
0
TMSubVec row(const TMat &m, Int i)
{
	CheckRange(i, 0, m.Rows(), "(row(Mat)) illegal row index");

	return(TMSubVec(m.Cols(), 1, m[i].Ref()));
}
Esempio n. 12
0
TMSubVec col(const TMat &m, Int i)
{
	CheckRange(i, 0, m.Cols(), "(col(Mat)) illegal column index");

	return(TMSubVec(m.Rows(), m.Cols(), m.Ref() + i));
}