曲率高斯滤波去噪python实现(附代码详解)

本文详细介绍了曲率高斯滤波的基本原理,包括曲率概念、可展曲面、域分解方法、切平面选择及求di过程,并提供了Python代码实现。通过在图像中应用该滤波器,可以有效地去除噪声,同时保留边缘细节。文中展示了不同迭代次数下的去噪效果。
摘要由CSDN通过智能技术生成

曲率高斯滤波去噪python实现(附代码详解)

曲率滤波的理论基础可以参考下曲率滤波的理论基础和应用,这篇博客介绍的思想完美的避开了一大堆数学公式,简直是我的福音,但还是要细看的,不然很容易忽略重点,我这里就简单的做个总结,所有图片(除了我最后画的那个丑丑的图片)均来源于前面这篇博客。

曲率滤波基本原理

1、曲率

曲面上的一点有一切平面,此点处会有各个方向上的曲率,但是必然会有最大主曲率和最小主曲率,k1是最小主曲率,k2是最大主曲率,则平均曲率和高斯曲率的定义如下:
曲率

2、可展曲面

可展曲面可由其切平面局部估计而得。
可展曲面
前面我们已知,二维图像中的高斯曲率定义为两个主曲率的乘积,定理1告诉我们的是,任何可展曲面(虽然只有3个可展曲面)其任意点处的高斯曲率为零。因此,最小化其中任意一个主曲率,就相当于最小化高斯曲率!
以上结论即是高斯曲率滤波器的理论基础(我们即可实现高斯曲率的最小化而无需进行高斯曲率的显式计算):
切点的领域上必有一点也在切平面上,高斯滤波的作用是把不在这个切平面上的点可展到切平面上。

3、域分解方法

局部最小化主曲率绝对值的较小者,受限于相邻像素之间的关联性,因此,提出了一种域分解方法,以去除相邻像素之间的依赖性。(这里其实是保证在3*3的模块里相邻点没有相同的元素。)
域分解

4、切平面

选取的是三角构型用于表示曲面的切平面,下面以红色点x与其3×3邻域N(x)为例,如图6所示:
切平面
这是在此局部窗口中的一个三角切平面,得到此切平面之后,我们将红色点,即当前点拉长到绿色切平面上,就可以得到当前点到切平面的距离di,如图7所示:
在这里插入图片描述
实际上,以黑色圆形点为中心点,切平面过白色点的三角构型切平面还有3种,也就是说图8(a)中的切平面共有4种,如图9所示:
在这里插入图片描述

在这里插入图片描述
在一个3*3的模块中,三角构型切平面共有12种情况,但是仔细看图6和图7可以看出,到切平面的距离di的实际情况没有12种。以图10(a)为例说明一下,黑色圆点到切平面的距离实际上就是黑色圆点到 ”白色圆-黑色圆-白色圆” 线段的距离。
在这里插入图片描述

5、求di

当前点到切平面的投影总共有8种,即当前点到切平面的距离共有8种,{di, i=1,2,…,8},这里使用8种投影距离的最小值作为投影算子。
在这里插入图片描述

代码如下

先贴一段曲率滤波的程序,这个函数主要是实现求最小投影算子
 from __future__ import division
 import numpy as np
#曲率滤波
def update_gc(inputimg, i, j):
    #对二维数组(图片)进行操作
    #数组不取到最后一个像素点的原因,可以参考我后面画的图,因为在步长为2的情况下是取不到最后一个点的
    inputimg_ij = inputimg[i:-1:2, j:-1:2]
#求di(根据公式写程序,基点是[i:-1:2, j:-1:2])
#d1中[i - 1:-2:2, j:-1:2] 也可以参考后面画的图,因为它是基点的左边一个点,是模块中心点正左方的点,所以取不到倒数第二个点
    d1 = (inputimg[i - 1:-2:2, j:-1:2] + inputimg[i + 1::2, j:-1:2])/2.0 
        - inputimg[i:-1:2, j:-1:2]
    d2 = (inputimg[i:-1:2, j - 1:-2:2] + inputimg[i:-1:2, j + 1::2])/2.0 
        - inputimg[i:-1:2
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值