免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: ssfjhh
打印 上一主题 下一主题

六张照片如何贴在长方体的六个面上? [复制链接]

论坛徽章:
4
金牛座
日期:2013-10-11 16:12:50卯兔
日期:2014-07-31 09:17:19辰龙
日期:2014-08-08 09:28:02狮子座
日期:2014-09-14 20:32:05
41 [报告]
发表于 2014-08-01 16:19 |只看该作者
回复 34# Hadron74


    学渣,后面的计算过程看不懂。 ,都不知道怎样用代码实现。

不过我想到一个验证的方法。

给这个算法输入一组数据A,得到一组输出数据B,再将数据B重新输入这个算法,得到输出数据C
如果B和C相同,则说明按照这个算法可以得到一个“最优解”。

这个验证方法是否科学我也不确定,由文件压缩想到的,一个文件被压缩以后,如果再被压缩,体积基本是不变的,例如:视频文件,再用7z,rar等软件压缩,体积跟视频文件本身的体积基本是一致的。

论坛徽章:
0
42 [报告]
发表于 2014-08-01 17:25 |只看该作者
回复 41# ssfjhh

其实是很简单的数学。第一步,

F(t,s)的构造,就是考虑到图片和面的比例的差异, 这个差异,这里用对数差的平方,其实就是s/t偏离1的程度来度量的。
之所以用它,是因为s/t>1,还有可能s/t<1. 对数差平方,可以很好描述两个比值的的偏离程度。

另外一个好处,就是这里,有关系z=x*y, 所以 ln z = ln x + lny; 使求解更容易。

理论推导用了简单的微积分,和解方程,你检查一下有没有错误,如果这步错了,后面的公式就不对了。我也再查查。

这个优化解根本不用写程序,就拿最后的那两个式子,就能求解x,y 的值,定出长方体。

如你的例子中,我算了一下,可是结果,很不理想;如下

  1. >>> 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]
  2. >>> s
  3. [3.5673249551166966, 3.4625954198473283, 2.4013071895424836, 2.35670356703567, 1.6946676406135865, 1.8210361067503924]

  4. >>> lx = 0.25*(log(s[0])+log(s[1])) + 0.375*(log(s[2])+log(s[3]))-0.125*(log(s[4])+log(s[5]))
  5. >>> from math import exp
  6. >>> x = exp(lx)
  7. >>> x
  8. 3.119198217143163
  9. >>> ly = 0.25*(log(s[0])+log(s[1])) - 0.125*(log(s[2])+log(s[3]))+0.375*(log(s[4])+log(s[5]))
  10. >>> exp(ly)
  11. 2.3033937315879887
  12. >>> exp(lx+ly)
  13. 7.184741620947991
复制代码
这个值,和原来的差异很大。原因可能是,你的数据中的长宽高,明显不满足z=xy;
我不知道实际这样的长方体效果如何?



   

论坛徽章:
0
43 [报告]
发表于 2014-08-01 17:32 |只看该作者
回复 41# ssfjhh


你说的验证方法,我觉得可行。试了一下,好像我的方法,有问题,结果越算越大。我正在找问题所在。

论坛徽章:
4
白羊座
日期:2013-11-05 10:26:09冥斗士
日期:2015-11-17 14:19:55白银圣斗士
日期:2015-11-17 15:13:0815-16赛季CBA联赛之新疆
日期:2016-04-01 09:10:58
44 [报告]
发表于 2014-08-01 17:40 |只看该作者
回复 40# ssfjhh
如果有扭曲出现的话,就不能只是单纯的缩放了,需要找出变形的曲线/区域,然后针对区域去把扭曲的程度反向计算出来去调节的。
类似于,把一个等腰梯形变换成矩形,是需要先确定一个基础长度,然后,上下边按照对应的情况进行反向的拉伸或者压缩。
这只是基本情况,当梯形的斜边是曲线时,要按照曲线反向计算。(简单点考虑可以按照像素在对应的位置进行拉伸或者压缩,不过如果没有对比的基线的话,调节之后也还是容易有变形的。)

论坛徽章:
0
45 [报告]
发表于 2014-08-01 17:58 |只看该作者
回复 41# ssfjhh

发现一个推导,解方程错误,已在原贴中改正。抱歉。

我重新计算了你例子:结果

x = 2.2454727111305153
y = 1.6581850229470443
z = 3.7234092190329156

把这三个值,用你的验证方法,
  1. >>> s=[3.72,3.72,2.24,2.24,1.65,1.65]
  2. >>> 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]))
  3. >>> exp(ly)
  4. 1.6535637259737221
  5. >>> 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]))
  6. >>> exp(lx)
  7. 2.244838027988568
复制代码
结果看起来还不错。呵呵!
你也试试。

论坛徽章:
4
金牛座
日期:2013-10-11 16:12:50卯兔
日期:2014-07-31 09:17:19辰龙
日期:2014-08-08 09:28:02狮子座
日期:2014-09-14 20:32:05
46 [报告]
发表于 2014-08-02 07:58 |只看该作者
本帖最后由 ssfjhh 于 2014-08-02 08:03 编辑

回复 44# icymirror


    我在前边楼层有写明,图片的边缘可以超出一点也可以未将长方体的一个面完全填满,我的最终目的是“让人看起来尽可能的完美”,拍照拍出来的照片怎么可能是正投影?但现在的外观设计专利就要求尺寸要一致,没办法只能改图片的尺寸,现在靠人工改尺寸,但是我实在不想再做这个dirty的工作了,就想通过程序来实现。

扭曲图片虽然能够做到一致,但是考虑到外观专利的图片上可能有较多的细节,扭曲以后反倒容易看出不真实。

论坛徽章:
0
47 [报告]
发表于 2014-08-18 18:32 |只看该作者
回复 46# ssfjhh


楼主,这个问题有最新进展吗?

论坛徽章:
4
金牛座
日期:2013-10-11 16:12:50卯兔
日期:2014-07-31 09:17:19辰龙
日期:2014-08-08 09:28:02狮子座
日期:2014-09-14 20:32:05
48 [报告]
发表于 2014-08-18 21:21 |只看该作者
本帖最后由 ssfjhh 于 2014-08-19 16:50 编辑

回复 47# Hadron74


    最近工作比较忙,还没有进展,有进展一定告诉你。

论坛徽章:
0
49 [报告]
发表于 2014-08-19 16:36 |只看该作者
这个问题有意思
如果每张照片的宽高比不能变的话,尺寸凑巧才能拼成长方体吧?
那么每张照片一个数组宽,高),那就不关照片啥事了,六个数组匹配...........
要进行数组匹配,正好的话不用调整比例
然后呢,考虑以哪个基准逐步调整各数组宽高比例

主要是这个算法不会收敛,要么一圈下来长方体越来越大,要么越来越小.............

论坛徽章:
4
金牛座
日期:2013-10-11 16:12:50卯兔
日期:2014-07-31 09:17:19辰龙
日期:2014-08-08 09:28:02狮子座
日期:2014-09-14 20:32:05
50 [报告]
发表于 2014-08-19 16:53 |只看该作者
回复 49# stonemason


    确实如你所说,正好的话,不用调整比例。

我自己也有一个很初级的算法,最终尺寸确实越来越大,这肯定不是我想要的。

Hadron74给出的算法,最近也没有空实现。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP