1、双眼效应
我们通过双眼观察世界最大的好处就是可以重构三维空间。虽然我们每只眼睛看到的画面都是二维的,但是由于两只眼睛所处位置不同,看到的图像也有所差异,大脑根据经验以及这小小的差异(双眼离被观察物体越远,差异越小)瞬间就可以重构周围的三维世界!这不是人类特有的技能,而几乎是所有捕食动物都具备的技能(由于捕食动物需要追逐猎物,一般双眼都生长在头部的前方,利用双眼效应就可以确定猎物的空间位置了;而被捕食动物需要躲避天敌,一般双眼生长在头部的两侧,即便不转动脑袋也可以观察周围的一切,虽然这样双眼无法定位天敌空间位置,但它们更需要的是提前观察到天敌的靠近;此外,在生物链中,捕食者和被捕食者的角色也不是一成不变的,所以以上结论只适用于大多数情况,也有例外)。这么重要的技能,在智能化越来越高的现代显得尤为重要。比如,三维重建,立体电影和今天要说的三维立体画等,都是对双眼效应的利用。
实际上双耳也有类似的功能。不多说了,好像扯得有点远了。
2、三维立体画
2.1、闲话
第一次看到三维立体画是在90年代的某个周末,记得花了近一个小时才算基本掌握了一种观看方法(平行法)。那时才十岁左右,感觉无比地神奇,无比的兴奋。
前段时间在维基百科上玩耍时,看到此词条,又勾起了童年的回忆……
于是,有了此文。
2.2、三维立体画的原理
引子
利用双眼效应在二维图像上构建三维物体,方法不同就出现了不同的形式的结果:红蓝立体电影,左右立体电影,三维立体画等。
实际上,三维立体画只记录了图像上每点的空间高度。
其基本原理很简单,仅需要初中几何知识就够用了,下面以平行观测法为例作简要介绍。如下图(俯视,即一行像素)所示,$ABCDEFG$是由7个点组成的等距点列,当双眼定焦在图中的“视觉平面”上时,$AB$两点将重合组成一个$H$点,$BC$两点将组成一个I点……
根据相似三角形的性质(或平行线截线段性质),可知$HIJKLM$这6个点在共线,即它们到图像所在平面的距离相等。
如果将$EFG$三点向左平移相同的一段距离,则$DE$两点组成的像$K$点将会向双眼靠近,给人的感觉是$K$点从视觉平面上凸起来了,而且移动的距离越大凸起得就越多,但移动距离不能超过点列间距的一半,见下图:
虽然这时$LM$两点也向左平移了,但它们并没凸起或凹下,而是仍在视觉平面。
如果只平移$E$点,而不移动$FG$两点,则不是我们想要的效果了。如下图所示:
原理
根据上面的介绍, 选择$n+1$个颜色一样的点列${{\left\{ {{P}_{1i}} \right\}}_{n+1}}$,以相同的距离$d$水平排列在纸上,每点占一个像素位置。再在每点右侧一个像素的位置设置另一种相同颜色的点列${{\left\{ {{P}_{2i}} \right\}}_{n+1}}$,直至${{\left\{ {{P}_{di}} \right\}}_{n+1}}$。这样一行像素便设置完了,实际上还可以理解为:选择$d$个颜色不同的一组点,然后将其复制$n$份,依次排列在右侧。
之后每一行像素的设置和上面的相同,这样就得到了一张“母板”图。实际上最简单的方法就是:随机生成一个若干行$d$列的图像,将其复制$n$份,依次排列在右侧,得到一张若干行$\left( n+1 \right)d$列的图像。
把图像想像成$XOY$平面,找一个三维物体的表面位置数据,计算出在点$\left( x,y \right)$处物体的最大高度$z$,以此推算出图像中对应的点列需要如何平移。
另外,需要注意两点:
- 对应的点及其所在点列中右侧的点都要平移;
- 由于是向左平移,所以要先处理完左侧的像素后再处理它右侧的;
- 在编写程序时,很多方面是可以删简的。比如母板,并不需要将每一个像素复制出${n+1}$份。详见程序。
2.3、三维立体画的制作
作为 Mathematica 的爱好者,这里还是用此神器。程序和所需素材已经放在 GitHub 中了,欢迎大家一起改进它,或点此直接下载。
2.4、一些小作品(单击放大)
随机点三维立体画
图像三维立体画
随机点动态三维立体画
2016-04-14
文字版
方法类似不多介绍,下面是代码和结果:
Remove["Global`*"]; width = 12;(*单幅宽度*)nw = 6;(*单幅列数*)height = \
50;(*单幅高度*)nh = 1;(*单幅行数*)hxyData =
ImageData[
ColorNegate@
Binarize[
Rasterize["闲", RasterSize -> height,
ImageSize -> {width nw, height nh},
Background -> White]]];(*在r行c列处点的高度函数*)pm0 =
Range[width];(*初始化点的位置信息*)r = nh height;
Dynamic[Row[{ProgressIndicator[r/nh/height], "\t已完成:",
Floor[100 r/nh/height], "%"}]](*显示进度*) randomPoint =
RandomChoice[
CharacterRange["A", "Z"], {height nh,
width}];(*随机生成单幅母板*)picString =
Table[If[c == 1, pm = pm0];
randomPoint[[Mod[r, height, 1],
pm[[Mod[c, width, 1]]] =
pm[[Mod[c + hxyData[[r, c]], width, 1]]]]], {r, nh height}, {c,
nw width}]; picString =
ArrayFlatten[{{randomPoint, picString}}];(*在字符块左侧加一列*)blankStr =
StringJoin[
ConstantArray[" ",
Floor[width (nw + 1)/2 - width/2]]];(*空白字符串*)firstLine =
blankStr <> "O" <> StringJoin[ConstantArray[" ", width - 1]] <> "O" <>
blankStr <> "\n";(*首行字符串*)firstLine <>
StringRiffle[picString, "\n", ""](*文字三维立体画*)
现在你也可以这样加密了
O O
WBBPKFAWDDDHWBBPKFAWDDDHWBBPKFWDDDDHWBBPKFWDDDDHWBBPKFWDDDDHWBBPKFWDDDDHWBBPKFWDDDDH
NZFUIGRASUMVNZFUIGRASUMVNZFUIGRSUMVVNZFUIGRSUMVVNZFUIGRSUMVVNZFUIGRSUMVVNZFUIGRSUMVV
CWFGDXDJZOXJCWFGDXDJZOXJCWFGDXDJOXJCWWFGDXDJOXJCWWFGDXDJOXJCWWFGDXJOOXJCWWFGDXJOOXJC
ZKGLCGOUYOXYZKGLCGOUYOXYZKGLCGOUYXYZKGGLCGUYXYZKGGLCGUYXYZKGGLCGUYXYZKGGGLCGUYXYZKGG
IDWICBBTKPGGIDWICBBTKPGGIDWICBBTKGGIDWWICBTKGGIDWWICBTKGGIDWWICBTKGGIDWWWICBTKGGIDWW
LSAQRLBTKRMJLSAQRLBTKRMJLSAQRLBTKRJLSAAQRLBKRRJLSAAQRLBKRRJLSAAQRLKRRJJLSAAQRLKRRJJL
YQKNAYOSEBWUYQKNAYOSEBWUYQKNAYOSEBUYQKKNAYOSEBUYQKKNAYOSEBUYQKKNAYSEEBUYQKKNAYSEEBUY
HMRLDMNPFBHNHMRLDMNPFBHNHMLDDMNPFBHHMMLDDMNPFBHHMMLDDMNPFBHHMMLDDMPFFBHHMMLDDMPFFBHH
YJSJOPKKNXEMYJSJOPKKNXEMYJJOPKKKNXEMYJJOPKKKNXEMYJJOPKKKNXEMYJJOPKKNNXEMYJJOPKKNNXEM
CXKPOSJBDJIUCXKPOSJBDJIUCXPOSJJBDJIUCXPOSJJBDJUCXPOOSJJBDJUCXPOOSJBDDJUCXPOOSJBDDJUC
LSLFWVFBXWBELSLFWVFBXWBELSFWVFFBXWBELSFWVFFBXWELSFFWVFFBXWELSFFWVFBXXWELSFFWVFBXXWEL
YVXTFCSONSHHYVXTFCSONSHHYVTFCSSONSHHYVTFCSSONSHYVVTFCSSONSHYVVTFCSONNSHYVVTFCSONNSHY
OQOQFXNZMQCUOQOQFXNZMQCUOQQFXNNZMQCUOQQFXNNZMQUOQQQFXNNZMQUOQQQFXNZMMQUOQQQFXNZMMQUO
XDGECFZVMBMOXDGECFZVMBMOXDECFZZVMBMOXDECFZZVMBOXDDECFZZVMBOXDDECFZVMMBOXDDECFZVMMBOX
FTFRBCBWHHYAFTFRBCBWHHYAFTRBCBBWHHYAFTRBCBBWHHYFTTRBCBBWHHYFTTRBCBWHHHYFTTRBCBWHHHYF
SAKYMGMTKMPGSAKYMGMTKMPGSAYMGMMTKMPGSAYMGMMTKMPSAAYMGMMTKMSAAAYMGMTKKMSAAAYMGMTKKMSA
FKWGKVDKBMUPFKWGKVDKBMUPFKGKVDDKBUUPFKGKVDDKBUUFKKGKVDDKBUFKKGKKVDKBBUFKKGKKVDKBBUFK
DFRRMRMQRTQADFRRMRMQRTQADFRMRMMQRTADFRMRMMQRTADFRMRMMQRTADFRMRMMMQTAADFRMRMMMQTAADFR
WFLGBOOUAYHLWFLGBOOUAYHLWFGBOOOUAYHLWFGBOOOAYHLWFFGBOOOAYHLWFFGBOOAYYHLWFFGBOOAYYHLW
UBLYSALPXDZNUBLYSALPXDZNUBYSALLPXDZNUBYSALLXDZNUBBYSALLXDZNUBBYSALXDDZNUBBYSALXDDZNU
PWZNHPEKWHKAPWZNHPEKWHKAPWNHPEEKWHKAPWNHPEKWHKAPWWNHPEKWHKAPWWNHPEWHHKAPWWNHPEWHHKAP
GOXBFQAJCCEBGOXBFQAJCCEBGOBFQAAJCCEBGOBFQAJCCEBGOOBFQAJCCEBGOOBFQACCCEBGOOBFQACCCEBG
RIPCWBAWGCWFRIPCWBAWGCWFRICWBAAWGCWFRICWBAWGCCWRICWWBAWGCCWRICWWBAGCCCWRICWWBAGCCCWR
HGTPLJEWDBYFHGTPLJEWDBYFHGPLJEEWDBYFHGPLJEWDBBYHGGLJEWWDBBYHGGLJEWDBBBYHGGLJEWDBBBYH
ANNJFNGCLWMSANNJFNGCLWMSANJFNGGCLWMSANJFGGCCLWMANNJFGCCLLWMANNJFGCLLLWMANNJFGCLLLWMA
XVHQBYEYPGPVXVHQBYEYPGPVXVQBYEEYPGPVXVQYEEEYPGPXVVQYEEYPGPPXVVQYEEPGGPPXVVQYEEPGGPPX
LCUMEQIFBJMCLCUMEQIFBJMCLCMEQIIFBJMCLCEQIIIFBJMLCCEQIIIBJMLCCCEQIIBJJMLCCCEQIIBJJMLC
DOLGWFHMULIXDOLGWFHMULIXDOGWFHHMULIXDOWFFHHMULIDOOWFFHHMLIDOOWWFFHMLLIDOOWWFFHMLLIDO
RQYWXKGTJGGQRQYWXKGTJGGQRQWXKGGTJGGQRWXXKGGTJGQRWWXXKGGTJQRWWXXXKGTJJQRWWXXXKGTJJQRW
EHQYCARIYQSBEHQYCARIYQSBEHYCARRIYQSBEYCCARRIYQBEYYCCARRIYBEYYCCCARIYYBEYYCCCARIYYBEY
RYOYISEZUBCZRYOYISEZUBCZRYYISEEZUBCRYYYISEEZUBRYYYYISEEZUBYYYYYISEZUUBYYYYYISEZUUBYY
VBCSXWUZKCRHVBCSXWUZKCRHVBSXWUUZKCHVBBSXWUUZKCVBBBSXWUUZKCVBBSSXWUZKKCVBBSSXWUZKKCVB
KLMUOGRRSLJXKLMUOGRRSLJXKLUOGRRRSJJXKLUOGRRRSJXKLLUOGRRRSJXKLLUOGRRSSJXKLLUOGRRSSJXK
TGDHVWLTJODSTGDHVWLTJODSTGHVWLLJOODSTGHVWLLJOOSTGGHVWLLJOOSTGGHVWLJOOOSTGGHVWLJOOOST
HAEANJLVPWAQHAEANJLVPWAQHAANJLLVPWAQHAANJLLVPWQHAAANJLLVPWQHAAANJLVPPWQHAAANJLVPPWQH
GCRGEZEEIPVGGCRGEZEEIPVGGCGEZEEEIPVGGCGEZEEEIPGGCCGEZEEEIPGGCCGEZEEIIPGGCCGEZEEIIPGG
OKFDROVSOFALOKFDROVSOFALOKDROVVSOFALOKDROVVSOFLOKKDROVVSOLOOKKDROVSOOLOOKKDROVSOOLOO
LFSDRNGWTDBELFSDRNGWTDBELFDRNGGWTDBELFDRNGGWTDELLFDRNGGWTDELFDRNGGWTTDELFDRNGGWTTDEL
CRFUPDUCXQJGCRFUPDUCXQJGCRUPDUUCXQJGCRUPDUUCXQGCCRUPDUUCXQGCRUPDUUCXXQGCRUPDUUCXXQGC
LTHVSZEGIXFCLTHVSZEGIXFCLTVSZEEGIXFCLTVSZEEGIXFCLTVSZEEGIXFCLTVZEEGIIXFCLTVZEEGIIXFC
YPFSTKUBKRLZYPFSTKUBKRLZYPSTKKUBKRLZYPSTKKUBKRLZYPSTKKUBKRLZYPSTKUUBKRLZYPSTKUUBKRLZ
SLZJZOLRLSMKSLZJZOLRLSMKSLZJZOLRLSMKSLZJZOLRLSMKSLZJZOLRLSMKSLZJZOLRLSMKSLZJZOLRLSMK
ZZKRVAHAQLCUZZKRVAHAQLCUZZKRVAHAQLCUZZKRVAHAQLCUZZKRVAHAQLCUZZKRVAHAQLCUZZKRVAHAQLCU
NUBMRXWNMYJWNUBMRXWNMYJWNUBMRXWNMYJWNUBMRXWNMYJWNUBMRXWNMYJWNUBMRXWNMYJWNUBMRXWNMYJW
BZBQNZKLPGFSBZBQNZKLPGFSBZBQNZKLPGFSBZBQNZKLPGFSBZBQNZKLPGFSBZBQNZKLPGFSBZBQNZKLPGFS
OZNFHRVKXCYSOZNFHRVKXCYSOZNFHRVKXCYSOZNFHRVKXCYSOZNFHRVKXCYSOZNFHRVKXCYSOZNFHRVKXCYS
VHBBZSVPJWGOVHBBZSVPJWGOVHBBZSVPJWGOVHBBZSVPJWGOVHBBZSVPJWGOVHBBZSVPJWGOVHBBZSVPJWGO
IDTSKSEJOTCEIDTSKSEJOTCEIDTSKSEJOTCEIDTSKSEJOTCEIDTSKSEJOTCEIDTSKSEJOTCEIDTSKSEJOTCE
LTJXMMGVMIRHLTJXMMGVMIRHLTJXMMGVMIRHLTJXMMGVMIRHLTJXMMGVMIRHLTJXMMGVMIRHLTJXMMGVMIRH
XGTNEIGETZKTXGTNEIGETZKTXGTNEIGETZKTXGTNEIGETZKTXGTNEIGETZKTXGTNEIGETZKTXGTNEIGETZKT