我在地板设计应用程序上工作,用户可以导入地板纹理,应用程序会将纹理放在房间图像上。 我设法改变了地板图像的视角,使其与房间图像相匹配 - 感谢这个answer,但我现在停留在缩放地板图像以匹配房间图像尺寸。 我知道木地板的真实尺寸(每块木板177mm x 1220mm),我知道房间图像中物体的高度(水槽附近的白色瓷砖高度为240mm),我知道相机与白色瓷砖之间的距离(大约2500毫米)。房间图片大小为2592x1936,楼层图片大小为1430x1220。 房间图像是从iPad空气相机拍摄的,我似乎无法找到有关焦距和传感器尺寸的任何信息,最近我能找到的是3.3焦距,传感器高度为3.6mm(这可能是是我出错的地方。
我尝试使用这个等式
我插入等式的数字, 2662 =(3.3 240 x 1936)/(160 x 3.6) 然后我尝试在地板图像中找出木板的物体高度, (3.3 x 1220 x 1936)/(2662 x 3.6)= 813 px 然后我将图像高度除以物体高度,得到比率= 2.38 该图像的2.38比率应用于地板图像,这是非常正确的。
我知道我在某个地方出错或者走错了方向,希望有人能指出我正确的方向。 感谢
答案 0 :(得分:1)
我延伸瓷砖的线条直到它们接触到后墙与地板相交的边缘。使用此技术,您可以将墙平面的长度传递到地板平面中的相等长度。所以在这一点上,您所要做的就是沿着一条线匹配长度,即木板之间的长度和传输点之间的长度。但你必须以一种射影一致的方式做到这一点。用于投影测量的最通用的工具是交叉比。您在Math SE上的How to calculate true lengths from perspective projection中描述了与此处非常类似的应用程序。如果你在墙上遇到的那条线上的消失点确实在无穷远处(这似乎与你的设置大致相同),你可以通过一些更简单的计算,但除非你能保证这种情况总是如此,我不依赖于此。
以上内容仅可帮助您调整一个方向的比例。然而,与之垂直的方向仍然是开放的。你的exaple将是深度方向,远离相机的方向。你对这个方向有什么参考点吗?它看起来好像你可以在窗口开始之前在左墙上使用一个完整的瓷砖。但是根据两面墙之间的角落是如何平铺的,可能会略微偏离。
为了说明这些想法,请看上面的图片。由于红线看起来几乎是水平的,所以看到透视效果非常困难。因此,我会做另一个方向。假设角落中的瓷砖确实与墙上所有其他瓷砖的可见尺寸相同。所以你知道A1和B1之间的真实世界距离。您沿着蓝色垂直线(在现实世界中垂直,不一定是图像)投影到A2和B2,这是左墙平面与地板平面相交的位置。
他们为什么在那里见面?那么,A1,A2线就是左边的所有线都与后墙相交的地方。 A2,A3线是后墙与地板相交的地方。这两个平面交叉点实际上至少部分可见,这使得绘制线条成为可能。因此在A2处所有三个平面相遇,并且将其连接到远点F给出第三个边缘,左墙与地板相交。
由于段A1,B1和A2,B2在现实世界中只是彼此垂直传输的版本,因此它们具有等于长度。这种运输沿着垂直方向的左墙。现在再次运输它们,这次是在地板平面和左右方向。你可以使用红线,它们是平行的或在某一点相遇(在这个例子中相当远)。这些红线A2,A3和B2,B3在现实世界中是平行的,它们的距离仍然是该区块的边长。
现在开始测量某些东西,例如为此,计算表示从A3到C的距离的交叉比(F,A3; B3,C),以A3到B3的距离的倍数表示,并使用F作为点的距离。无穷。对D做同样的事,然后差异将是从C到D的长度,用从A3到B3的距离的倍数表示。因此,在该示例中,C和D之间的距离是4.42个瓦片边缘长度。缩放图像以适应这个数字。