1. 先把鱼眼这件事的底层逻辑捋顺
第一次拿鱼眼镜头拍东西的人,十有八九会遇到两个反应:一是"哇,怎么这么广",二是"这玩意儿的边怎么是弯的、还一圈黑"。鱼眼镜头不是"超广角的加强版"这么简单,它跟我们平时用的直线投影镜头是两套完全不同的成像哲学。直线投影镜头追求的是"把直线拍成直线",代价是视角越大,边缘被拉伸得越离谱,做到 120° 以上基本就没法看了;鱼眼镜头反其道而行,主动接受"直线会弯",换来的是把 180° 甚至 220° 的世界塞进一张画面里。所以选鱼眼之前,你先要问自己一个问题:我要的是"直线还是直的",还是"我要尽可能多的信息"?这个问题的答案,直接决定了你该买哪种鱼眼、该怎么用它。
这篇文章我打算把常规鱼眼镜头的类型体系梳理清楚,从成像圈、投影模型、像场适配、结构形态几个维度切开,再落到具体能干什么活上——全景拼接、虚拟看房、运动跟拍、工业内窥、机器视觉标定、全天候云图观测、创意人像,这些场景对鱼眼的要求完全不一样。中间会把视角怎么算、成像圈怎么匹配、拼接张数怎么定、像素密度够不够这些实打实的参数推导写出来,最后给一套我自己跑通的拍摄加后期流程和一张问题排查表。不管你是刚上手想买第一支鱼眼,还是手上已经有一支但一直没玩明白,或者做机器视觉需要选工业鱼眼,下面这些内容应该都能直接拿去用。
先说一句可能有点反直觉的话:鱼眼镜头的"类型"最关键的划分依据不是焦距,而是成像圈和投影模型。焦距相同的两支鱼眼,成像圈不一样、投影方式不一样,拍出来的画面结构可以差出十万八千里。市面上很多标称"8mm 鱼眼"的镜头,在全画幅机身上是圆形鱼眼,装到 APS-C 上就变成了接近对角线鱼眼,同一支镜头两种玩法,这个后面会细讲。
2. 常规鱼眼镜头的四种分类法
2.1 按成像圈大小分:圆形、对角线、准鱼眼
这是最实用、也是买镜头时最先要看的一刀。判断标准很简单:看成像圈直径和传感器对角线的关系。
圆形鱼眼(Circular Fisheye)的成像圈直径小于传感器对角线,画面中间一个圆,圆的四个角外面全是黑的。它的价值在于整个 180° 甚至 220° 的视场被完整记录下来,没有任何裁切。全画幅上的 6mm、8mm 定焦基本属于这一类,成像圈直径大约 23~25mm,而全幅对角线是 43.3mm,所以圆外必然黑一圈。
对角线鱼眼(Diagonal Fisheye)的成像圈刚好覆盖传感器对角线,四个角勉强"沾到"画面边缘,形成经典的"四角拉伸、中间正常"的效果。全画幅常见的 12mm、15mm,APS-C 上的 10.5mm,M4/3 上的 8mm 都属于这种。它的视觉冲击力最强,单张就能拍出很夸张的画面,也是绝大多数爱好者买的第一支鱼眼。
准鱼眼(Quasi-Fisheye,也叫半鱼眼)的视角一般在 100°~170° 之间,没有做到整 180°,畸变程度比前两者轻,某种程度上像是"能接受弯曲的超广角"。这类镜头更偏实用,拍建筑室内、狭小空间、活动现场全景的时候比极端鱼眼更好控制,后期裁切余地也大。
有一组数据可以帮你建立直觉:全画幅对角线 43.3mm,APS-C(1.5 倍裁切)约 28.4mm,M4/3 约 21.6mm。一支成像圈直径 24mm 的鱼眼,装在全幅上是圆形鱼眼(圆外黑角很明显),装在 APS-C 上圆几乎顶满画幅,就变成了"圆角轻微黑边的对角线鱼眼",装到更小画幅上则完全覆盖、黑角消失。很多人抱怨"我这支鱼眼在全幅上四角有黑块",其实不是镜头坏了,是成像圈就这么大。
2.2 按投影模型分:等距、等立体角、正交、体视
这一层是真正的技术内核,也是很多教程含糊带过的地方。鱼眼的"弯曲程度"由投影函数决定,常见的四种加一个对照:
| 投影模型 | 公式(r 为像高,f 为焦距,θ 为入射角) | 特征 | 典型用途 |
|---|---|---|---|
| 直线投影(对照) | r = f·tanθ | 直线保持直线,θ 接近 90° 时像高趋于无穷 | 普通广角、超广角 |
| 等距投影 | r = f·θ | 入射角与像高成正比,角度均匀分布 | 全景拼接、测量类应用,最主流 |
| 等立体角投影 | r = 2f·sin(θ/2) | 单位立体角对应相同像面积,边缘压缩更狠 | 天文全天候相机、云量观测 |
| 正交投影 | r = f·sinθ | 类似从无穷远看一个球,θ=90° 时像高等于 f | 半球穹顶成像、部分监控 |
| 体视投影 | r = 2f·tan(θ/2) | 保圆性最好,小圆仍成圆 | 特殊创意、部分工业检测 |
**为什么等距投影最主流?**因为 r 和 θ 是线性关系,这意味着图像上任意一段径向距离,可以直接反推出角度差。全景拼接软件、机器人视觉的全景展开、管道内窥的周向展开,都极依赖这个性质——你把图上的像素位置除以 f,就得到入射角,反算极其省事。等立体角投影则胜在"每个像素代表的立体角相等",全天候相机做云量统计、亮度积分的时候,不需要做面积加权,直接数像素就行,所以气象和天文领域偏爱它。
工业选型时有个坑要提醒:厂家标称的投影模型经常是"近似"的,尤其是几十上百块的消费级附加镜,公式基本对不上。真要用于测量,必须自己标定,把实际投影曲线拟合出来,别拿标称焦距直接套 r=f·θ。
2.3 按对焦方式和结构形态分
鱼眼的对焦结构大致三类。一类是固定焦点,出厂就设在超焦距上,从几十厘米到无穷远都在景深内,典型是那些小巧的圆形鱼眼和一些工业镜头。这类镜头没有对焦环,用起来省心,但近摄能力弱,想拍特写就没戏。第二类是手动对焦环,有刻度,配合放大对焦用,全景拍摄和工业应用大多用这种,因为需要精确锁定焦点,不能让它在多张之间跑。第三类是自动对焦,多见于准鱼眼和高端对角线鱼眼,适合抓拍运动题材,但拍全景时反而要手动切到 MF 锁死,否则每张焦点飘一点,拼接就会软。
形态上还有几种不得不提的:可换前组的鱼眼(前组镜片突出、无法装常规螺纹滤镜)、附加式鱼眼(夹在手机或小相机前面,0.2x~0.4x 的那种)、镜头盖式鱼眼(体积小到像一个盖子,画质一般但便于随身)、以及工业 C 口/M12 接口的板机镜头形态。附加式这一类,边缘画质衰减非常明显,属于"能拍出效果"但不适合做素材级输出的类型,我的经验是:如果最终要做 2:1 全景或者需要拼接,别用附加镜,中心到边缘的畸变曲线根本对不上,拼接软件会给你拼出一堆错位。
2.4 按像场和卡口适配分
同一支鱼眼在不同画幅上的表现差异巨大,这是选型时最容易忽略的一层。全画幅鱼眼(成像圈 43.3mm 覆盖)体积大、价格高;APS-C 专用鱼眼(成像圈 28.4mm 左右)小巧便宜;M4/3 的鱼眼更紧凑;1 英寸和更小传感器上,2.8mm、2.1mm、1.8mm 这类焦距就能做到 180°。
工业上更看重接口而不是卡口:C 口、CS 口、M12 螺纹口,配 1/3"、1/2.5"、1/1.8" 的传感器,焦距 1.8mm~2.8mm 就能给出 180°~220° 的视场。这里有个非常常见的选型错误——只看"视角 180°"就下单,没算成像圈。1/3" 传感器的成像圈要求只有 6mm 左右,一支为 1/3" 设计的 180° 鱼眼装到 1/1.8" 传感器上,四角立刻黑掉,实测视角反而变小。我的建议是:工业项目先定传感器型号,再按"成像圈直径 ≥ 传感器对角线 × 1.05"这个原则反查镜头,留 5% 余量防止装配偏心。
2.5 一张表把类型、特征、能干的活对齐
| 类型 | 成像圈/画幅关系 | 典型视角 | 畸变强度 | 主要用途 | 注意事项 |
|---|---|---|---|---|---|
| 圆形鱼眼 | 明显小于对角线 | 180°~220° 全向 | 极强 | 全景素材、球幕、VR | 像素利用率低,圆外全浪费 |
| 对角线鱼眼 | 约等于对角线 | 对角 180° | 强 | 创意摄影、单张全景、看台 | 四角拉伸严重,慎拍人脸 |
| 准鱼眼 | 完全覆盖 | 100°~170° | 中 | 室内、活动、狭小空间 | 与超广角差距变小,看需求 |
| 工业短焦鱼眼 | 匹配小靶面 | 160°~220° | 强 | 内窥、检测、标定、导航 | 必须标定,别看标称 |
| 附加式鱼眼 | 依附主镜 | 100°~140° | 强 | 手机随手拍 | 边缘崩,别用于拼接 |
3. 各类鱼眼到底能干什么
3.1 全景与虚拟看房:对角线鱼眼的主场
这是鱼眼最大众化的用途。拍一张 2:1 的等距圆柱全景图,用普通镜头需要拍一圈十几张甚至几十张,用鱼眼三四张就能覆盖整个球面。原因很直接:单张水平视场 150° 以上,一圈 360° 只需要 3 张就有充分重叠,加上仰天俯地各一张,六张搞定一个完整球面。效率差距是数量级的,现场拍摄时间从二十分钟压缩到三分钟,这对房产、酒店、展厅这种需要批量出片的场景意义很大。
具体到镜头选择,我更偏向全画幅的对角线鱼眼而不是圆形鱼眼。理由有两个:一是圆形鱼眼虽然视场完整,但画面中间一个圆,四周黑掉,实际用于成像的像素只有全画幅的三分之一左右,2400 万像素的机身最后只有不到 800 万在干活,摊到整个球面上就显得紧张;二是圆形鱼眼的黑边会让拼接软件的特征点匹配区域变窄,接缝位置的选择余地小。对角线鱼眼把整个画幅吃满,像素利用率高,拼接时的重叠区域也更宽裕。
实际拍摄时的重叠率我一般控制在 30%~35%。算张数的公式是:水平一圈张数 = 360° ÷ (单张水平视场 × (1 - 重叠率))。以水平 150° 的对角线鱼眼、30% 重叠为例,360 ÷ (150 × 0.7) = 3.43,向上取整 4 张。这 4 张是环拍,再加上天顶一张、地面一张(或者地面用三脚架云台位置补拍,后期打补丁),一共 6 张。
3.2 运动跟拍与极限视角
运动场景用鱼眼,图的是"贴着主体还能把环境带进来"。滑板、骑行、滑雪这类跟拍,机位常常离人不到一米,普通广角根本装不下人和环境的关系,鱼眼一上,主体在画面中间不变形,四周的环境被拉伸成放射状,视觉冲击力就出来了。这类应用里,圆形鱼眼的"黑角"反而是缺点,一般用对角线鱼眼或者准鱼眼。
这里有个实操细节值得说:鱼眼拍人像要控制主体的位置。画面中心 30% 半径范围内的变形是很轻微的,人脸放这儿基本正常;一旦放到画幅边缘,脸会被拉成"外星人"。我试过把主体放在画面下方三分之一、镜头略微下俯的机位,人物腿部被拉伸,会有种"腿长两米"的效果,人像和婚纱摄影里这招用得挺多。反过来,仰拍建筑时把地平线压在画面中间偏下,两侧的楼会向中间倒,形成很强的包裹感,但千万别让地平线靠近画幅边缘,否则会弯成一个夸张的弧形,看着像画面塌了。
3.3 工业与机器视觉:内窥、检测、标定
这一块是鱼眼真正"值钱"的地方,也是和消费级玩法差别最大的。管道内窥、腔体检查、发动机缸内窥探,用的就是 1.8mm~2.8mm 的短焦鱼眼配小靶面传感器,视角 180° 以上,一次成像就能看到整个管壁的一圈。管道检测里常见做法是把鱼眼图像按极坐标展开成矩形——行对应轴向距离,列对应周向角度,一张圆图直接变成一张"管壁展开图",缺陷定位一目了然。这个展开的前提就是镜头必须是等距投影,角度和像素线性对应,展开才不变形。
机器人导航和视觉标定也大量用鱼眼。移动机器人要在狭窄走廊里同时看到两侧墙壁和地面,180° 视场几乎是刚需;视觉里程计和 SLAM 用鱼眼能显著提升特征点的角度分布均匀性。但这里必须强调:鱼眼用于测量或定位,标定是绕不过去的。标准流程是拍多张棋盘格(15 张以上,覆盖画面各个区域特别是边缘),用主流开源视觉库里的鱼眼标定模块解出内参和畸变系数,再套投影模型做展开。直接拿标称焦距 f 去算,边缘误差能有十几二十个像素,测量精度直接废掉。
工业检测里还有一种用法是"一次成像测多面":把鱼眼装在设备正上方俯拍,一个工位上料盘的所有零件位置一次拍全,省掉机械臂来回移动的时间。这种场景对边缘分辨率要求高,选型时得算清楚每毫米对应多少像素,别被"180° 视角"的宣传语带跑。
3.4 全天候观测与创意摄影
天文和气象领域的全天候相机是鱼眼的经典应用:一台带 8mm 圆形鱼眼的相机朝天固定,几分钟一张,整夜的星轨、流星、云量变化全在一张图上。这类应用偏爱等立体角投影,因为球面上每个立体角对应的像素数相同,做云量统计、天光亮度积分的时候可以直接数像素比例,不需要按投影做面积加权。如果拿等距投影的镜头去做亮度统计,天顶和地平线附近的权重会差出一截,结果就不准了。
创意摄影这边就更随意了。宠物摄影把镜头怼到鼻尖前,鱼眼把鼻子放大成一个球,效果很有喜感;建筑仰拍把楼群弯成花瓣;舞台演出从前排看台拍,能把整个场馆的观众和舞台一起收进画面。这类玩法没有技术门槛,但有个经验:创意鱼眼照片最好留一点可控的直线,比如一根灯柱、一段栏杆,画面里有一两条明确的参照,观者才更容易感知到"这是被故意弯曲的",否则就只是"拍歪了"。
4. 关键参数怎么算、怎么选
4.1 视角计算:别用等效焦距估鱼眼
这是我最想纠正的一个误区。很多人拿"等效焦距 ÷ 全幅等效"去估鱼眼视角,结果算出来差二三十度。原因是等效焦距的换算建立在直线投影(r = f·tanθ)之上,鱼眼根本不服这个规律。
正确算法是用投影公式反解。以等距投影为例,r = f·θ,所以 θ = r / f,全视场角 FOV = 2θ。
举个例子:全画幅 8mm 圆形鱼眼,成像圈半径 r = 12.5mm(直径 25mm),那么 θ = 12.5 / 8 = 1.5625 rad = 89.5°,全视场约 179°,基本就是 180°,符合标称。再看这个成像圈能覆盖到画幅的哪里:全幅对角线半径是 21.6mm,远超 12.5mm,所以四角必然是黑的,是标准圆形鱼眼。
再算全幅 15mm 对角线鱼眼:对角方向 r = 21.6mm,θ = 21.6 / 15 = 1.44 rad = 82.5°,全视场 165°。标称的"180° 对角线"其实是设计目标加上暗角裁切的宣传说法,实测多半在 165°~175° 之间。水平方向 r = 18mm,θ = 1.2 rad = 68.8°,水平视场 137.5°;垂直方向 r = 12mm,θ = 0.8 rad = 45.8°,垂直视场 91.6°。这三个数一算出来,你对这支镜头的实际覆盖能力就有底了,比看宣传页准得多。
如果你的镜头是等立体角投影,公式换成 r = 2f·sin(θ/2),反解 θ = 2·arcsin(r / (2f))。同样 r = 21.6mm、f = 15mm,θ = 2·arcsin(0.72) = 2 × 46.05° = 92.1°,全视场 184°。可以看到,同样是 15mm,投影模型不同,算出来的视角能差将近 20°。这就是为什么我前面说"投影模型比焦距更重要"。
4.2 成像圈匹配与像素密度估算
选镜头时的第一道算术题:成像圈直径 ≥ 传感器对角线。全幅 43.3mm,APS-C 28.4mm,M4/3 21.6mm,1 英寸 15.9mm,1/1.8" 约 8.9mm,1/2.5" 约 7.2mm,1/3" 约 6mm。低于这个值,四角一定黑。
第二道题是像素密度够不够。以全幅 2400 万像素 + 8mm 圆形鱼眼为例,成像圈直径 25mm,占画幅对角线(43.3mm)的比例是 25/43.3 = 0.577,如果传感器像素均匀分布,圆内实际用到的像素约为 2400 万 × 0.577² ≈ 800 万。整个球面是 4π 球面度,换算成平方度约 41253 平方度,那么每平方度大约 8000000 / 41253 ≈ 194 像素。展开成 2:1 等距圆柱图,横向 360°、纵向 180°,如果要求每平方度 194 像素,理论上可以出到约 8300 × 4150 的尺寸——但这是理论上限,实际因为边缘模糊、重叠损失、拼接插值,输出 6000 × 3000 是比较稳妥的,硬拉到 8000 宽会明显发虚。
这个计算的意义在于:如果你要做 8K 级别的 VR 内容,一支圆形鱼眼加 2400 万机身是不够的,要么换高像素机身,要么用对角线鱼眼充分利用画幅,要么多拍几张提高冗余。我见过不少人用圆形鱼眼拍了一堆素材,回来发现展开后分辨率不够,只能重拍,这个坑提前算一下就能避开。
4.3 投影转换的代码实现
后期去畸变、做投影转换,核心就是把目标图像的每个像素反算回鱼眼图上的采样位置。下面是等距投影鱼眼转直线投影(透视)的实现,纯 numpy,可以直接跑:
import numpy as np def fisheye_to_perspective(src, f, out_w, out_h, fov_deg=90.0): """ src: 鱼眼原图 (H, W),灰度或彩色 f: 鱼眼焦距(像素单位),需事先标定或按 r=f*theta 估 out_w/out_h: 输出尺寸 fov_deg: 输出透视画面的水平视场角 """ h, w = src.shape[:2] cx, cy = w / 2.0, h / 2.0 # 输出画面对应的等效焦距 f_out = (out_w / 2.0) / np.tan(np.radians(fov_deg) / 2.0) # 构造输出像素网格 xs = np.arange(out_w) - out_w / 2.0 ys = np.arange(out_h) - out_h / 2.0 gx, gy = np.meshgrid(xs, ys) # 透视平面 -> 单位方向向量 dx, dy, dz = gx, gy, np.full_like(gx, f_out) norm = np.sqrt(dx**2 + dy**2 + dz**2) dx, dy, dz = dx / norm, dy / norm, dz / norm # 方向向量 -> 入射角 theta 与方位角 phi theta = np.arccos(np.clip(dz, -1.0, 1.0)) phi = np.arctan2(dy, dx) # 等距投影:r = f * theta r = f * theta sx = cx + r * np.cos(phi) sy = cy + r * np.sin(phi) # 双线性采样 x0 = np.floor(sx).astype(int); y0 = np.floor(sy).astype(int) x1, y1 = x0 + 1, y0 + 1 valid = (x0 >= 0) & (y0 >= 0) & (x1 < w) & (y1 < h) out = np.zeros((out_h, out_w) + src.shape[2:], dtype=src.dtype) wx, wy = (sx - x0)[..., None], (sy - y0)[..., None] for dyi, dxi, wgt in [(0, 0, (1-wx)*(1-wy)), (0, 1, wx*(1-wy)), (1, 0, (1-wx)*wy), (1, 1, wx*wy)]: yy = np.clip(y0 + dyi, 0, h - 1) xx = np.clip(x0 + dxi, 0, w - 1) out += (src[yy, xx] * wgt).astype(out.dtype) out[~valid] = 0 return out这段代码干的事,用大白话讲就是:先在输出平面上铺一张网格,每个格子代表一个"看出去的方向",然后把这个方向换算成入射角,再按鱼眼的投影公式算出它落在原图的哪个位置,最后去那儿取颜色。换成等立体角就改一行r = 2 * f * np.sin(theta / 2),换成正交就改成r = f * np.sin(theta)。最关键的一句是r = f * theta里的 f 必须用像素单位,如果你只有毫米焦距,得先知道传感器像元尺寸:f_px = f_mm / 像元尺寸_mm。比如 8mm 焦距、像元 5.9μm,f_px ≈ 1356。
实际拼接时我不会用这个函数去逐张转,效率太低,主流拼接软件内部就是干这个的,而且会自动优化参数。这段代码更多是用在:需要精确控制投影、或者要在自己的程序里做批量展开(比如管道图像展开、机器人视觉预处理)的时候。
5. 实操:一次完整的鱼眼全景拍摄与后期流程
5.1 现场拍摄:节点、参数、锁定
设备清单很简单:机身 + 对角线鱼眼 + 全景云台 + 三脚架。核心操作只有一件事——调节点(NPP,无平行差原点)。鱼眼镜头的光学入射光瞳位置和普通镜头不一样,如果绕机身螺丝孔旋转,近处的物体会产生视差,拼接时接缝处就会出现错位重影。找节点的方法很土但有效:在镜头前放两根竖直的细杆,一近一远,转动云台让近杆和远杆对齐,然后观察两者之间是否有相对位移,反复前后微调镜头在云台上的位置,直到转动时两杆始终重合。
拍摄参数我固定成一套:光圈 f/8(鱼眼边缘画质和暗角的平衡点,全开边缘很肉,收到 f/11 又有衍射),快门按现场定,ISO 手动锁死,白平衡手动锁死(非常重要,自动白平衡每张飘一点,拼接就会出现色带),对焦切到 MF 并锁定在超焦距上。
超焦距的算法是 H = f² / (N × c) + f,其中 c 是全画幅弥散圈 0.03mm。以 15mm、f/8 为例:H = 225 / (8 × 0.03) + 15 = 937.5 + 15 ≈ 0.95m。所以对焦对在 1 米处,从 0.48 米到无穷远都在景深内。这个数一定要自己算一遍,别凭感觉拧到无穷远——很多鱼眼的对焦环无穷远位置有偏差,拧过头反而整张糊。
环拍 4 张,每张转 90°,再补天顶 1 张、地面 1 张。天顶那张把云台仰起来拍,地面那张可以把三脚架挪开一点、人退到镜头后面拍(后期把三脚架位置补掉)。总共 6 张,现场耗时三分钟左右。
5.2 后期:拼接、补洞、投影输出
导入拼接软件后,第一步是检查控制点。鱼眼素材的特征点匹配在边缘区域容易出错,因为拉伸太厉害,我会手动把边缘区域的特征点删掉一部分,只保留中低纬度区域的匹配,接缝质量反而更稳。第二步选投影:全景输出用等距圆柱(Equirectangular),球幕用立方体面(Cube Faces),虚拟看房平台大多吃 2:1 的等距圆柱。第三步调输出尺寸,按前面算的像素密度来,别盲目拉大。
补洞环节最容易被忽略。天顶和地面各有一个洞,天顶如果拍的是均匀天空,直接用软件的水平线填充就能糊过去;地面如果有纹理(地砖、草地),填充会露出明显的模糊斑,我的做法是现场多拍一张正下方的特写,后期贴上去。这里有个小技巧:补地那张故意把曝光降三分之一档,因为地面通常比天空暗,拼接软件在融合时容易把地面提亮,稍微压一点反而融合得更自然。
最后是检查地平线。等距圆柱投影里,地平线应该是一条笔直的水平线。如果它弯了,说明拼接时俯仰角没对齐,回去把控制点重新优化一遍。这一步别偷懒,弯的地平线在虚拟看房里转起来非常明显。
5.3 一套可复用的参数记录
| 项目 | 设定值 | 理由 |
|---|---|---|
| 光圈 | f/8 | 边缘画质与暗角的平衡点 |
| 对焦 | MF,锁定 1m | 15mm f/8 超焦距 0.95m |
| 白平衡 | 手动锁定 | 防止拼接色带 |
| ISO | 手动锁定,尽量低 | 降噪,减少拼接噪点差异 |
| 环拍张数 | 4 张 / 90° | 水平 137° 视场,30% 重叠足够 |
| 补拍 | 天顶 1 + 地面 1 | 覆盖球面两极 |
| 输出 | 等距圆柱 2:1,6000×3000 | 匹配像素密度上限 |
6. 常见问题与排查技巧实录
| 现象 | 可能原因 | 排查与解决 |
|---|---|---|
| 四角出现黑块 | 成像圈小于传感器对角线 | 换更大成像圈的镜头,或裁切/缩画幅使用 |
| 边缘严重发虚、紫边 | 大入射角导致的场曲与倍率色差 | 收光圈到 f/8~f/11,后期做边缘色差校正 |
| 拼接接缝错位重影 | 节点没调准,存在视差 | 重新调 NPP,近距离物体尤其敏感 |
| 拼接出现明暗条带 | 自动白平衡或自动曝光在飘 | 全程手动锁定,后期统一做暗角补偿 |
| 天顶/地面有大块模糊 | 补拍缺失,靠算法填充 | 现场补拍天顶和地面,别指望后期 |
| 全景转起来地平线是弯的 | 俯仰角未对齐 | 重新优化控制点,检查每张的仰角 |
| 逆光时画面出现鬼影光斑 | 鱼眼前组凸出、无有效遮光 | 调整机位避开直射光源,手挡杂光 |
| 展开图边缘拉伸过度 | 投影模型选错或 f 值不准 | 重新标定 f,确认投影类型 |
| 画面中心正常、四周像果冻 | 这是鱼眼的正常投影特性 | 后期用透视投影转换,或调整构图 |
| 工业测量误差大 | 用标称焦距代替标定值 | 拍棋盘格标定,拟合实际投影曲线 |
几个补充的避坑经验。第一,鱼眼镜头基本装不了常规螺纹滤镜,前组镜片凸出来,硬装会顶到镜片。需要减光或者偏振,得用后置插片式或者专用支架,这个在采购时要一起考虑。第二,偏振镜在鱼眼上效果很怪,因为入射角跨度太大,天空的偏振方向在不同区域不一样,会出现一条明显的明暗分界,拍天空时慎用。第三,圆形鱼眼拍全景时,画面圆外的黑区不要裁掉再拼,让软件自己识别有效区域,裁了反而丢掉了边缘的过渡信息。
还有一个特别容易被忽略的点:鱼眼镜头的光轴和卡口不一定完全同心。工业应用里如果发现成像圈偏心,先别怀疑镜头质量,检查一下转接环和传感器的装配公差。我遇到过一次圆形鱼眼的圆明显偏左,最后发现是转接环的加工误差,换了环就好了。
7. 选购和使用上的几条个人经验
如果你只是想玩玩效果,一支 APS-C 或 M4/3 的对角线鱼眼就够了,便宜、轻便、画质够用,拍出来的夸张感一点不少。真要往全景内容方向走,直接上全画幅的对角线鱼眼,圆形鱼眼可以作为补充但不建议作为主力,像素利用率那道坎绕不过去。做工业或者机器视觉,别在网上按"180° 鱼眼"这个关键词瞎搜,先把传感器型号、靶面尺寸、接口类型、需要的视角和精度定下来,再让供应商给 MTF 曲线和投影模型参数,能提供标定文件的优先。
使用层面,我最想分享的一条是:鱼眼的价值在于"信息密度",而不是"变形效果"。刚上手时容易被那种弯曲的视觉冲击吸引,拍一堆花里胡哨的照片,过一阵就腻了。真正让鱼眼不可替代的,是它能在一次曝光里把整个空间的方位关系记录下来——这也是为什么全景、内窥、导航、全天候观测这些领域离不开它。理解了这一点,你在构图时就会开始考虑"我怎么把关键信息放在变形最小的中心区,把环境交代交给边缘",画面质量会明显不一样。
最后提一个我踩过的坑:鱼眼镜头的光圈叶片数量少,逆光小光圈拍摄时,衍射星芒会变成很难看的六边形或者多边形光斑,而且边缘的鬼影特别顽固。遇到这种情况,与其硬扛,不如换个机位让光源在画面外侧,或者干脆开大光圈让光源虚化掉。这个跟参数没关系,纯粹是光学结构的限制,认了就好。