内窥镜去反光的论文整理

2023-11-15

内窥镜去反光的论文整理

源码在这里:

这三篇内窥镜去反光的论文分别是:

  • Saint-Pierre C A, Boisvert J, Grimard G, et al. Detection and correction of specular reflections for automatic surgical tool segmentation in thoracoscopic images[J]. Machine Vision and Applications, 2011, 22(1): 171-180.
  • Meslouhi O, Kardouchi M, Allali H, et al. Automatic detection and inpainting of specular reflections for colposcopic images[J]. Open Computer Science, 2011, 1(3): 341-354.
  • Arnold M, Ghosh A, Ameling S, et al. Automatic segmentation and inpainting of specular highlights for endoscopic imaging[J]. Journal on Image and Video Processing, 2010, 2010: 9.

最近文章老是提示审核不通过,没办法只好把图片都改成了链接形式。

Detection and correction of specular reflections for automatic surgical tool segmentation in thoracoscopic images

反光检测

这篇文章的反光检测主要思想是:自动取阈值。大于阈值的区域被认为是反光

主要步骤:

  1. 图像增强。这一步的作用是让反光区域更加明显,让非反光区域更不明显,减少干扰这一步的作用是让反光区域更加明显,让非反光区域更不明显,减少干扰
    enhaced_img = reflection_enhance(I)
    
  2. 直方图去噪。首先统计图像的直方图分布,然后对分布曲线做去噪。这一步中,论文中没有说清楚是用RGB彩色图像统计分布还是用灰度图,在我的实现中,我用的是灰度图。其中去噪的算法用到了一个小波去噪的算法,总之,有点复杂。好在MATLAB 2018中已经封装好了这个去噪算法wdenoise(其他版本的我不知道有没有)
    denoised_hist = histogram_denoise(enhanced_gray);
    
  3. 根据直方图找到阈值。这一步对denoised_hist做了两次类似一阶导的操作,取最后一个不为零的位置作为阈值
    threshold = find_specular_bump_threshold(denoised_hist);
    
  4. 反光区域扩展。经过第三步,将大于threshold的区域试做反光点,现在我们要从点扩散到区域。但是很不幸,论文没有说清楚这个扩展如何做,只是比较含糊的说“反光点周围区域也是反光;这些反光区域的值比较中心点亮度有所下降,但是它们还是反光,因此啊,我们遍历反光点的周围的像素,判断这些像素是不是反光”。论文中即没说清楚这个“周围”是多大,也没有说清楚亮度衰退的模型时什么。因此,在个人实现中,之间跳过这一步,只用imdilate来简单扩展反光区域
    specular_spike_mask = (enhanced_gray >= (threshold));
    specular_mask = imdilate(specular_spike_mask, strel("diamond", 1));
    

这篇文章的检测算法十分的不靠谱,阈值很难正确的被找到。

反光修复

这篇文章的反光修复用的是图像修复技术:Fast digital image inpainting

图像修复我就不讲了,没有去研究,代码也是找的别人实现的,这篇图像修复的代码非常简单

实验结果

结果链接1

结果链接2

Automatic detection and inpainting of specular reflections for colposcopic images

反光检测

主要思想:反光像素的亮度Y(lunminace)大于 它的彩色亮度y(chromatic luminance)

主要步骤:

  1. 图像增强。和前一篇文章一样
    enhanced = ReflectionEnhance(img);
    
  2. 获取亮度Y。RGB转CIE-XYZ空间就行了
    enhanced_xyz = rgb2xyz(enhanced);
    Y = enhanced_xyz(:,:,2);
    
  3. 获取彩色亮度y。这一步论文的公式(4)和公式(7)好像都是,我用的是公式(4),因为我没有搞懂这个colors normalization是个什么鬼。
    y = enhanced_xyz(:,:,2)./(enhanced_xyz(:,:,1) + enhanced_xyz(:,:,2) + enhanced_xyz(:,:,3));
    
  4. 获取反光区域。这个简单,Y >= y 的像素都是反光
    specular_mask = Y >= y;
    

