1. 内窥镜成像原理:光学系统、传感器与图像采集流程
做内窥镜图像处理这些年,我经常被问到同一个问题:
「为什么内窥镜拍出来的图像总是又暗又歪?」
嗯,这其实得从成像的源头说起。
说白了,内窥镜就是一个「把光送进去,再把光带回来」的光学系统。
你想想看,人体内部又黑又窄,光线进不去,图像就出不来。
所以,理解成像原理,是做畸变校正和色彩还原的第一步。
1.1 光学系统:光怎么进去,又怎么出来?
内窥镜的光学系统,核心就两件事:照明和成像。
- 照明光纤:把冷光源的光,从体外送到体内。我见过不少新手以为光源越亮越好,其实不然。太亮会灼伤组织,太暗又看不清细节。我们一般用氙灯或LED,色温控制在5500K左右。
- 物镜系统:位于内窥镜最前端,负责把体内景象「收」进来。物镜的视场角通常在70°到140°之间。视场角越大,看到的范围越广,但畸变也越严重。
- 传像光纤/透镜组:把物镜形成的图像,从体内传到体外。这里有个坑——光纤的排列一旦错位,图像就会出现「断丝」现象。我曾经在项目里遇到过一批光纤束,生产时端面研磨不平,导致图像中心清晰、边缘模糊。排查了整整两天才找到原因。
关键参数一览:
| 参数 | 典型值 | 说明 |
|---|---|---|
| 视场角 | 70°~140° | 越大畸变越明显 |
| 景深 | 3mm~100mm | 超出范围会模糊 |
| 分辨率 | 10~100 lp/mm | 线对/毫米,越高越清晰 |
| 色温 | 5500K | 接近日光,还原真实 |
1.2 传感器:把光变成电信号
光从体内传出来后,得有个东西把它「读」出来。
这就是图像传感器——CCD或CMOS。
我个人习惯把传感器比作「电子视网膜」。
它上面有密密麻麻的像素点,每个像素点感受光的强度,然后转换成电压信号。
这里有个容易忽略的点:传感器的光谱响应。
不同波长的光,传感器的敏感度不一样。比如,红光在人体组织中穿透力强,但传感器对红光的响应往往偏弱。这就导致拍出来的图像偏蓝绿色。
嗯,这就是色彩还原要解决的第一个问题。
避坑指南:
我曾经在选型时只看像素数,忽略了像素尺寸。结果图像噪点大得离谱。
记住:像素尺寸越大,信噪比越高。对于内窥镜这种弱光场景,像素尺寸比像素数量更重要。
1.3 图像采集流程:从光到数字图像
整个流程,我习惯分成四步:
- 光电转换:传感器把光信号变成模拟电压信号。这一步决定了图像的动态范围。
- 模拟放大:把微弱的电压信号放大。放大倍数太高,噪声也会被放大。我一般控制在6dB~12dB之间。
- 模数转换:ADC把模拟信号变成数字信号。常见的位深是8bit或10bit。10bit能记录更多细节,但数据量也更大。
- ISP处理:图像信号处理器开始干活——去噪、白平衡、色彩校正、伽马校正……
你可能会问:为什么不在传感器端直接做校正?
原因很简单:传感器端空间有限,算力也有限。大部分校正算法,都是在后端的ISP或PC上完成的。
注意:
采集流程中,最容易出问题的是「模拟放大」这一步。
如果放大倍数设置不当,图像会出现「饱和」或「暗部细节丢失」。
我建议在项目初期,就做好不同光照条件下的增益标定。
1.4 畸变是怎么产生的?
畸变,说白了就是「图像变形」。
内窥镜的物镜为了获得大视场角,通常采用「鱼眼」设计。这种设计会让图像边缘被拉伸,直线变曲线。
畸变主要分两种:
- 桶形畸变:图像中心正常,边缘向外凸出。这是内窥镜最常见的畸变。
- 枕形畸变:图像边缘向内凹陷。多见于某些特殊镜头。
我记得第一次做畸变校正时,拿了一张棋盘格标定板,拍出来的格子全是弯的。当时心里一惊——这要是直接用于手术,医生非骂人不可。
畸变校正的核心,就是找到每个像素点「应该在哪」,然后把它「挪回去」。
这个「挪」的过程,需要用到相机标定参数——内参矩阵和畸变系数。
一句话总结:
内窥镜成像,就是「光进去→光出来→光变电→电变数」的过程。
畸变和色彩偏差,是这个过程中不可避免的「副产品」。
而我们后续所有算法,都是在跟这些「副产品」较劲。
好了,这一章先讲到这里。
下一章,我会带你手撸一个畸变校正的Python代码。
到时候你就知道,那些数学公式到底是怎么变成实际效果的。