图片中的物体底部分析

148 阅读1分钟

问题

有时候我们会遇到一个没有拍歪的商品图需要摆正,有时候我们需要获取物体的底部,方便特效的贴合。

求解

物体底部数据获取

底部数据分析(寻找物体的底部水平线)

数学基础:线性规划

原始数学模型:

已知 点集 P(x,y) 求直线 L,使得集合S 所有的点都在直线L之上,且点到直线的距离之和最短

MinmizeΣd(L,Pi)Minmize Σ d(L,Pi)

Subject to AX<BAX<B

假定 L为 y=kx+by = kx + b(x = m 型直线不满足期望)

d(L,Pi)=yikxib/(1+k2)d(L,Pi) = |yi-k*xi - b|/\sqrt{(1+k^2)}

简化数学模型:

1、所有已知点都在直线 L之上 → kxi+b>yik*xi + b > yi ->yikxib=kxi+byi|yi-k*xi-b| = k*xi+b-yi (浏览器坐标系y 轴向下)

2、点到直线的距离之和最短 调整为 点到直线的距离在 y 轴的投影最短 → 移除 1/(1+k^2)^0.5 (先简化模型,使问题方便求解再看结果是否满足期望)

Minimize Σd(L,Pi)=ΣyikxibΣ d(L,Pi) = Σ |yi - k*xi - b| = n(kAx+bAy)n * (k*Ax + b - Ay) → Minimize kAx+bAyk*Ax + b -Ay (Ay 表示 y 的平均值, Ax 表示 x 的平均值)

Subject to AX<BAX<B (kxi+b>yikxib<yi(k*xi + b > yi → -k * xi - b < yi);

简化后的数学模型变成了一个 k、b 为变量,底部数据点为约束条件的 LP(线性规划) 问题,求解非常成熟的 LP 问题得到 k 、b, 得到物体的底部水平线。

总结

一般来讲,物体的底部是一个面,现在所求的底部水平线是物体的底部水平面和屏幕的交线,虽然没有完全解决 通过一张照片求解 物体在3维空间的水平面问题(确定一个平面需要两条直线),但这个底线数据对于矫正拍歪的商品,或者特效的贴合很有帮助。

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 1 天