这篇论文比上一篇取阈值的方法靠谱多了,我没有做很详细的测试,仅是原论文的测试图片,反光检测还是很不错的。算法的速度肯定是很快的,几乎没有耗时的部分,但是总觉得太简单了,可能没有很强的鲁棒性。

反光修复

同样的,还是用的图像修复的方法:Digital Inpainting Survey and Multilayer Image Inpainting Algorithms

没有找到这篇文章的代码,所以我没有实现修复部分

实验结果

只有反光的结果
结果链接1
结果链接2

Automatic segmentation and inpainting of specular highlights for endoscopic imaging

反光检测

反光检测的主要思想:每个像素位置都有一个叫“平滑非反光区域颜色像素”的东西,如果像素的值大于这个东西就被认为是反光

我觉得这个思想很有趣,算法等于是给图片提取了一个特征,通过与特征相比较来得到反光区域

主要步骤:

  1. 模块一,获得高光区域。这个步骤是为了获取到那些很明显的高光区域,并将它们视为反光。代码主要实现的是论文中的公式(2)和公式(3),不太难
    cR = double(img(:,:,1)); 
    cG = double(img(:,:,2));
    cB = double(img(:,:,3));
    cE = 0.2989*cR + 0.5870*cG + 0.1140*cB;
    % module 1
    module1_specular_mask = calc_module1_specular_mask(cE, cG, cB, T1);
    
  2. 模块二,每个像素与“平滑非反光区域颜色像素”比较,得到反光区域。这个模块比较复杂,我们分开将
    2.1 填充反光区域。这一步将对反光区域进行填充,如何填充呢?那就是用反光区域周围一圈的像素平均值。这一步主要是为了后面中值滤波做准备。如果不进行填充,那么反光区域被中值滤波后,仍然是高光,这样就没有区分度了(注意,中值滤波后的图像被视作“平滑非反光区域颜色像素”,因此它不应该是高光)
    specular_mask_T2_abs = calc_module1_specular_mask(cE, cG, cB, T2_abs);
    filled_img = filling_image_using_centroid_color(specular_mask_T2_abs, img);
    
    2.2 对填充图像做中值滤波,得到"平滑非反光区域颜色像素"。这步简单,之间medfilt2就可以了。中值滤波后的图像被认为是"平滑非反光区域颜色"图像
    2.3 反光检测。主要是公式(4)(5)(6)(7),没啥好说的,上代码
    fR = double(medfilt2(filled_img(:,:,1), [30 30], 'symmetric'));
    fG = double(medfilt2(filled_img(:,:,2), [30 30], 'symmetric'));
    fB = double(medfilt2(filled_img(:,:,3), [30 30], 'symmetric'));
    filtered_img = cat(3, fR, fG, fB);
    
    fR(fR < eps) = 1e7;
    fG(fG < eps) = 1e7;
    fB(fB < eps) = 1e7;
    
    % contrast coefficient
    tR = contrast_coeffcient(single(cR));%tR = 1;
    tG = contrast_coeffcient(single(cG));%tG = 1;
    tB = contrast_coeffcient(single(cB));%tB = 1;
    
    max_img = cat(3, tR*cR./fR, tG*cG./fG, tB*cB./fB);
    e_max = max(max_img, [], 3);
    module2_specular_mask = e_max > T2_rel;
    
  3. 后处理。这部分我看的不清不楚的,直接跳过,影响不大,代码中只是简单的写了一个对反光区域大小检测的判断。

反光修复

这篇文章的反光修复终于不是用图像修复了

首先,算法用反光检测中的填充,将反光区域进行填充,然后做一个高斯模糊,再然后结合原图和高斯模糊的图进行修复。效果相当不错!

