我正在考虑为Android手机实施一个惯性导航系统,我意识到加速度计的准确性和读数的不断波动很难实现.
首先,我将手机放在一个平面上,并在X和Y方向上取样1000个加速度计读数(平行于工作台,因此没有重力作用于这些方向).然后我平均这些读数并使用该值来校准手机(从每个后续读数中减去该值).
然后我再次将它放在桌面上并在X和Y方向上采样5000个加速度计读数来测试系统.考虑到校准,我预计这些加速度应该在每个方向上加起来为0(大致).然而,情况并非如此,并且超过5000次迭代的总加速度远不及0(每个轴上平均大约10).
我意识到没有看到我的代码,这可能很难回答,但在更一般的意义上......
这只是移动电话(HTC Desire S)上加速度计读数不准确的一个例子,还是我在编码中出错的可能性更大?
所以,我一直在努力解决这个问题,并且没有任何运气来利用互联网的智慧和相关的SO帖子.
我正在编写一个使用无处不在的加速度计的Android应用程序,但即使在休息时我似乎也得到了令人难以置信的"噪音",似乎无法弄清楚如何处理它,因为我的读数需要相对较高准确.我想也许我的手机(HTC Incredible)功能失调,但传感器似乎与我玩过的其他游戏和应用程序配合得很好.
我试图使用各种"过滤器",但我似乎无法围绕它们.我知道引力必须以某种方式处理,也许这就是我出错的地方.目前我已经尝试了这个,改编自SO答案,它引用了iPhone SDK的一个例子:
accel[0] = event.values[0] * kFilteringFactor + accel[0] * (1.0f - kFilteringFactor);
accel[1] = event.values[1] * kFilteringFactor + accel[1] * (1.0f - kFilteringFactor);
double x = event.values[0] - accel[0];
double y = event.values[1] - accel[1];
Run Code Online (Sandbox Code Playgroud)
海报上写着"玩"kFilteringFactor值(示例中为kFilteringFactor = 0.1f),直到满意为止.不幸的是,我似乎仍然得到很多噪音,所有这一切似乎都是让读数以微小的小数形式出现,这对我没有多大帮助,而且似乎只是让传感器不那么敏感.我的大脑的数学中心也因多年的疏忽而萎缩,所以我不完全理解这个过滤器是如何工作的.
有人可以详细解释如何从加速度计中获取有用的读数吗?一个简洁的教程将是一个令人难以置信的帮助,因为我没有找到一个非常好的教程(至少针对我的知识水平).我感到沮丧,因为我觉得所有这一切对我来说都应该更加明显.任何帮助或方向将不胜感激,当然,如果需要,我可以从我的代码中提供更多样本.
我希望我不是要求过多地用勺子喂食; 我不会问,除非我一直想把它弄清楚.看起来其他SO成员也有一些兴趣.
我知道默认的OpenCV校准系统模拟针孔相机,但我正在使用一个使用极宽FOV镜头(187度)的系统.如果有任何现有方法在OpenCV中执行此操作,或仅使用宽镜头?或者我是否必须为我的系统重写所有校准/解除错误?
我目前正在开发iPhone应用程序(在iPhone 5,iOS 7,Xcode 5上),这需要非常准确地确定当前的态度.CMDeviceMotion的"态度"并不能满足这些要求,因为Apple的传感器融合算法似乎过分依赖陀螺仪,而陀螺仪的速度相当快(根据我的经验).这就是我决定读出裸传感器数据的原因,后来我想将它自己组合在一个传感器融合算法中.
在询问磁力计数据时,有两种可能性:
通过CMMotionManager中的CMMagnetometerData
通过CMDeviceMotion中的CMCalibratedMagneticField关于Apple的说法
此属性返回的CMCalibratedMagneticField可为您提供设备附近的总磁场,而无需设备偏差.与CMMagnetometer类的magneticField属性不同,这些值反映了地球的磁场加上周围的场,减去了器件偏置.
原则上(2.)正是我想要的.
如果磁力计数据正确校准,则可以进行非常简单的测试.为简单起见,可以将自己限制在两个维度.当设备位于其后面时,组合B_x ^ 2 + B_y ^ 2必须是恒定的,与设备指向的方向无关.它必须等于地球磁场的水平分量(假设设备附近没有其他场).因此,当执行位于其背面的设备的360度转弯时,B_x上的测量数据B_y应显示圆形.详情请见此处.
现在重点:CMCalibratedMagneticField的数据不会产生圆圈!
有没有人对此有解释?或者有人知道,CMCalibratedMagneticField是如何产生的?当执行设备的"八字形"运动时,磁力计是否从上方校正,或者什么是运动?
顺便说一句.为什么"八字形"机芯并没有将设备绕在它的三轴上,这样可以进行上述链接中所述的校准?
对于这个问题的任何澄清我都很高兴...谢谢!
我有一个camera
和一个3D
对象,我计算了camera matrix
在给定的这个.使用相机拍摄的图像有大小1600x1200.
但是在相机矩阵中我没有centers
正确获得图像的值.而不是800, 600
我得到一些其他的价值观.可能的原因是什么?
#include <iostream>
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include <math.h>
using namespace std;
using namespace cv;
int main()
{
int numberofpoints=30;
float p2d[30][2] =
{{72, 169}, {72, 184}, {71, 264}, {96, 168}, {94, 261}, {94, 276}, {257, 133},
{254, 322}, {254, 337}, {278, 132}, {278, 146}, {275, 321}, {439, 228},
{439, 243}, {437, 328}, {435, 431}, {461, 226}, {459, 326}, {459, 342},
{457, 427}, {457, …
Run Code Online (Sandbox Code Playgroud) 对于量化项目,我需要经过颜色校正的图像,无论光照条件如何,都能一遍又一遍地产生相同的结果。
每个图像都包含一个 X-Rite 颜色检查器,其颜色以矩阵格式已知:
Reference=[[170, 189, 103],[46, 163, 224],[161, 133, 8],[52, 52, 52],[177, 128, 133],[64, 188, 157],[149, 86, 187],[85, 85, 85],[67, 108, 87],[108, 60, 94],[31, 199, 231],[121, 122, 122], [157, 122, 98],[99, 90, 193],[60, 54, 175],[160, 160, 160],[130, 150, 194],[166, 91, 80],[70, 148, 70],[200, 200, 200],[68, 82, 115],[44, 126, 214],[150, 61, 56],[242, 243, 243]]
Run Code Online (Sandbox Code Playgroud)
对于每张图像,我为作为示例的色卡计算相同的矩阵:
Actual_colors=[[114, 184, 137], [2, 151, 237], [118, 131, 55], [12, 25, 41], [111, 113, 177], [33, 178, 188], [88, 78, 227], [36, 64, 85], [30, …
Run Code Online (Sandbox Code Playgroud) 我用OpenCV计算了相机的内在和外在参数.现在,我想从屏幕坐标(u,v)计算世界坐标(x,y,z).
我是怎么做到的
注意,当我使用kinect时,我已经知道了z坐标.
任何帮助深表感谢.谢谢!
我已根据某个世界坐标系校准了2个摄像头.我知道相对于世界框架的每一个的旋转矩阵和平移向量.从这些矩阵如何计算一个摄像机相对于另一个摄像机的旋转矩阵和平移矢量?
请给我任何帮助或建议.谢谢!
calibration computer-vision camera-calibration rotational-matrices extrinsic-parameters
我正在使用广角镜头(178º对角线FOV),我正在尝试使用Opencv校准模块正确校准它.所有的检测和校准过程都工作正常,但结果很差.
我尝试了很多不同的配置:
我能得到的最好的是:
关于如何获得良好校准的任何想法?您是否认为同时使用两种校准模式,或使用圆形网格作为校准模式会有所帮助?
我在opencv 3.0中看到了薄棱镜系数的添加.我没试过,但我认为不会有所作为,对吧?编辑:检查它......没什么
camera opencv calibration computer-vision camera-calibration
我正在使用 cv2 findChessBoardCorners 在视觉应用程序中进行相机校准。我对该函数的调用如下所示:
def auto_detect_checkerboard(self, image):
retval, corners = cv2.findChessboardCorners(image, (7, 7), flags=cv2.CALIB_CB_ADAPTIVE_THRESH
+ cv2.CALIB_CB_EXHAUSTIVE)
if(retval):
return corners[0][0], corners[0][1]
else:
print("No Checkerboard Found")
assert False
Run Code Online (Sandbox Code Playgroud)
但到目前为止,它似乎无法在我尝试过的所有图像上找到任何角落。我用过的最简单的例子是
我使用该功能有问题吗?或者我需要在预处理中处理的图像有问题吗?
到目前为止,我已经尝试转换为灰度并应用高斯滤波器,这两种方法似乎都没有产生任何作用。
calibration ×10
opencv ×5
android ×2
camera ×2
python ×2
acceleration ×1
colors ×1
distortion ×1
filter ×1
ios ×1
iphone ×1
kinect ×1
magnetometer ×1
noise ×1
physics ×1
polynomials ×1