我在屏幕空间中有4个2D点,我需要将它们反向投影回3D空间.我知道4个点中的每一个都是3D旋转的刚性矩形的一个角,我知道矩形的大小.如何从中获取3D坐标?
我没有使用任何特定的API,我没有现有的投影矩阵.我只是在寻找基本的数学来做到这一点.当然没有足够的数据将单个2D点转换为3D而没有其他参考,但我想如果你有4个点,你知道它们在同一个平面上都是直角相交的,而且你知道它们之间的距离,你应该能够从中找出它.不幸的是,我无法解释如何.
这可能属于摄影测量的范畴,但谷歌搜索它并没有让我获得任何有用的信息.
我有一个从移动车辆前面记录的视频文件.我将使用OpenCV进行对象检测和识别,但我坚持一个方面.如何确定与识别对象的距离.
我可以知道我目前的速度和现实世界的GPS位置,但就是这样.我无法对我正在跟踪的对象做出任何假设.我打算使用它来跟踪和跟踪对象而不会与它们发生碰撞.理想情况下,我想使用这些数据来推导物体的真实世界位置,如果我能确定从相机到物体的距离,我就能做到这一点.
这不完全是一个编程问题.我只是想知道你的方法对于数字图像处理中的常见问题.
假设您有jpg格式的几棵树的图像.你会如何找到这些树木的高度?照片是您唯一的输入.
我想知道你没有编码的方法.因此,如果您的答案含糊不清或非DIP-ish无关紧要.
小修正:高度不必是树的实际高度.高度可以达到任何比例.但应该与pic中的所有对象保持一致.
我正在使用OpenCV 2.3.1中的Orb特征检测器开展项目.我发现8个不同图像之间的匹配,其中6个非常相似(相机位置相差20厘米,沿线性滑块,因此没有比例或旋转方差),然后从大约45度角拍摄2张图像侧.我的代码在非常相似的图像之间找到了大量精确匹配,但从更不同的角度拍摄的图像几乎没有.我已经包含了我认为是我的代码的相关部分,如果您需要更多信息,请告诉我.
// set parameters
int numKeyPoints = 1500;
float distThreshold = 15.0;
//instantiate detector, extractor, matcher
detector = new cv::OrbFeatureDetector(numKeyPoints);
extractor = new cv::OrbDescriptorExtractor;
matcher = new cv::BruteForceMatcher<cv::HammingLUT>;
//Load input image detect keypoints
cv::Mat img1;
std::vector<cv::KeyPoint> img1_keypoints;
cv::Mat img1_descriptors;
cv::Mat img2;
std::vector<cv::KeyPoint> img2_keypoints
cv::Mat img2_descriptors;
img1 = cv::imread(fList[0].string(), CV_LOAD_IMAGE_GRAYSCALE);
img2 = cv::imread(fList[1].string(), CV_LOAD_IMAGE_GRAYSCALE);
detector->detect(img1, img1_keypoints);
detector->detect(img2, img2_keypoints);
extractor->compute(img1, img1_keypoints, img1_descriptors);
extractor->compute(img2, img2_keypoints, img2_descriptors);
//Match keypoints using knnMatch to find the single best match for each keypoint
//Then cull results …
Run Code Online (Sandbox Code Playgroud) 我将设置一些设备来执行实时3D运动跟踪.我的第一个想法是使用一对相机拍摄立体图像并计算深度图以获得我需要的3D数据.
有没有好的开源库(C/C++)可用且速度足够实时(~12-24fps)?我在SourceForge中找到了使用Stereo Vision和EStereo进行3D重建,有人试过吗?
或者我可以实现的任何算法建议?
我有许多校准过的相机拍摄平面场景的照片.为简单起见,我们假设有3个摄像头.那些相机正在进行一般运动,但主要是翻译加上一些温和的旋转.相机的示例位置
任务是完全缝合它们.我不了解3D坐标,只是用校准相机拍摄的一组图像.
我所做的:
我在OpenCV中使用SURF/SIFT实现检测特征,通过在每对图像之间使用findHomography来获得初始单应性(1-> 2,2- > 3,1- > 3).从那些单应性我得到每个相机的姿势的初始esitimation (类似的程序到此)
然后我尝试使用束调整技术来最小化每个匹配对的重投影错误.优化参数是三个平移值和三个旋转值(从Rodrigues的旋转公式获得),尽管我可以稍后添加内部参数(焦点,主要点等).
假设图像#2将是参考帧(通过与其他两个图像具有最大量的匹配),其旋转和平移矩阵分别是同一性和零矩阵.
我计算从图像#2到图像#1的关键点(在图像#2和图像#1中均可见)的重投影为(伪代码)
[x1_; y1_; z1_] = K1*R1*inv(K2)*[x2; y2; 1] + K1*T1/Z2;
x1 = x1_/z1_;
y1 = y1_/z1_;
Run Code Online (Sandbox Code Playgroud)
要么
x1 = ((f1/f2)*r11*x2 + (f1/f2)*r12*y2 + f1*r13 + f1*tx/Z2) / ((1/f2)*r31*x2 + (1/f2)*r32*y2 + r33 + tx/Z2)
y1 = ((f1/f2)*r21*x2 + (f1/f2)*r22*y2 + f1*r23 + f1*ty/Z2) / ((1/f2)*r31*x2 + (1/f2)*r32*y2 + r33 + ty/Z2)
Run Code Online (Sandbox Code Playgroud)
其中r__是R1矩阵的元素,两个内在矩阵都是
[f 0 0]
[0 f 0]
[0 0 1]
Run Code Online (Sandbox Code Playgroud)
我假设参考帧的Z2坐标为1.
下一阶段是使用所获得的相机矩阵(K1,R1,T1,K3,R3,T3)将图像#1和#3变形为图像#2的公共坐标系.
问题是我不知道正确重投影到图像#2的参考帧所需的Z1和Z3,因为来自图像#1 - …
opencv computer-vision photogrammetry perspectivecamera image-stitching
作为我之前关于确定相机参数的问题的后续内容,我提出了一个新问题.
我有两张同一个矩形的照片:
第一个是没有任何变换的图像,并按原样显示矩形.
第二个图像显示了应用了一些3d变换(XYZ旋转,缩放,XY平移)后的矩形.这导致矩形看起来像一个梯形.
我希望下面的图片描述我的问题:
alt text http://wilco.menge.nl/application.data/cms/upload/transformation%20matrix.png
如何确定哪些转换(更具体地说:转换矩阵)导致了这种转变?
我知道两个图像中角落的像素位置,因此我也知道角落之间的距离.
假设我们有一个像这样的图像
假设我们已经在这张照片中使用过滤器和边缘检测算法.现在我的目标是测量距离(不是实际距离,距离可以是任意单位).例如:我如何找到大厅的长度?(到窗口)
还是书架的高度?你究竟如何放置"规模"和衡量标准.我正在寻找想法.但是,如果答案是OpenCV,那将会有所帮助.
我想知道照片的景深,最好是厘米或米.
我知道我们可以通过阅读EXIF标签来了解相机设置,但有没有标签直接告诉我们景深?或者我们如何从一些EXIF标签计算它?
例子将不胜感激.谢谢!
我想计算包含目标对象和参考对象的照片中对象的大小。
我认为我想做的是该软件实现的功能(我不知道该软件的精确程度) https://itunes.apple.com/us/app/photo-meter-picture-measuring/id579961082?吨= 8
通常,我已经发现它被称为摄影测量法,并且似乎是活跃的研究领域。
您将如何找到给定图像的对象的高度? https://physics.stackexchange.com/questions/151121/can-i-calculate-the-size-of-a-real-object-by-just-look-at-the-picture-taken-b
但是,我找不到
photogrammetry ×10
opencv ×4
c++ ×2
photography ×2
2d ×1
3d ×1
exif ×1
formula ×1
geometry ×1
matrix ×1
open-source ×1
orb ×1
photo ×1
stereo-3d ×1