ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 239|回复: 7

[原创] 照片建模算法硬核分析

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-8-1 10:52 | 显示全部楼层 |阅读模式
      首先,算法核心是每条边的透视中心点两端长度比,正好是两个端点离观察者的距离比。这个已经做过严格验证,如有需要今后会写出几何证明过程,暂不表。

      其次,分析过程我会写得很详细,但实际操作时,我们需要做的,就是标4个点位置,运行一下过程,非常简单。

接下来是分析过程:
      如何确定透视图中一条边的透视中心点,这个需要用到我在图形攻略中提到的方法,通过远点与对角线交叉点进行确定,所以此帖的分析前提是,分析对象在三维空间中必须是个矩形。当然,如果已经知道某条边中心点的情况下,不受上述条件约束(比如一排柱子,点数量能够确认中心位置)。
      我先用一张简单的长方体图片为例进行实战分析。
      1、在图片中心点位置放置一个点标,作为观察者位置(点标名称为Camera),这个位置是自动获取的;
      2、在图片中长方体的某一个面上放置4个点标,注意每个点标是有名称的(1-4),按连续方向排列(可顺时针也可逆时针,但不可交错);
      3、程序获取四个点标在工作表中的显示位置信息(left,top),left相当于X坐标,top为Y坐标,后续要计算纵深,所以需要一个Z坐标,暂时先设为0。
      每个点为一个一维数组(x,y,z),参考图片。
      这里注意一下,top数值与一般平面直角坐标系中的Y坐标是有区别的,top越往下越大,Y越往下越小,在三维演示中是要考虑的,但不影响此帖的分析。
获取初始坐标值.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-1 11:13 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
4、程序根据4个点标的坐标信息算出:两个远点坐标、对角线交点坐标、每条边上的透视中心点坐标;

5、设定投影屏幕的距离为P1点的Z距离,也即假设点P1贴在屏幕上,这样只要分析其他3点坐标就行,设P1点的Z坐标为1(这只是一个比例100%,后面会深入分析);
6、根据每条边上两个端点的坐标值,以及该边透视中心点的坐标值,可以算出两个端点离观察者(Camera)的距离比(注意这里只是比例)
注意:P1的Z坐标设定为1,先算出P2的Z坐标(假设0.8),接下来算P2与P3的距离比时,需要考虑P2已知为0.8,P3应是在0.8基础上算出的比例。

算出Z轴比例.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-1 11:15 | 显示全部楼层
7、Z比例算出后,XY坐标还要进行反透视换算,这个概念需要说明一下,我们看到的透视图,可以看作是一个点光源将物体各个点投射到屏幕的图像,它相对于观察者是发散状态的,假设有一束平行光,和视线相同方向投射到屏幕的话,看到的才是真正的XY坐标,所以我们需要逆向换算。

我在3D透视转2D的帖子里面,有一个分析,原理相同,看了就能明白如何换算,不详述。

算出XY真实值.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-1 11:19 | 显示全部楼层
8、获得真实XY坐标值后,接下来计算Z轴的真实坐标,这里需要使用勾股定理进行计算,简单来说,矩形每个角为直角,那么P1P2边的平方,加上P2P3边的平方,应该等于P1P3边的平方,计算边长也使用勾股定理比例P1P2边:SQRT((P1X-P2X)^2+(P1Y-P2Y)^2+(P1Z-P2Z)^2)

假设P1点的Z坐标值为L,则其余各点为L*相应距离比,通过公式可算出L的值,推演进程略,只说明原理。
再把L的值乘以各点的Z比例赋值给Z轴,得到Z轴的真实坐标(相对于工作表尺寸单位)

此楼放出附件,里面有分析过程及结果的真实值,供参考。
最终结果.png

硬核分析.zip

63.15 KB, 下载次数: 18

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-1 11:21 | 显示全部楼层
9、分析处理过程完成,后面可以进行验证(因为这个图是我从照片上拓下来的,实物信息有)

实物信息参考:长400mm*短230mm*高250mm
根据附件里面点坐标算出的P1P2边长和P2P3边长分别为181.305153012059和335.380119593718,实物P1P2边长和P2P3边长分别为230和400,得出两条分析边与实物边的比例分别为:0.788283273965476和0.838450298984294,理想状态下该比例应该是一致的,这里的偏差比较大,换算出真实尺寸差了10mm以上,虽然手动添加的点标位置不会很精确,但这个程度的偏差还是有问题的。
明天放出差异原因及解决方法。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-3 22:03 | 显示全部楼层
要查找差异大的原因,首先检讨一下生成坐标数据的过程:

1、根据四边形的4个角点位置,算出各点离观察者的Z轴距离比,只和标的四个点位置有关,手动标记虽不精确,但不至于使结果差10mm以上;
2、根据各点Z轴比例,通过逆透视计算来获取各点的真实XY坐标,如果仔细看过代码的话,可以发现Camera坐标是参与计算的,因为各点透视位置是基于观察者发散,要使它恢复不发散状态,就必须通过观察者位置,这个影响会比较大;
3、原来的简图是从照片上拓下,由于只保留了关键对象,所以简图的中心点和原图中心点位置不同,需要找到原图中心点在简图中的相应位置;
4、幸好我还有原图照片,所以也不需要在简图上重新标记了,直接贴入原图,在原图上进行分析,这次比较准确,误差在可接受范围之内(约1mm),
    附件供参考。
    注:照片上的东西比较杂乱,请不要在意这些细节。

结果验证.PNG

硬核分析.zip

303.3 KB, 下载次数: 7

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-3 22:11 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
差异的原因及解决,正在审核中,先进行总结:
通过四边形分析各点的坐标非常简单,但有几个限制精度的因素:
1、手动添加点标时尽量准确,必要时可画辅助线,以及通过远点坐标进行几何纠正(微调整);
2、观察者位置(原图中心点)非常重要,尽量不要使用裁剪过的图片;
3、如果在一个图片上先确定出三维空间三个方向的远点坐标,那对后续多个面分析时会很有帮助
此附件是我从一个照片上逆向出的简单模型,并通过三维演示呈现,供参考。

照片建模结果演示1.zip

1.27 MB, 下载次数: 11

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-23 15:47 | 显示全部楼层
上述照片逆向建模方法有以下局限:
1、只能计算有矩形的面,不规则面虽然有些可以扩展成矩形面,但计算复杂;
2、不连续的面虽然可以各个计算,但由于受标点精度限制,得出的结果会有差异,特别是细小部分;
3、由于计算方法的原因,点标位置的准确程度对结果的影响较大
所以上述方法只适用于手头只有一张照片的情况,实用性不大。
但如果我们要把一些较小的物体逆向成模型,就可以设置一个模型拓台,很多尺寸都可以提前设定,通过位移或旋转的方式,拍摄两张照片,就可以一次性算出正面能看到的所有点的真实三维坐标。方法已经通过思维实验整理得差不多了,后面会用实物进行验证,最终会把过程全部发出来。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-9-21 11:27 , Processed in 0.040312 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表