本文整理汇总了C++中eigen::Matrix4f::topRightCorner方法的典型用法代码示例。如果您正苦于以下问题:C++ Matrix4f::topRightCorner方法的具体用法?C++ Matrix4f::topRightCorner怎么用?C++ Matrix4f::topRightCorner使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类eigen::Matrix4f
的用法示例。
在下文中一共展示了Matrix4f::topRightCorner方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: initICPModel
void ICPSlowdometry::initICPModel(unsigned short * depth,
const float depthCutoff,
const Eigen::Matrix4f & modelPose)
{
depth_tmp[0].upload(depth, sizeof(unsigned short) * width, height, width);
for(int i = 1; i < NUM_PYRS; ++i)
{
pyrDown(depth_tmp[i - 1], depth_tmp[i]);
}
for(int i = 0; i < NUM_PYRS; ++i)
{
createVMap(intr(i), depth_tmp[i], vmaps_g_prev_[i], depthCutoff);
createNMap(vmaps_g_prev_[i], nmaps_g_prev_[i]);
}
cudaDeviceSynchronize();
Eigen::Matrix<float, 3, 3, Eigen::RowMajor> Rcam = modelPose.topLeftCorner(3, 3);
Eigen::Vector3f tcam = modelPose.topRightCorner(3, 1);
Mat33 & device_Rcam = device_cast<Mat33>(Rcam);
float3& device_tcam = device_cast<float3>(tcam);
for(int i = 0; i < NUM_PYRS; ++i)
{
tranformMaps(vmaps_g_prev_[i], nmaps_g_prev_[i], device_Rcam, device_tcam, vmaps_g_prev_[i], nmaps_g_prev_[i]);
}
cudaDeviceSynchronize();
}
示例2: initICPModel
void ICPOdometry::initICPModel(const DeviceArray2D<unsigned short>& depth,
const float depthCutoff,
const Eigen::Matrix4f & modelPose)
{
depth_tmp[0] = depth;
for(int i = 1; i < NUM_PYRS; ++i)
{
pyrDown(depth_tmp[i - 1], depth_tmp[i]);
}
for(int i = 0; i < NUM_PYRS; ++i)
{
createVMap(intr(i), depth_tmp[i], vmaps_g_prev_[i], depthCutoff);
createNMap(vmaps_g_prev_[i], nmaps_g_prev_[i]);
}
cudaDeviceSynchronize();
Eigen::Matrix<float, 3, 3, Eigen::RowMajor> Rcam = modelPose.topLeftCorner(3, 3);
Eigen::Vector3f tcam = modelPose.topRightCorner(3, 1);
Mat33 & device_Rcam = device_cast<Mat33>(Rcam);
float3& device_tcam = device_cast<float3>(tcam);
if (modelPose != Eigen::Matrix4f::Identity())
for(int i = 0; i < NUM_PYRS; ++i)
tranformMaps(vmaps_g_prev_[i], nmaps_g_prev_[i], device_Rcam, device_tcam, vmaps_g_prev_[i], nmaps_g_prev_[i]);
cudaDeviceSynchronize();
}
示例3: addCloud
void DiriniVisualizer::addCloud(pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud_, Eigen::Matrix3f R, Eigen::Vector3f t)
{
Eigen::Matrix4f H = Eigen::Matrix4f::Identity();
H.topLeftCorner(3,3) = R;
H.topRightCorner(3,1) = t;
addCloud(cloud_, H);
}
示例4: initICPModel
void RGBDOdometry::initICPModel(GPUTexture * predictedVertices,
GPUTexture * predictedNormals,
const float depthCutoff,
const Eigen::Matrix4f & modelPose)
{
cudaArray * textPtr;
cudaGraphicsMapResources(1, &predictedVertices->cudaRes);
cudaGraphicsSubResourceGetMappedArray(&textPtr, predictedVertices->cudaRes, 0, 0);
cudaMemcpyFromArray(vmaps_tmp.ptr(), textPtr, 0, 0, vmaps_tmp.sizeBytes(), cudaMemcpyDeviceToDevice);
cudaGraphicsUnmapResources(1, &predictedVertices->cudaRes);
cudaGraphicsMapResources(1, &predictedNormals->cudaRes);
cudaGraphicsSubResourceGetMappedArray(&textPtr, predictedNormals->cudaRes, 0, 0);
cudaMemcpyFromArray(nmaps_tmp.ptr(), textPtr, 0, 0, nmaps_tmp.sizeBytes(), cudaMemcpyDeviceToDevice);
cudaGraphicsUnmapResources(1, &predictedNormals->cudaRes);
copyMaps(vmaps_tmp, nmaps_tmp, vmaps_g_prev_[0], nmaps_g_prev_[0]);
for(int i = 1; i < NUM_PYRS; ++i)
{
resizeVMap(vmaps_g_prev_[i - 1], vmaps_g_prev_[i]);
resizeNMap(nmaps_g_prev_[i - 1], nmaps_g_prev_[i]);
}
Eigen::Matrix<float, 3, 3, Eigen::RowMajor> Rcam = modelPose.topLeftCorner(3, 3);
Eigen::Vector3f tcam = modelPose.topRightCorner(3, 1);
mat33 device_Rcam = Rcam;
float3 device_tcam = *reinterpret_cast<float3*>(tcam.data());
for(int i = 0; i < NUM_PYRS; ++i)
{
tranformMaps(vmaps_g_prev_[i], nmaps_g_prev_[i], device_Rcam, device_tcam, vmaps_g_prev_[i], nmaps_g_prev_[i]);
}
cudaDeviceSynchronize();
}
示例5: getTransformationByRANSAC
//.........这里部分代码省略.........
{
used[id] = true;
sample_matches_indices.push_back(id);
sample_matches_vector.push_back(initial_matches.at(id));
}
}
bool valid; // valid is false iff the sampled points clearly aren't inliers themself
transformation = Feature::getTransformFromMatches(valid,
earlier->feature_pts_3d,
now->feature_pts_3d,
sample_matches_vector, max_dist_m);
if (!valid) continue; // valid is false iff the sampled points aren't inliers themself
if (transformation != transformation) continue; //Contains NaN
//test whether samples are inliers (more strict than before)
Feature::computeInliersAndError(inlier, inlier_error, nullptr,
sample_matches_vector, transformation,
earlier->feature_pts_3d, now->feature_pts_3d,
squared_max_dist_m);
if (inlier_error > 1000) continue; //most possibly a false match in the samples
Feature::computeInliersAndError(inlier, inlier_error, nullptr,
initial_matches, transformation,
earlier->feature_pts_3d, now->feature_pts_3d,
squared_max_dist_m);
if (inlier.size() < min_inlier_threshold || inlier_error > max_dist_m)
{
continue;
}
valid_iterations++;
//Performance hacks:
///Iterations with more than half of the initial_matches inlying, count twice
if (inlier.size() > initial_matches.size() * 0.5) n_iter++;
///Iterations with more than 80% of the initial_matches inlying, count threefold
if (inlier.size() > initial_matches.size() * 0.8) n_iter++;
if (inlier_error < best_error)
{ //copy this to the result
if (pcc != nullptr)
{
Eigen::Vector3f t = transformation.topRightCorner(3, 1);
Eigen::Matrix<float, 3, 3, Eigen::RowMajor> rot = transformation.topLeftCorner(3, 3);
pcc->getCoresp(t, rot, information, pc, pcorrc, threads, blocks);
}
result_transform = transformation;
result_information = information;
point_count = pc;
point_corr_count = pcorrc;
if (matches != nullptr) *matches = inlier;
best_inlier_cnt = inlier.size();
rmse = inlier_error;
best_error = inlier_error;
}
float new_inlier_error;
transformation = Feature::getTransformFromMatches(valid,
earlier->feature_pts_3d, now->feature_pts_3d, inlier); // compute new trafo from all inliers:
if (transformation != transformation) continue; //Contains NaN
Feature::computeInliersAndError(inlier, new_inlier_error, nullptr,
initial_matches, transformation,
earlier->feature_pts_3d, now->feature_pts_3d,
squared_max_dist_m);
if(inlier.size() < min_inlier_threshold || new_inlier_error > max_dist_m)
{
continue;
}
if (new_inlier_error < best_error)
{
if (pcc != nullptr)
{
Eigen::Vector3f t = transformation.topRightCorner(3, 1);
Eigen::Matrix<float, 3, 3, Eigen::RowMajor> rot = transformation.topLeftCorner(3, 3);
pcc->getCoresp(t, rot, information, pc, pcorrc, threads, blocks);
}
result_transform = transformation;
if (pcc != nullptr)
result_information = information;
point_count = pc;
point_corr_count = pcorrc;
if (matches != nullptr) *matches = inlier;
best_inlier_cnt = inlier.size();
rmse = new_inlier_error;
best_error = new_inlier_error;
}
} //iterations
if (pcc == nullptr)
result_information = Eigen::Matrix<double, 6, 6>::Identity();
return best_inlier_cnt >= min_inlier_threshold;
}
示例6: addPoint
void DiriniVisualizer::addPoint(Eigen::Vector3f point, Eigen::Matrix4f transform_)
{
points.push_back(transform_.topLeftCorner(3,3)*point+transform_.topRightCorner(3,1));
}