RealSense D415 捕捉乒乓球运动

刚好周末415到货了,今天试了试。

做了一个乒乓球捕捉的demo,左边是三维点云(把乒乓球以外的都变成了白色),右边上面是识别出来的球心坐标和球半径,右下是RGB挖出来的乒乓球图像(BGR格式)
左边是三维点云(把乒乓球以外的都变成了白色),右边上面是识别出来的球心坐标和球半径,右下是RGB挖出来的乒乓球图像(BGR格式)


程序框架借用了Intel给的Demo中的pointcloud工程,
先要做深度相机和RGB相机的align

frames = align_to_color.process(frames);

然后在RGB图像中用颜射识别找出乒乓球

// convert realsense data to opencv data
Mat image(Size(w, h), CV_8UC3, (void*)color.get_data(), Mat::AUTO_STEP);
// convert BGR data to HSV 
Mat imgHSV;
cvtColor(image, imgHSV, CV_BGR2HSV);
// track color with threshold in HSV
Mat imgOrange;
inRange(imgHSV, Scalar(iLowH, iLowS, iLowV), Scalar(iHighH, iHighS, iHighV), imgOrange);
// morphology open to remove noise points
Mat element = getStructuringElement(MORPH_RECT, Size(11, 11));
morphologyEx(imgOrange, imgOrange, MORPH_OPEN, element);
// mask
image.setTo(255, ~imgOrange);
//image.copyTo(image, imgOrange);
imshow("color", image);

由此也就可以从深度相机得到乒乓球的点云,但是由于噪声和识别误差的存在,点云中有一些坏点需要剔除

bool mCompare(xyd_t a, xyd_t b)
{
	return a.d < b.d;
}

// given the x,y and depth infos, find the sphere center
std::vector<xyd_t> throwBadData(std::vector<xyd_t> xyds)
{
	// get rid of bad data
	std::sort(xyds.begin(), xyds.end(), mCompare);

	float median = xyds[xyds.size() / 2].d;

	auto iter = xyds.begin();
	while (iter != xyds.end())
	{
		if (((*iter).d > median + 0.05) || ((*iter).d < median - 0.05))
			iter = xyds.erase(iter);
		else
			iter++;
	}
	return xyds;
}

对于剩下的点要进行球面拟合以求出乒乓球的球心位置,但是此时的x,y坐标还是图像的像素值,需要转化为真实世界的坐标,好在intel的工程师对相机已经进行了标定,所有的参数都存在相机里面,通过下面语句调用

rs2_intrinsics intr = frames.get_profile().as<rs2::video_stream_profile>().get_intrinsics(); // Calibration data

有了相机参数,就可以通过相机的成像模型推导出像素对应的坐标,不过在sdk中已经很贴心的有可以直接用的函数了

#include <librealsense2/rsutil.h>
rs2_deproject_pixel_to_point(upoint, &intr, upixel, udist); // 用法可以参考measure那个demo

得到了所有点的真是坐标之后,就可以对球面进行拟合了,可以用最小二乘,也可以用RANSAC。(还有其他一些神奇的方法)
我这次用了参阅了大神@liyuanbhu的最小二乘算法:
https://blog.csdn.net/liyuanbhu/article/details/80201371

最后测试了一下,距离的精度在据相机50cm左右可以达到2~3mm, 1m距离估计在3-4mm。

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: Intel RealSense D415是一款深度相机,可以实现高质量的深度感知和图像捕捉。它采用了Intel RealSense技术,可以在宽广的视野范围内进行深度感知,同时还支持高分辨率的RGB图像捕捉。这款相机适用于许多应用场景,如机器人、虚拟现实、增强现实、3D扫描等。 ### 回答2: Intel Realsense D415是一款高性能深度相机,采用了最新的深度传感器技术,能够捕捉三维图像和视频。它提供了高质量的深度感知和视觉体验,拓展了计算机视觉和机器人领域的应用场景。 Intel Realsense D415能够实现准确的深度感知,以及实时的深度图像处理和分析。它可以同时捕捉彩色图像和深度图像,提供了高分辨率和高质量的拍摄效果。此外,它还具有IR投影和可见光投影功能,可以在不同的环境下实现高质量的深度感知。 Intel Realsense D415具有轻量级、紧凑设计,易于携带和安装。它与多种平台和设备兼容,包括Windows、Linux、Android和macOS等操作系统。在机器人、自动化和智能主机等领域,Intel Realsense D415也拥有广泛的应用场景。它能够实现自主导航、人脸识别、三维建模、虚拟现实等功能,为用户带来更加丰富和高效的使用体验。 总之,Intel Realsense D415是一款高性能深度相机,可以实现精准的深度感知和高质量的图像采集和分析。它为计算机视觉和机器人领域的应用提供了更加广阔的拓展空间,为用户带来更加高效和智能的体验。 ### 回答3: Intel RealSense D415是一款搭载深度传感器的3D摄像头,该产品由Intel公司推出,旨在提供高质量和高分辨率的3D扫描和图像捕捉功能。Intel RealSense D415能够与计算机或其他设备进行连接,允许使用者进行各种各样的应用程序,例如增强现实、虚拟现实、机器人、人脸识别等。 Intel RealSense D415的主要特点包括高精度的深度探测,可在室内和室外环境下实现对浅色物体的探测。该设备具有两个红外摄像头,以及一个具有1280 x 720像素分辨率的RGB摄像头,可提供全彩色采集。此外,它还支持使用Intel RealSense SDK 2.0进行编程,可用于C++、C#、Python等编程语言。 RealSense D415还具有易于使用的设计,凭借其小巧的外观和 USB 3.0 接口,使其易于安装和使用。同时,该设备还能够自适应数据率,可根据设备处理器性能的差异进行自适应优化,从而获得最佳效果。 总之,Intel RealSense D415是一款高性能的深度摄像机,旨在提供高度精细的3D扫描和图像捕捉功能,可被广泛应用于各种应用场景中,例如智能家居、自主导航、人体捕捉等。无疑,这一产品在不同领域的应用将在未来得到更广泛的探索和应用。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值