Frangi2D滤波详解
我打算把算法分析文章转到:https://www.cnblogs.com/isYiming/p/11111087.html
这里啦
利用Hessian矩阵的滤波函数Frangi,网上的文章只是把论文中的公式贴出来了。
我感觉分析下滤波函数是怎么起作用,还是挺有意思的一件事情。
Frangi滤波方法的论文是:
Frangi A F, Niessen W J, Vincken K L, et al. Multiscale vessel enhancement filtering[C]//International Conference on Medical Image Computing and Computer-Assisted Intervention. Springer Berlin Heidelberg, 1998: 130-137.
Matlab版程序在:
https://ww2.mathworks.cn/matlabcentral/fileexchange/24409-hessian-based-frangi-vesselness-filter?s_tid=gn_loc_drop
我改写了一个python版的在:
https://github.com/yimingstyle/Frangi-filter-based-Hessian
这里我先只说二维方法。
Hessian矩阵是:
$$H=\left[ \begin{matrix} I_{xx} & I_{xy} \\ I_{yx} & I_{yy} \end{matrix} \right] \tag{1} $$
由于Hessian是二阶偏导数组成的,对噪声非常敏感。就像使用拉普拉斯算子进行边缘检测一样,首先进行平滑非常必要。
所以论文中首先对图像进行高斯滤波,又因为高斯滤波和求Hessian矩阵这两个操作可以同步进行,那就合并了,直接对高斯滤波矩阵求二阶导数了。
但是接下来我们分析Frangi滤波的时候一直带着这个高斯滤波器太麻烦了,我们就认定高斯滤波是单独在求Hessian之前对预处理好了。
Frangi滤波的大致步骤是:
1.求Hessian矩阵:对应函数 Hessian2D()
用卷积核$$G_{xx}$$对图像进行卷积操作得到$$I_{xx}$$,其中卷积核是$$\left[ \begin{matrix} 0&0&0\\1 &-2&1\\0&0&0 \end{matrix} \right] \tag{1} $$
以此类推得到$$I_{xy}$$和$$I_{yy}$$
2.求Hessian矩阵的两个特征值:对应函数 eig2image()
$$\left| \lambda E-H \right|=0$$
$$\left|\left[ \begin{matrix} E-I_{xx} & E-I_{xy} \\E-I_{yx} & E-I_{yy} \end{matrix} \right]\right|=0\tag{1} $$
对于图像中的某一个像素而言,它的Hessian矩阵是2*2的,所以一定存在两个特征值(重根算重数):λ1和λ2(我们设λ1为较小的那个)。
Hessian矩阵特征值和对应的特征向量分别代表该点处沿某一方向上图形曲率大小和方向。
那么λ1可以代表曲率较小的方向(灰度梯度变化小),λ2代表曲率较大的方向(灰度梯度变化大)。
构建两个变量:$$R_{b}=\frac{ \lambda_1 }{ \lambda_2 }$$和$$S=\sqrt{R_{b}^2-\lambda_2^2}$$
我们可以根据图像形态把图像中的像素大致分为三类:
1)背景,它们的灰度分布较均匀。任意方向上曲率都较小。
2)孤立的点,角点,它在任意方向上的曲率都很大。
3)血管处,一般获取的图像中,血管这个圆珠形态沿径向方向λ2上的曲率始终较大,轴向方向λ2上较小。
3.再根据Rb和S构建响应函数:
$$V_o=\left| \begin{matrix}0 if \lambda_2>0 \\ (1-\frac{R_{b}^2}{2\beta^2})^2 ( 1-( -\frac{S^2}{2c^2} )^2 ) \end{matrix} \right| \tag{1} $$
式中条件:λ2>0,这是要看我们观测的是黑色背景还是白色背景,要是白背景那就是λ2<0。这个在程序中是根据“BlackWhite”这一参数选择的。
令上式中 $$ A=- \frac{ R_{b}^2 }{ 2\beta^2 } $$
$$ B=(1-(-\frac{S^2}{2c^2})) $$
背景 | 孤立点 | 血管 | |
特征值 | λ1小 λ2小 | λ1大 λ2大 | λ1小 λ2大 |
A和B的绝对值 | A 不定 B较小 | A 接近0 B较大 | A 接近1 B较大 |
可以看到A对孤立点有抑制作用,B对背景有抑制作用,最后剩下的只有血管处的信号响应强烈。
式中的B(贝塔,用latex公式打出来直接就换行了,所以用B代替一下)用来调节区分块状区域和条状区域的敏感程度,在程序中是“FrangiBetaOne”。
如果B(贝塔)很大,那么A接近1,对孤立区域抑制就减弱了。而B(贝塔)很小,A很容易受到Rb的影响趋于0,那么在血管的弯曲处,也容易被抑制。
c影响滤波后图像的整体平滑程度。程序中是“FrangiBetaTwo”。
S对血管处的响应起关键作用,如果c较大,S的变化程度相对被压制了,图像就变得平滑。c很小,把S放大了,那么滤波后的图像(也就是滤波器的响应)就变得波动较大。
这个滤波器只有在卷积尺度和血管宽度最接近的时候效果最好。如何确定卷积尺寸呢,最直接也是最有效的方法就是--枚举法。
所以程序中就是用不同的卷积尺度去做滤波,得到的多幅滤波后图像中,在每一点处选择响应值最高的结果。函数中“FrangiScaleRange”就是枚举的尺度范围。
这一点也很好理解。我们是用高斯卷积核的二阶导数求Hessian矩阵的。
高斯函数的标准差表示卷积尺度(论文中是标准差的3倍),高斯滤波是按照高斯函数给某一点处及其周围像素设定权重,加权求平均。
所以假设我们的卷积尺度比血管宽度大很多,那么得到的卷积结果就会被背景处拉低,因为背景处的灰度梯度变化是较小的。
而当卷积尺度比血管宽度小很多时,无论噪声还是块状区域都会被滤波器保留。
Frangi2D滤波详解相关推荐
- OpenCV实战(12)——图像滤波详解
OpenCV实战(12)--图像滤波详解 0. 前言 1. 频域分析 2. 低通滤波器 3. 图像下采样 3.1 使用低通滤波器下采样图像 3.2 内插像素值 4. 中值滤波器 5. 完整代码 小结 ...
- python 数据、曲线平滑处理——基于Numpy.convolve实现滑动平均滤波——详解
文章目录 1 基于Numpy.convolve实现滑动平均滤波 1.1 滑动平均概念 1.2 滑动平均的数学原理 1.3 语法 1.4 滑动平均滤波示例 2 曲线平滑处理--Savitzky-Gola ...
- 【学习记录】贝叶斯滤波详解
贝叶斯滤波详解 贝叶斯滤波的用途(Bayesian Filtering): 贝叶斯滤波理论的应用可谓十分广泛.我们知道,在机器人运动过程中,有两个方面的信息来源,一个是通过我们实际控制机器人的运动路线 ...
- android opencv中图像分割,opencv在android平台下的开发【4】-图像滤波详解
前言 在上一篇opencv-android-图像平滑处理文章中,简单介绍了几种图像平滑,也就是图像模糊的方法,使用了几个简单的滤波器,这都属于图像的滤波操作. opencv针对图像的处理提供了imgp ...
- Zygo干涉仪面形滤波详解
目录 1. Zygo MetroPro滤波面板 2. Zygo MetroPro滤波面板功能详解 Filter Filter Type Filter Trim Filter Window Size F ...
- 高斯滤波详解 python实现高斯滤波
一. 高斯滤波 高斯滤波是一种线性平滑滤波器,对于服从正态分布的噪声有很好的抑制作用.在实际场景中,我们通常会假定图像包含的噪声为高斯白噪声,所以在许多实际应用的预处理部分,都会采用高斯滤波抑制噪声. ...
- Frangi形态学滤波详解
利用Hessian矩阵的滤波函数Frangi,网上的文章只是把论文中的公式贴出来了. 我感觉分析下滤波函数是怎么起作用,还是挺有意思的一件事情. Frangi滤波方法的论文是: Frangi A F, ...
- matlab实现形态学滤波,Frangi形态学滤波详解
利用Hessian矩阵的滤波函数Frangi,网上的文章只是把论文中的公式贴出来了. 我感觉分析下滤波函数是怎么起作用,还是挺有意思的一件事情. Frangi滤波方法的论文是: Frangi A F, ...
- 【OpenCV 4开发详解】中值滤波
本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...
最新文章
- C#中Hashtable表的应用
- mysql所支持的比较运算符_mysql比较运算符有哪些?Mysql比较运算符详解
- 8.2 css3 新增标签 盒子模型 长度单位 颜色 渐变 径像渐变
- Yii2.x 互斥锁Mutex-类图
- Android 系统(4)---Android HAL层与Linux Kernel层驱动开发简介
- 用@Scheduled完成定时任务
- 【深扒】深入理解 JavaScript 中的异步编程
- 基于边缘AI计算的人员入侵检测CNN算法在实际场景中的应用
- ENVI FLAASH 大气校正方案问题汇总
- 计算机u盘病毒清除方式,终极:如何消除计算机上U盘的“文件夹.EXE病毒”?
- 3种漂亮的登录表单页面css3+html5模板
- 深度报道 第1个从太空发回的LoRa信号(含视频)
- 机器学习领域各领域必读经典综述论文整理分享
- 风靡全球的心里测试 席卷全球的心里测试 全球火热议论的心里测试
- 人生十鉴:大喜易失言,大哀易失值
- 十六、基于FPGA的CRC校验设计实现
- 奥克兰大学计算机专业硕士,奥克兰大学计算机专业硕士
- 单独给axios设置请求头
- 计算机毕业设计springboot酒店客房管理系统8yj0v源码+系统+程序+lw文档+部署
- A记录和CNAME记录——【网络】
热门文章
- IPFS DHT专题:去中心化搜索的架构演进
- A. K-divisible Sum
- ImageJ自动批量多通道图片无损分离为单色荧光图
- Cloudera Manager安装之利用parcels方式安装3或4节点集群(包含最新稳定版本或指定版本的安装)(添加服务)(CentOS6.5)(五)...
- eclipse neno 将jar包自动导入WEB-INF\lib
- c# mailgun 发送邮件测试
- 第一个 Spark Steaming 程序
- Android 65536 详解!
- ISIS与OSPF区别
- VMware下的 Kali Linux 免安装