主要步骤:

  1. 图像填充。与反光检测中一样的
    filled_img = filling_image_using_centroid_color(specular_mask, img);
    
  2. 高斯模糊
    sig = 8;
    gaussian_filtered_img = imgaussfilt(filled_img, sig);
    
  3. 计算两张图像的权重。原论文的方法太麻烦了,我自己用卷积实现了一个类似的。总之,靠近反光中心的权重要大,远一点的要小,就可以了。
    mx = imfilter(double(specular_mask), ones(decay_win_size)/decay_cof);
    mx = mx + specular_mask;
    mx(mx > 1) = 1.0;
    
  4. 结合两张图像,filled_imggaussian_filtered_img。很简单,加权相加就可以了
    inpainted_img = mx.*double(gaussian_filtered_img) + (1-mx).*double(img);
    

实验结果

结果链接

关于去反光的数据库

本人主要的研究方向是深度学习+图像增强,因此对深度学习比较熟悉,既然是深度,那就少不了数据集了。

在研究内窥镜去反光的时候,发现相关的数据集很少,只有CVC这个实验室提供了较为完整数据集,现在分享给大家。

内窥镜图像数据集:

  • CVC-ColonDB:http://www.cvc.uab.es/CVC-Colon/index.php/databases/
  • CVC-ClinicDB:http://www.cvc.uab.es/CVC-Colon/index.php/databases/

内窥镜反光及其label:

  • CVC-EndoSceneStill(需要注册):http://www.cvc.uab.es/CVC-Colon/index.php/databases/cvc-endoscenestill/
  • CVC-ClinicSpec(密码我已经帮你们搞到了,不用谢:cvcclinicspec):http://www.cvc.uab.es/CVC-Colon/index.php/cvc-clinicspec/
  • CVC-ClinicSpec:download link,或者 csdn 下载

使用上述数据集发表论文时,请记得引用原作者论文:

Sánchez, F. J., Bernal, J., Sánchez-Montes, C., de Miguel, C. R., & Fernández-Esparrach, G. (2017). Bright spot regions segmentation and classification for specular highlights detection in colonoscopy videos. Machine Vision and Applications, 28(8), 917-936.

目前用深度学习做去反光的研究较少,只看到仅仅一篇还不错的:

  • Generative adversarial networks for specular highlight removal in endoscopic images

我模仿作者的想法,用CycleGAN实现了去反光的试验,效果不错,但是有几个问题:

  • 数据集难收集,我花了好几天时间来做收集工作,收集大概几千张图片作为训练数据
  • 对于整张图像去反光效果不好,并没有论文上说的对任意大小都没有问题的那么好
  • 会对非反光区域产生影响

基于全连接卷积神经网络的反光检测

有了CVC-EndoSceneStill后,我做了一个基于全连接卷积神经网络的反光检测网络,效果相当不错。

实验结果

结果链接

总结

  • 梳理了三篇内窥镜去反光论文的基本方法
  • 介绍了一些有光内窥镜的数据集
  • 实现了一种基于全连接卷积神经网络的反光检测网络
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

