- 论坛徽章:
- 0
|
本帖最后由 Hadron74 于 2014-08-20 13:32 编辑
回复 51# ssfjhh
我再详细的把计算过程说一下:
根据你的表格:
宽 高 厚
前视图 13.69 23.2
后视图 12.74 23.2
左视图 19.87 5.57
右视图 22.68 6.55
俯视图 18.37 7.65
仰视图 19.16 8.13
对六个面,分别可以定出每个面的长宽比的值的照片值,即:
s=[19.87/5.57,22.68/6.55,18.37/7.65,19.16/8.13,23.2/13.69,23.2/12.74]
>>> s
[3.5673249551166966, 3.4625954198473283, 2.4013071895424836, 2.35670356703567, 1.6946676406135865, 1.8210361067503924]
由于照片的比例各不相同,所以当然会有区别,这正是需要优化求解的原因。这六个面的长宽比,即对应我公式中的,s1~s6;
带入
ln x = 1/6*(ln S1 + lnS2)+1/3*(ln S3 + ln S4) -1/6*(ln S5 + Ln S6)
ln y = 1/6*(ln S1 + lnS2)-1/6*(ln S3 + ln S4) +1/3*(ln S5 + Ln S6)
即可得到长方体的比例;
x = 2.2454727111305153
y = 1.6581850229470443
z = 3.7234092190329156
用这个得到的长方体的比例,(这里已经是严格的长方体,所以长宽比只有三个值了),就可以近一步验证:
第二步的输入就是:
>>> s=[3.72,3.72,2.24,2.24,1.65,1.65]
如果第二步算出的优化长方体比例没有变化,验证我的解是最优解。事实确是这样的:
>>> s=[3.72,3.72,2.24,2.24,1.65,1.65]
>>> ly = 1./6*(log(s[0])+log(s[1])) - 1./6*(log(s[2])+log(s[3]))+1./3*(log(s[4])+log(s[5]))
>>> exp(ly)
1.6535637259737221
>>> lx = 1./6*(log(s[0])+log(s[1])) + 1./3*(log(s[2])+log(s[3]))-1./6*(log(s[4])+log(s[5]))
>>> exp(lx)
2.244838027988568
所以根据六个照片的比例优化的长方体就是我们需要的长方体的比例。
回答你的第一个问题:
怎样确定每个面的缩放比例?由于x,y,z已经定下,每个面的长宽比就确定了,唯一需要确定的是一个大小的参数,不妨设厚(c)为8cm,
则高(a)应为z*c=3.72*8cm=29.76cm; 宽(b)=y*c=1.65*8cm=13.2cm;
以宽-高面为例,对应的两个照片的长宽比是不变的,根据原始数据,高/宽比分别为为23.2/13.69=1.69和23.2/12.74=1.82;
根据这两个比例,你可以选择从留白(照片小于面)到覆盖(照片大于面)的高、宽范围:
留白 覆盖
高 宽 高 宽
第一面 1.69*13.2=22.30 13.2 29.76 29.76/1.69=17.6
第二面 1.82*13.2=24.02 13.2 29.76 29.76/1.82=16.35
根据图片的具体情况确定具体放缩的的尺度,上面只是给出了一个范围。
整个优化过程得到的解,保证了六个面总体的缩放比例变化值最小,但是如果你对图片的优先级程度不同,应对其采用权重处理后的公式,这里就不赘述了。
这是我的想法,抛砖引玉,希望有帮助。 |
|