Пример #1
0
void getValidRowsCols(const Mat_d& distMat, double invalidVal, Mat_c& rowFlag,
		Mat_c& colFlag) {
	int m = distMat.rows;
	int n = distMat.cols;

	rowFlag.resize(m, 1);
	colFlag.resize(n, 1);

	for (int i = 0; i < m; i++) {
		bool allNone = true;
		for (int j = 0; j < n; j++) {
			if (distMat.data[i * n + j] != invalidVal) {
				allNone = false;
				break;
			}
		}
		rowFlag.data[i] = allNone ? 0 : 1;
	}

	for (int j = 0; j < n; j++) {
		bool allNone = true;
		for (int i = 0; i < m; i++) {
			if (distMat.data[i * n + j] != invalidVal) {
				allNone = false;
				break;
			}
		}
		colFlag.data[j] = allNone ? 0 : 1;
	}
}
void TracksToMeasurments(const double invK[][9], std::vector<const Track2D*> vecPTracks, int nviews, Mat_d& meas, Mat_c& vmask) {

	int nTrack = vecPTracks.size();
	int nMeas = 0;
	for (int i = 0; i < nTrack; i++) {
		nMeas += vecPTracks[i]->length();
	}

	meas.resize(nMeas, 2);
	vmask.resize(nTrack, nviews);
	vmask.fill(0);

	double tmpPt[2];
	int k = 0;
	for (int i = 0; i < nTrack; i++) {
		Track2DNode* p = vecPTracks[i]->head.next;
		Track2DNode* tail = vecPTracks[i]->tail->next;
		while (p != tail) {
			int f = p->f;
			tmpPt[0] = p->x;
			tmpPt[1] = p->y;
			normPoint(invK[f], tmpPt, meas + 2 * k);
			vmask.data[i * nviews + f] = true;
			k++;
			p = p->next;
		}
	}
}