【问题标题】:Resize image using real world measurements使用真实世界测量调整图像大小
【发布时间】:2016-08-19 07:56:02
【问题描述】:

我正在开发一个地板设计应用程序,用户可以在其中导入地板纹理,该应用程序会将纹理放置到房间图像上。 我已经成功地转换了地板图像的透视图,使其与房间图像匹配——感谢answer,但我现在坚持缩放地板图像以匹配房间图像尺寸。 我知道木地板的实际尺寸(每块木板 177 毫米 x 1220 毫米),我知道房间图像中物体的高度(水槽附近的白色瓷砖的高度是 240 毫米),我知道相机和白色瓷砖之间的距离(大约 2500 毫米)。房间图像尺寸为 2592x1936,地板图像尺寸为 1430x1220。 房间图像是从 iPad 空气相机拍摄的,我似乎无法找到有关焦距和传感器尺寸的任何信息,我能找到的最近的是 3.3 焦距和 3.6 毫米传感器高度(这可能是我错了)。

我尝试使用这个等式

我代入方程式的数字, 2662 = (3.3 240 x 1936) / (160 x 3.6) 然后我试着计算出地板图像中木板的物体高度, (3.3 x 1220 x 1936) / (2662 x 3.6) = 813 像素 然后我将图像高度除以对象高度得到比率 = 2.38。
此图像应用了 2.38 的比例应用于不太正确的地板图像。

我知道我在某个地方出错或完全错误的方式,希望有人能指出我正确的方向。 谢谢

【问题讨论】:

  • 这个公式只适用于平行于相机传感器的物体长度。我会利用你可能已经拥有的单应性进行纹理处理。反转单应性以获得从屏幕空间到纹理空间的映射。然后,您可以将图像中地板上的任何线段映射到纹理坐标中的相应表示。通过将生成的线段长度与目标长度进行比较,您可以得出纹理的缩放比例。

标签: math image-processing


【解决方案1】:

我会延长瓷砖的线条,直到它们接触到后墙与地板相接的边缘。使用此技术,您可以将墙平面中的长度转换为地板平面中的相等长度。因此,此时,您所要做的就是沿着一条线匹配长度,即木板之间的长度和转移点之间的长度。但是你必须以一种投射一致的方式来做这件事。投影测量最通用的工具是交叉比率。 Math SE 上的How to calculate true lengths from perspective projection 中描述了与您在此处所拥有的应用程序非常相似的应用程序。如果你在墙壁相遇的那条线上的消失点确实在无穷远处(在你的设置中似乎大致是这种情况),你可以通过一些更简单的计算来解决,但除非你能保证总是这样,我不会依赖它。

以上内容将帮助您仅在一个方向调整比例。但是,与之垂直的方向仍然是开放的。在您的例子中,这将是深度方向,即远离相机的方向。你有那个方向的参考点吗?在我看来,好像您可以在窗口开始之前在左墙上使用一块完整的瓷砖。但根据两堵墙之间的角落是如何平铺的,这可能会稍微偏离。

为了说明这些想法,请看上图。由于红线几乎是水平的,因此很难看到透视效果。因此我会做另一个方向。假设角落里的瓷砖确实与墙上所有其他瓷砖的可见尺寸相同。所以你知道 A1 和 B1 之间的真实世界距离。您沿着蓝色的垂直线(在现实世界中是垂直的,不一定是图像)向下投影到 A2 和 B2,这是左侧墙平面与地板平面相交的位置。

他们为什么会在那里见面?好吧,线 A1,A2 是左边与后墙相交的地方。 A2,A3 线是后墙与地板的交汇处。这两个平面交叉点实际上至少部分可见,这使得绘制线条成为可能。所以在 A2 处,所有三个平面相交,并将其连接到远点 F 给出了第三条边,即左墙与地板相交的地方。

由于线段 A1、B1 和 A2、B2 只是现实世界中彼此垂直传输的版本,因此它们的长度相等。那个交通工具是沿着垂直方向的左墙。现在再次运输它们,这次是在地板平面和左右方向。您可以使用红线来执行此操作,这些红线要么平行,要么在一点相交(在本例中距离很远)。这些红线 A2,A3 和 B2,B3 在现实世界中是平行的,它们的距离仍然是那个瓦片的边长。

现在开始测量一些东西,例如C 和 D 之间的距离。为此,计算交叉比 (F,A3;B3,C),它表示从 A3 到 C 的距离,以从 A3 到 B3 的距离的倍数表示,并使用 F 作为点无穷。对 D 做同样的事情,然后差异将是从 C 到 D 的长度,以从 A3 到 B3 的距离的倍数表示。所以在这个例子中,C 和 D 之间的距离是 4.42 瓦片边长。缩放您的图像以适合该图。

【讨论】:

  • 感谢@MvG,在阅读了您的有用链接后,我想我知道我需要做什么,但我有点困惑我需要做什么才能“将长度从壁平面转移到在地板上的长度相等” - 我已经将线条从瓷砖延伸到墙壁与地板相接的地方,但不知道在那之后我会做什么?
  • @WagglyWonga:我已经扩展了我的答案以添加一个示例。希望这能阐明如何在飞机之间转移长度。
  • 谢谢,现在对我来说很有意义。不过,作为检查,我是否正确地认为我可以测量地板与后墙相接的地板的宽度,并且它应该与瓷砖的宽度相匹配,例如。瓦片宽度是 320 毫米,木板是 177 毫米,瓦片宽度(以像素为单位)为 150,那么以像素为单位的木板宽度应该在 83 左右?
  • @WagglyWonga:那是正确的,如果蓝色垂直线在你的图片中是平行的,如果你正在测量的木板是垂直的正下方瓷砖或红线平行。如果垂直线不平行,则需要使用两条这样的线在地板上的距离,而不是在瓷砖原来所在的地方。如果木板不在瓷砖正下方并且红线不平行,那么您必须使用交叉比率或类似方法来解决透视失真,而不仅仅是计算像素。
  • 对不起@MvG,你能不能告诉我你是怎么到 4.42 的,我自己也弄不明白。
猜你喜欢
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
  • 2013-07-18
  • 2014-04-10
  • 2014-04-18
  • 1970-01-01
  • 2016-08-14
相关资源
最近更新 更多