内窥镜去反光的论文整理 的相关文章

  • JPEG编码过程详解

    JPEG编码过程详解 本文旨在对JPEG编码过程中的细节步骤进行说明 具体原理部分请参照Wikipedia 色彩空间转换 原始图像的像素点是以RGB形式存储的 即每个像素点由3个字节的数据组成 分别为Red通道 Green通道和Blue通道
  • Python必备基本技能——命令行参数args详解

    Python必备基本技能 命令行参数args详解 1 效果图 2 源码 2 1 简单命令行参数 2 1 轮廓检测源代码 参考 这篇博客将介绍一项开发人员 工程师和计算机科学家必备的技能 命令行参数 原理及使用 依赖 pip install
  • 期望, 方差, 协方差,标准差

    期望 方差 协方差 标准差 期望 概率论中描述一个随机事件中的随机变量的平均值的大小可以用数学期望这个概念 数学期望的定义是实验中可能的结果的概率乘以其结果的总和 定义 设P x 是一个离散概率分布 自变量的取值范围为 x 1 x 2 x
  • gstreamer中tee如何实现动态增减支路(预览+截图+录像)

    系列文章目录 Gstreamer中获取帧数据的方式 gstreamer中如何使用probe 探针 获取帧数据 gstreamer拉流rtsp使用appsink获取帧数据 预览 截图 gstreamer中如何使用fakesink获取帧数据 预
  • windows8.1 vs2015 dlib库cpu 版本编译以及应用 library is 90, caller expects 80

    近期由于要做一个关于人脸计数的项目 因此对dlib库进行了编译和使用 其中遇到了不少问题 下面请听我一一道来 第一步 从dlib官网下载dlib源码 链接地址 https github com davisking dlib 第二步 采用cm
  • matlab中 hold on 与 hold off,figure作用

    hold on是当前轴及图像保持而不被刷新 准备接受此后将绘制的图形 多图共存 即启动图形保持功能 当前坐标轴和图形都将保持 从此绘制的图形都将添加在这个图形的基础上 并自动调整坐标轴的范围 hold off使当前轴及图像不再具备被刷新的性
  • matlab 读取某一文件夹下的文件

    MATLAB 是一个十分强大的科学计算软件 用于各种数据分析和科学计算 在实际工作和研究过程中 我们通常将数据存储在文件中 文件存在于系统的某个目录中 如果需要读取这些文件 可以使用 MATLAB 提供的文件和文件夹操作函数 本文将介绍如何
  • Conditional Prompt Learning for Vision-Language Models

    本文是对CoOp方法提出的改进 CoOp由论文Learning to Prompt for Vision Language Models提出 CoOp针对CLIP模型做了改进 将人工设计的提示修改为了可学习的参数 具体来说就是 CoOp不再
  • Matlab导入Excel数据快速绘图

    现在使用Matalb绘图越来越多 不会这个绘图技能感觉都要被时代抛弃了 所以 本文主要是介绍怎么用Matlab导入Excel数据快速绘图 目录 一 基本使用 二 细致调节 1 颜色选项 2 形状选项 3 网格线选项 一 基本使用 事先 建议
  • SeetaFace编译成功(有windows及Android源码)

    声明 由于本人水平有限 所提供的代码 dll so等必然存在很多问题 仅用于学习 不适合工业级使用 请谨慎使用 如果造成损失 责任自负 对齐 这张照片第3个人的特征点检测有点问题 研发人员很快修正了 赞一个 下面是人脸比对 准确率还是可以接
  • 九宫格人车识别

    一 原理 通过霍夫检测圆的个数来识别小人位置 二 过程 1 二值图像 2 去掉宫格内容 便于分割 3 对二值图填补 减少纹理 4 分割九宫格 依次检测每个宫格中圆个数 5 最终显示小人所在宫格图片 在img6 jpg中 详细程序运行结果 三
  • 【Matlab图片剪裁】

    标题Matlab剪裁图片 提取感兴趣部分 问题描述 当需要从一幅图片中提取一些感兴趣的内容时 比如一些细小的文字 图案等 如果从整个图片中直接提取 必然会大大增加计算量 导致处理时间很长 而且多数计算都是无效计算 进而非常消耗资源 解决办法
  • 2021全国电设(F题)openmv的图像识别之数字识别

    基于openmv的图像识别 通过参加全国电子设计大赛F题总结出openmv4的数字识别 其它版本暂时没试过 欢迎交流 openmv简介 OpenMV是一个开源 低成本 功能强大的机器视觉模块 以STM32F427CPU为核心 集成了OV77
  • EPI distortion correction形变矫正, eddy, fieldmap等五种不同方法

    EPI distortion correction形变矫正 1 topup eddy 2 fieldmap eddy 2 1 对mag做去脑壳 2 2 基于去过脑壳的mag 1volume bet nii gz数据 对fieldmap进行预
  • 【图像压缩】QOI图像格式详解

    最近听说一种图像格式比较流行 想起我曾经是做图像压缩的emmmm 就来研究一下 QOI Quite OK Image Format 很好的图像格式 git链接 能快速地无损压缩图像 原理也非常简单 没有各种变换 直接空域处理 而无损压缩 自
  • 北京机器视觉技术的商业化应用与市场趋势分析

    随着科技的快速发展 机器视觉技术已经逐渐成为工业自动化 智能制造等领域的重要技术之一 北京作为中国的科技创新中心 其机器视觉技术的发展和应用也备受关注 本文将分析北京机器视觉技术的商业化应用以及市场趋势 一 商业化应用 工业自动化 机器视觉
  • 友思特分享 | CamSim相机模拟器:极大加速图像处理开发与验证过程

    来源 友思特 机器视觉与光电 友思特分享 CamSim相机模拟器 极大加速图像处理开发与验证过程 原文链接 https mp weixin qq com s IED7Y6R8WE4HmnTiRY8lvg 欢迎关注虹科 为您提供最新资讯 随着
  • 友思特分享 | CamSim相机模拟器:极大加速图像处理开发与验证过程

    来源 友思特 机器视觉与光电 友思特分享 CamSim相机模拟器 极大加速图像处理开发与验证过程 原文链接 https mp weixin qq com s IED7Y6R8WE4HmnTiRY8lvg 欢迎关注虹科 为您提供最新资讯 随着
  • 图像分割-Grabcut法(C#)

    版权声明 本文为博主原创文章 转载请在显著位置标明本文出处以及作者网名 未经作者允许不得用于商业目的 本文的VB版本请访问 图像分割 Grabcut法 CSDN博客 GrabCut是一种基于图像分割的技术 它可以用于将图像中的前景和背景分离
  • 盘点那些年我们一起玩过的网络安全工具

    大家好 我是IT共享者 这篇文章给大家盘点那些年 我们一起玩过的网络安全工具 一 反恶意代码软件 1 Malwarebytes 这是一个检测和删除恶意的软件 包括蠕虫 后门 流氓 拨号器 间谍软件等等 快如闪电的扫描速度 具有隔离功能 并让

随机推荐

  • twinbasic开发浏览器edge webview2包装

    twinbasic开发浏览器edge webview2包装 QQ 2776478814 有需要写制浏览器控件 写爬虫 数据采集 自动输入的可以找我
  • 爬取嘉兴市人才网即时招聘信息并写入文本TXT完整案例

    上一次讲到爬取嘉兴市人才网即时招聘栏目输出每一页的标题链接 点此查看 这次接着上一次的内容把完整的爬虫代码讲解完 再次声明 代码仅供技术学习交流 不作其他用途 思路 接着上一篇文章 接下来就是循环遍历列表中的每一个url 这个url指的就是
  • 爬虫入门第10课:实现代理池的API模块

    爬虫学习知识点及案例篇 汇总 爬虫入门第1课 代理池概述及开发环境 爬虫入门第2课 代理池的设计 爬虫入门第3课 实现代理池思路 爬虫入门第4课 定义代理IP的数据模型类 爬虫入门第5课 实现代理池工具模块 爬虫入门第6课 实现代理池的校验
  • AtCoder Beginner Contest 203 Pond(二分+二维前缀和)

    样例输入 样例1 3 2 1 7 0 5 8 11 10 4 2 样例2 3 3 1 2 3 4 5 6 7 8 9 样例输出 样例1 4 样例2 5 据说这个题用对顶堆维护被卡了 先挂一手官方该题题解链接 大体思路 二分 将原矩阵根据二分
  • 企业和软件工程师外包公司合作有哪些好处呢

    互联网技术的快速发展和普及也加速了企业信息化进程步伐 目前很多企业在加快信息化建设过程中遇到软件人才资源配置问题 正面临如下困境 临时及灵活的用人需求 招聘团队对专业软件开发人员招聘困难 内部软件人力不足 没有招聘编制 软件技术人员用工及管
  • 简单的 C/C++ 项目自动化构建--Xmake

    Xmake 简介 https xmake io XMake是一个基于Lua的轻量级跨平台自动构建工具 支持在各种主流平台上构建项目 Xmake Build backend Project Generator Package Manager
  • k8s-1.25高可用部署

    文章目录 k8s 1 25高可用部署 亲测可用 1 安装要求 2 准备环境 3 所有master节点部署keepalived 3 1 安装相关包和keepalived 3 2配置master节点 3 3 启动和检查 4 部署haproxy
  • kvm CPU绑定与查询

    cpu绑定 格式 virsh vcpupin domain name vcpu hostcpu config live 例如 virsh vcpupin 16 3 15 config live 说明 将kvm虚拟机第4个vcpu与宿主机第1
  • 计算机网络分层结构—OSI参考模型、TCPI参考模型、五层体系结构

    计算机网络分层结构 5层体系结构是在参考 OSI参考模型 与 TCP IP参考模型 得出的 一 OSI七层模型 OSI七层协议模型包括 应用层 Application 表示层 Presentation 会话层 Session 传输层 Tra
  • C++ Primer Plus P31 编程练习(编写一个C++程序,它使用3个用户定义的函数(包括main),并生产以下输出)——中职

    C Primer Plus P31 编程练习 第三题 编写一个C 程序 它使用3个用户定义的函数 包括main 并生产以下输出 Three blind mice Three blind mice See how they run See h
  • STM32---内部FLASH

    FLASH 1 FLASH介绍 主存储器 分为4个16KB扇区 1个64KB扇区和7个128KB扇区 boot0 boot1都接GND时从0x08000000开始运行代码 系统存储器 器件在系统存储器自举模式下从该存储器启动 主要存放芯片的
  • Python学习中阶:面向对象程序设计

    终于到了面向对象的编程这部分 看完了基本数据类型 函数以及文件的操作 终于开始 面 向 对 象 的 编 程 啦 本部分主要涉及四部分 面向对象的编程 异常处理 进程和线程 重点主要是面向对象的编程 进程和线程 此外 本部分内容是以 Pyth
  • php sybase存储过,SYBASE存储过程详解

    SYBASE存储过程 一 存储过程简介 二 存储过程的创建 修改 删除 三 存储过程中的参数 返回值和变量 四 存储过程中的流程控制语言 五 存储过程中的事务 游标 六 ASE存储过程和IQ存储过程的常见区别 附例子 1 存储过程简介 存储
  • TCP如何实现可靠传输

    TCP的特点 面向字节流 面向连接 可靠传输 可靠传输的实现 1 确认应答机制 对收到的信息给发送方发送报文确认收到数据 2 超时重传机制 等待200ms没有收到接收方的确认应答则说明数据丢失 那么就要进行重新发送 3 序号 确认号 告诉发
  • Flutter利用ScrollController获取、控制滚动组件的滚动位置

    Flutter 中的可滚动组件主要由三个角色组成 Scrollable Viewport 和 Sliver 我们如何利用ScrollController来获取滚动组件的滚动位置 1 先构建一个ScrollController ScrollC
  • Python未来的发展前景到底如何?

    对于程序员而言 了解编程语言的发展趋势 有助于个人职业成长 而对于想要入行IT的新人而言 最大的疑惑大多来自于不知道该选择哪门编程语言发展前景更好 有人让你学Java 因为使用的人最多 有人让你学Python 因为简单易学 是人工智能时代的
  • flutter 实现一个图片选择控件

    在最近的开发中 需要做一个选择图片 包括拍照和相册选择 然后上传的功能 我们的项目是iOS原生和flutter混编的 首先用flutter实现这个页面 选择了第三方插件image picker 下面先看一下效果图 下面我们开始一步一步实现这
  • Netty和Tomcat的区别、性能对比

    文章目录 一 Netty和Tomcat有什么区别 二 为什么Netty受欢迎 三 Netty为什么并发高 一 Netty和Tomcat有什么区别 Netty和Tomcat最大的区别就在于通信协议 Tomcat是基于Http协议的 他的实质是
  • 区块链入门学习笔记(二)

    1 什么是区块链 Blockchain 区块链是由节点参与的分布式数据库系统 区块链是由一串使用密码学方法产生的数据块组成的 每个区块都包含了上一个区块的哈希值 从创始区块开始连接到当前区 块 从而形成块链 链 指的是一个庞大而完整的数据库
  • 内窥镜去反光的论文整理

    文章目录 内窥镜去反光的论文整理 Detection and correction of specular reflections for automatic surgical tool segmentation in thoracosco