分享

为什么广角可以拍大长腿,透视关系为什么会显著增强?

 猫猫的想法 2019-05-17
更正:原文在根据视角计算视觉长度时存在错误,应将此片段与相机的距离考虑在内,正文已修改

众所周知,人眼睛看东西有近大远小的特点,相机镜头也是一样。而其原因在于,同样的物体,处在距人眼不同距离的情况下,其在人视网膜上形成的视角是不一样的;而反过来,大小差距很大的物体,由于其距离的差距,可能在人看来有相似的视角,当人眼无法分辨其距离时,看起来就认为有相似的大小,比如太阳和月亮。

而对于人像拍摄,大家都知道的一个较常见的拍长腿技巧就是:广角镜头,低机位拍摄。这一点实际就是透视畸变的运用。

[原创]怎样拍出大长腿---人体全身像透视畸变的定量计算

 如上图所示,假设人体的高度为h,我们将人体分成N个等份,每份高度为Δh=h/N,相机与人体的水平距离为d,假设相机们于地面上,将人体上从下往上数第nΔh在相机看来的视角为θ[原创]怎样拍出大长腿---人体全身像透视畸变的定量计算 

当我们划分地足够细,即上述角度足够小时,对于某一个Δh片段,可以等效为下面的情形:

[原创]怎样拍出大长腿---人体全身像透视畸变的定量计算

即可以认为相机视线与此片段垂直,此时,相机看到的此片段的长度等于相机到此片段的直线距离与2*tanθ/2的乘积。由此,当我们确实了被拍摄人体的身高和位置以及相机的位置,就可以算出人体各部位在相机中形成的视角,及相对长度,进而便可得到我们需要的信息,比较腿长占身高的比例等。 

在此,我们假定人体身高为1.6m,拍摄距离从0.2m变化到1m,机位高度由0.016m到0.8m,分割份数为100,使用matlab计算,代码如下:

height=1.60;       %模特高度

distance=0.2:0.01:1;   %拍摄距离

cam_h=0:0.016:height/2;  %机位高度

n=100;          %划分精度

num_distance=length(distance);

num_cam_h=length(cam_h);

total_aov=zeros(num_distance,num_cam_h);   %总视角

total_height=zeros(num_distance,num_cam_h); %总相对高度

leg_rate=zeros(num_distance,num_cam_h);   %腿长所占比例

for i=1:num_distance

  for j=1:num_cam_h

    centre=round(cam_h(j)/height*100);     %机位对应小片

    aov1=zeros(1,centre);

    for k=1:centre          %机位以下

      aov1(k)=atan((centre-k+1)*height/n/distance(i))-atan((centre-k)*height/n/distance(i));

    end

    aov2=zeros(1,n-centre);    %机位以上

    for k=1:n-centre

      aov2(k)=atan(k*height/n/distance(i))-atan((k-1)*height/n/distance(i));

    end

    total_aov(i,j)=sum(aov1)+sum(aov2);

    total_height(i,j)=(sum(tan(aov1/2).*sqrt(distance(i)^2+((centre-1:-1:0)/100*height).^2))+...

sum(tan(aov2/2).*sqrt(distance(i)^2+((1:n-centre)/100*height).^2)))/...

(tan(aov2(length(aov2))/2)*sqrt(distance(i)^2+((n-centre)/100*height)^2))*height/n;

    leg_rate(i,j)=(1+((sum(tan(aov1/2).*sqrt(distance(i)^2+((centre-1:-1:0)/100*height).^2))+...

sum(tan(aov2(1:n/2-centre)/2).*sqrt(distance(i)^2+((1:n/2-centre)/100*height).^2)))/...

sum(tan(aov2(n/2-centre+1:end)/2).*sqrt(distance(i)^2+((n/2-centre+1:n- centre)/100*height).^2)))^(-1))^(-1);

  end

end

[X,Y]=meshgrid(distance,cam_h);

mesh(X,Y,total_height');

xlabel('拍摄距离(m)');

ylabel('机位高度(m)');

zlabel('相对视觉身高(以最远点为基准)');

figure;

mesh(X,Y,leg_rate');

xlabel('拍摄距离(m)');

ylabel('机位高度(m)');

zlabel('腿长(正常为0.5)');

我们首先关心腿长在整个人体高度中所占的比例。这里我们假定正常情况下,腿长占比为0.5,通过上面的计算,得到下图:

[原创]怎样拍出大长腿---人体全身像透视畸变的定量计算


另外我们关心在照片中,整个人看起来的高度。需要知道,由于在照片中可能无法明确拍摄距离,所以所能看到的都是相对值,所以这里以离相机最远的一个片段(即头顶)为基准,即认为该片段的尺寸未发生变化。得到的结果如下:

[原创]怎样拍出大长腿---人体全身像透视畸变的定量计算

根据上面的结果我们很明显地看到,距离越低,机位越低,得到的结果是腿长占比越大,相对身高越高。然而,在能拍摄到全身的前提下,最低和最近拍摄距离通常限制于相机的视角,因此广角镜头在方面具有优势。另一方面可以看到,当拍摄距离过近或过低时,畸变会过于严重,这也将影响照片的效果。因此实际拍摄时还是要根据实际情况,灵活利用这个技巧。

ps:博主为摄影初学者,文中难免有谬误和考虑不周全的地方,还请大家指正。。[原创]怎样拍出大长腿---人体全身像透视畸变的定量计算

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多