zoukankan      html  css  js  c++  java
  • unity3d 几种镜头畸变

    1.Fisheye distortion  鱼眼镜头

    解释来自百度百科:鱼眼镜头是一种焦距为16mm或更短的并且视角接近或等于180°。 它是一种极端的广角镜头,“鱼眼镜头”是它的俗称。为使镜头达到最大的摄影视角,这种摄影镜头的前镜片直径很短且呈抛物状向镜头前部凸出,与鱼的眼睛颇为相似,“鱼眼镜头”因此而得名。

    关键代码如下:

    [cpp] view plain copy
     
    1. float2 fisheye(float2 uv)  
    2. {  
    3. float2  n_uv = (uv - 0.5) * 2.0;  
    4.   
    5.     float2 r_uv;  
    6.     r_uv.x = (1 - n_uv.y * n_uv.y) * _Intensity_y * (n_uv.x);  
    7.     r_uv.y = (1 - n_uv.x * n_uv.x) * _Intensity_x * (n_uv.y);  
    8.     return(uv* _scale - r_uv);  
    9. }  



    效果是这样的:

    2.Barrel Distortion  桶形畸变

    桶形畸变(Barrel Distortion),又称桶形失真,是由镜头中透镜物理性能以及镜片组结构引起的成像画面呈桶形膨胀状的失真现象。我们在使用广角镜头或使用变焦镜头的广角端时,最容易察觉桶形失真现象。当画面中有直线(尤其是靠近相框边缘的直线)的时候,桶形失真最容易被察觉。普通消费级数码相机的桶形失真率通常为1%。

    关键代码如下:

    [cpp] view plain copy
     
    1. float2 barrel(float2 uv)  
    2.         {   
    3.   
    4.             float2 h = uv.xy - float2(0.5, 0.5);  
    5.             float r2 = h.x * h.x + h.y * h.y;  
    6.             float f = 1.0 + r2 * (_distortion + _cubicDistortion * sqrt(r2));  
    7.   
    8.             return f * _scale * h + 0.5;  
    9.         }  



    效果是这样的:

    3.Pincushion Distortion  枕形畸变

    在正确的拍摄条件下,矩形物体的像仍应呈矩形。但有的镜头由于有缺陷,将矩形物体拍成四边向内凹进形如枕头的影像,称镜头的这种像差为枕形畸变。相反如拍成四边突出的影像即称桶形畸变。

    枕形畸变又称正畸变,是由于视场边缘部分的放大率高于中心部分放大率所引起,即倾斜角度大的光线的放大率比倾斜角度小的光线的放大率高。

    把桶形畸变参数修改即为枕形畸变

    效果是这样的:

    全部代码已上传至GitHub

                           ------by wolf96    http://blog.csdn.net/wolf96

  • 相关阅读:
    开源围棋A.I. FoolGo
    再写围棋的MC模拟
    棋串的数据结构
    一种Lua到C的封装
    用vim写ios程序
    一种C函数到Lua的封装
    Unix命令
    RSA java rsa加密,解密,生成密钥对工具类
    UOS 开启远程登录
    UOS 设置 java 程序开机启动
  • 原文地址:https://www.cnblogs.com/czaoth/p/6612964.html
Copyright © 2011-2022 走看看