OVM6946镜头约1mm,因此:决战1mm!
终于来到了我们的第三篇,内窥镜FPGA方案,未曾想过这个话题这么火!
内窥FPGA历史文章 | |
---|---|
【1】 | 一文读懂内窥镜,找到FPGA的定位 |
【2】 | 拆解几千块的内窥镜,找到FPGA的突破口 |
【3】 | 使用OVM6946和OV426设计内窥镜吧! |
前一篇拆解软镜内窥镜的文章出圈了,很也是出乎我的意料。导致最近一波人加我,有医疗界人士,也有对内窥FPGA感兴趣的同仁,想要了解进一步动态。那么1周后的今天,向大家汇报一下最近的进展:
【1】OV426解码板出炉
终于,在大家期待了一周多后,呕心沥血设计的OV426解码板SMT回来了,如上图所示,具体规格如下所示:
创作者 | 疯狂的FPGA |
---|---|
型号 | VC-OV426 |
尺寸 | 30*30mm |
输入接口1 | 6P 2.54mm OV6946输入6P 1.25mm 端子(未来预留) |
输入接口2 | 2P 5V输入供电未来版本计划3.3V升压 |
输出接口 | 20P DVP接口:I2C PCLK VS HS DATA定义兼容CrazyBingo所有DVP模组设计 |
配套子卡 | 易灵思钛金Ti60F225开发板赛灵思A7 100K FPGA开发板 |
- 6P 2.54mm OV6946输入
- 6P 1.25mm 端子(未来预留)
输入接口2
- 2P 5V输入供电
- 未来版本计划3.3V升压
输出接口
- 20P DVP接口:I2C PCLK VS HS DATA
- 定义兼容CrazyBingo所有DVP模组设计
配套子卡
- 易灵思钛金Ti60F225开发板
- 赛灵思A7 100K FPGA开发板
OV426解码板,虽然硬件上不是很复杂,但却充满了各种坑。主要由于OV6946是模拟输入的,如果没有处理好电源,或者布线的时候干扰过大,则最后拿到的图片将会是惨不忍睹。
目前引入解码板的噪声主要有两点:
- 过长的OVM6946引线引起的干扰(一般1.5米内较好)
- OV426解码板设计地太渣,导致很多横条纹 竖条纹,惨不忍睹。
这方面在之前也是走过一些弯路,所以当前我们选择了长度为1m的OVM6946镜头引线,同时在OV426解码板设计上,小心翼翼地处理。
VC-OV426解码板的输入接口定义,兼容市面上主流的OVM4689解决方案吧,相关定义如下所示(包括供电,LED,模拟视频输出信号):
VC-OV426解码板的输出接口定义,如下所示。该接口与CrazyBingo之前设计的DVP CMOS模组完全兼容,因此可以接入任何一款FPGA开发板(当然为了后续的ISP图像处理,规模还是大一点比较靠谱)。
【2】OVM6946 FPGA内测方案详解
先show一个VC-OV426解码板安装图,如上所示:
中间 | 该BGA为主芯片OV426,负责模拟视频解码及基本处理 |
---|---|
左上 | 外部输入5V(下一版集成5V升压,则解码板仅需3.3V供电,这样做完全是为了兼容之前的DVP CMOS模组,并不影响效果) |
右上 | 插入OVM6946模组,接口兼容市面上主流方案 |
下方 | 输出OV426处理过后的数字DVP信号 |
这里DVP的输出时序为400*400的行场时序,其中~VS&HS==1时数据有效:
为了拿到最原始,无损无压缩的数据,我们不能像大部分内窥解决方案那样通过UVC芯片将数据丢到PC。
拿出我们压箱底的FPGA 68013子卡,采集OV426输出的DVP数据,并无损的通过USB2.0发送到PC,进一步分析我们的由于数据的压缩以及搬运过程中的。
所以快速搭建USB2.0 OVM6946测试方案,环境如下图所示:
【3】决战1mm,一条路走到黑
USB上位机拿到图,决战1mm OVM6946,开始我们的内窥之旅。此时此刻,我们正式开始分析VC-OV426解码板拿到的图,如何步步为营改善质量:
- 原始RAW图像(Bayer阵列,灰不拉几):
- 先通过PWM提高OVM4689的LED补光:
- Bayer转RGB得到彩色图像(这里用了426的AWB)
- 调节Gamma、对比度
- 2D降噪后:
- 最终边缘锐化
总结一下,我们手动调节完成了最基本的内窥图像ISP操作,流程如下:
这里的2D降噪是比较宽泛的课题,简单的算法有中值滤波、均值滤波等,复杂的算法有双边滤波、非局部均值等,重点可以参考CrazyBingo的《基于MATLAB与FPGA的图像处理教程》
还记得在内窥第一篇的时候,我们获取到了公开市场OVM4689软窥方案的图,那么这里对比一下,看除了FPGA实时ISP的优势,图像上有什么提升?
乍一看效果还是提升不少,当然我为了保边没有做过强的滤波处理,这块可以根据用户喜好调节算法的强度。再看一下手,初步效果还行:
鼻孔太恐怖,今天就不Show了。。。
【4】OVM6946 FPGA开源方案发布
感谢好多朋友的等待,感谢你等到了今天,我们终于初步落地了FPGA整体解决方案,目前基于易灵思60K FPGA的内窥方案接入,在800*480的RGBLCD 0延时(无缓存)流水线显示方案已经实现,如下图所示:
下一步开始移植计划的的ISP算法到FPGA上,会帮大家准备好基础Demo,敬请期待我们的作品。
基于易灵思60K或Xilinx 100K FPGA平台 | |
---|---|
开源版本 | 实现OVM6946实时采集 0延时显示完成Bayer转RGB(3*3)完成Gamma、对比度算法完成基础滤波、锐化算法 |
闭源版本 | 实现OVM6946实时采集 0延时显示完成Bayer转RGB(5*5)完成基础AWB算法完成Gamma、可调对比度算法完成双边/局部均值滤波完成可调锐化算法完成双线性插值放大算法完成缓存后的HDMI显示更多强大的ISP后处理算法 |
- 实现OVM6946实时采集 0延时显示
- 完成Bayer转RGB(3*3)
- 完成Gamma、对比度算法
- 完成基础滤波、锐化算法
闭源版本
- 实现OVM6946实时采集 0延时显示
- 完成Bayer转RGB(5*5)
- 完成基础AWB算法
- 完成Gamma、可调对比度算法
- 完成双边/局部均值滤波
- 完成可调锐化算法
- 完成双线性插值放大算法
- 完成缓存后的HDMI显示
- 更多强大的ISP后处理算法