“第二章数字图像基础,超级难啃。”—不是我说的,是我朋友说的。
“2.1.1讲人眼结构,这东西对计算机视觉有啥用吗?我又不是学医!”—这依然不是我问的,是我朋友问的。
我的建议是,多啃几遍了哦,不如就像我,做多次笔记试试。还有啊,人眼结构这块要留意,后面遇到液态仿生镜头你就知道了。
一、人眼结构与成像原理
眼球分层与核心组件
1.1 眼球本体结构
外层: 角膜(透明,负责折射光线)和巩膜(保护结构) 。
中层: 虹膜(调节瞳孔大小控制进光量)、睫状体(调节晶状体曲率)和脉络膜(吸收散射光) 。
内层(视网膜):
锥状细胞:约600-700万个,位于中央凹,负责高分辨率、彩色视觉(明视觉) 。
杆状细胞:约7500-15000万个,分布广但连接共享神经,对低照度敏感(暗视觉) 。
盲点:无视细胞区域,由视神经出口形成 。
眼球内容物:
房水:填充前房和后房,维持眼压并营养角膜、晶状体 。
晶状体:弹性透明结构,通过改变曲率调节焦距(类似相机镜头) 。
玻璃体:凝胶状物质,支撑眼球形状并传递光线至视网膜 。
1.2 附属器官
保护与润滑结构
眼睑与睫毛:物理屏障,防止异物侵入;眨眼动作保持角膜湿润 。
结膜:覆盖眼睑内侧和巩膜表面,分泌黏液辅助润滑 。
泪器:泪腺分泌泪液清洁眼球,泪道排出多余液体 。
运动调节结构
外眼肌:6条肌肉协同控制眼球运动,实现快速扫视、追踪目标等功能 。
1.3 关键动态特性
瞳孔调节:虹膜通过肌肉收缩改变瞳孔大小,适应不同光照强度(动态对比度可达百万比一) 。
视网膜适应:从明到暗环境需约30分钟完成化学调整(如视紫红质再生),以恢复暗视觉 。
1.4 功能协同示例
当光线通过角膜→房水→瞳孔→晶状体→玻璃体到达视网膜后,感光细胞将光信号转化为电信号,经双极细胞→神经节细胞→视神经传递至大脑皮层,最终形成视觉 。若晶状体弹性下降(如老花眼),睫状体无法有效调节焦距,需借助光学镜片矫正 。
成像机制
晶状体通过改变形状调节焦距(14-17mm),类似相机镜头 。
视网膜中央凹类似CCD传感器,聚焦后光信号转换为电脉冲,由大脑解码 。
二、亮度适应与视觉现象
亮度适应(Brightness Adaptation)
动态范围: 人眼可适应光强范围达
1
0
10
10^{10}
1010
,但瞬时辨别的亮度级仅约
1
0
3
10^{3}
103 。
适应级别: 当前环境下的灵敏度水平,暗视觉(杆状体主导)与明视觉(锥状体主导)的切换需要时间(如暗适应约30分钟) 。
关键视觉现象
马赫带效应(Mach Bands)
现象:在均匀亮度区域边界处感知到虚假的亮/暗带(图1)。
原理:视觉系统增强对比度以突出轮廓 。
代码示例:生成灰度渐变条带并观察边界效应。
import numpy as np
import matplotlib.pyplot as plt
# 生成带有阶梯突变的渐变(模拟侧抑制)
steps = 10 # 阶梯数
step_width = 25 # 每个阶梯宽度(像素)
gradient = np.zeros((200, 256))
for i in range(steps):
start = i * step_width
end = start + step_width
gradient[:, start:end] = i * (255 // steps)
plt.figure(figsize=(15, 3))
plt.imshow(gradient, cmap='gray', aspect='auto', interpolation='none') # 禁用插值
plt.axis('off')
plt.title("Illustration of the Mach band effect.")
plt.show()
输出效果:渐变条带在相邻区域交界处出现亮/暗条纹。
同时对比(Simultaneous Contrast)
现象:相同灰度的小方块在不同背景中感知亮度不同。
代码示例:创建不同背景下的相同灰度方块。
import numpy as np
import matplotlib.pyplot as plt
# 创建黑色和白色背景 (明确使用uint8数据类型)
bg_dark = np.zeros((200, 200), dtype=np.uint8) # 黑色背景 (0)
bg_light = np.ones((200, 200), dtype=np.uint8) * 255 # 白色背景 (255)
# 在中心添加相同灰度方块(灰度值=127)
patch_value = 127
patch = np.ones((50, 50), dtype=np.uint8) * patch_value
bg_dark[75:125, 75:125] = patch
bg_light[75:125, 75:125] = patch
# 可视化对比(强制显示范围为0-255)
plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1)
plt.imshow(bg_dark, cmap='gray', vmin=0, vmax=255, interpolation='none') # 关键修复点
plt.title("Dark Background: Patch Looks Brighter")
plt.axis('off')
plt.subplot(1, 2, 2)
plt.imshow(bg_light, cmap='gray', vmin=0, vmax=255, interpolation='none') # 关键修复点
plt.title("Light Background: Patch Looks Darker")
plt.axis('off')
plt.tight_layout()
plt.show()
输出效果:中心方块在深背景中显得更亮,在浅背景中显得更暗。
三、视觉错觉与图像处理启示
错觉类型
几何错觉:平行线因交叉线干扰显得不平行 。
亮度错觉:不存在的中心形状因背景模式被感知 。
对图像处理的启发
增强算法设计:利用马赫带效应优化边缘检测,避免过度锐化导致的虚假轮廓 。
显示技术优化:考虑同时对比现象,调整UI界面对比度以提升用户体验 。
四、总结与实践建议
理论核心:人眼通过分层结构和动态适应机制实现高效视觉感知,但其非线性特性(如亮度对数响应)需在图像处理中被建模 。
参考文献
《数字图像处理》中文译本第二章 §2.1
人眼亮度适应与错觉机制详解
视觉现象模拟代码实现