第5章 Python 数字图像处理(DIP) - 图像复原与重建11 - 空间滤波 - 自适应滤波器 - 自适应局部降噪、自适应中值滤波器

标题

      • 自适应滤波器
        • 自适应局部降噪滤波器
        • 自适应中值滤波器

自适应滤波器

自适应局部降噪滤波器

均值是计算平均值的区域上的平均灰度,方差是该区域上的图像对比度

g(x,y)g(x, y)g(x,y)噪声图像在(x,y)(x, y)(x,y)处的值
ση2\sigma_{\eta}^2ση2 为噪声的方差,为常数,需要通过估计得到
zˉSxy\bar{z}_{S_{xy}}zˉSxy 为局部平均灰度
σSxy2\sigma_{S_{xy}}^2σSxy2 为局部方差

f^(x,y)=g(x,y)−ση2σSxy2[g(x,y)−zˉSxy](5.32)\hat{f}(x,y) = g(x,y) - \frac{\sigma_{\eta} ^ 2 }{\sigma_{S_{xy}}^2} \big[ g(x,y) - \bar z_{S_{xy}}\big] \tag{5.32}f^(x,y)=g(x,y)σSxy2ση2[g(x,y)zˉSxy](5.32)

ση2>ση2\sigma_{\eta}^2 > \sigma_{\eta}^2ση2>ση2 时,将比率设置为1,这样做会使得滤波器是非线性的,但可阻止因缺少图像噪声方差的知识而产生无意义的结果(即负灰度级)。

ση2\sigma_{\eta}^2ση2估计值太低时,算法会因校正量小于就有的值而返回与原图像接近的图像。估计值太高会使得方差的比率在1.0处被水平,与正常情况相比,算法会更频繁地从图像中减去平均值。若允许为负值,且最后重新标定图像,则如前所述,结果 将损失图像的动态范围。

整个图像的相关值:
μn=∑i=0L−1(ri−m)np(ri)\mu_n = \sum_{i=0}^{L-1}(r_i -m)^n p(r_i)μn=i=0L1(rim)np(ri) 为灰度值r相对于其均值同的第n阶矩
m=∑i=0L−1rip(ri)m = \sum_{i=0}^{L-1} r_i p(r_i)m=i=0L1rip(ri) 均值
σ2=μ2=∑i=0L−1(ri−m)2p(ri)\sigma^2 = \mu_2 = \sum_{i=0}^{L-1}(r_i - m)^2 p(r_i)σ2=μ2=i=0L1(rim)2p(ri) 方差

邻域内的相关值:
mSxy=∑i=0L−1riPSxy(ri)m_{S_{xy}} = \sum_{i=0}^{L-1} r_i P_{S_{xy}}(r_i)mSxy=i=0L1riPSxy(ri) 均值
σSxy2=μ2=∑i=0L−1(ri−mSxy)2PSxy(ri)\sigma_{S_{xy}}^2 = \mu_2 = \sum_{i=0}^{L-1}(r_i - m_{S_{xy}})^2 P_{S_{xy}}(r_i)σSxy2=μ2=i=0L1(rimSxy)2PSxy(ri) 方差

def calculate_sigma_eta(image):""":param image: input image:return: sigma eta of image"""hist, bins = np.histogram(image.flatten(), bins=256, range=[0, 256], density=True)r = bins[:-1]m = np.sum(r * hist)sigma = np.sum((r - m)**2 * hist)return sigmadef calculate_sigma_sxy(block):"""param block: input blockreturn: sigma sxy of block"""#==========公式法==========hist, bins = np.histogram(block.flatten(), bins=256, range=[0, 256], density=True)r = bins[:-1]m = (r * hist).sum()sigma = ((r - m)**2 * hist).sum()#===========等价于========
#     m = np.mean(block)
#     sigma = np.var(block)return sigma, m
def adaptive_local_denoise(image, kernel, sigma_eta=1):"""adaptive local denoising math: $$\hat{f}(x,y) = g(x,y) - \frac{\sigma_{\eta} ^ 2 }{\sigma_{S_{xy}}^2} \big[ g(x,y) - \bar z_{S_{xy}}\big]$$param: image:  input image for denoisingparam: kernel: input kernel, actually only use kernel shape, just want to keep the format as mean filterreturn: image after adaptive local denoising """epsilon = 1e-8height, width = image.shape[:2]m, n = kernel.shape[:2]padding_h = int((m -1)/2)padding_w = int((n -1)/2)# 这样的填充方式,可以奇数核或者偶数核都能正确填充image_pad = np.pad(image, ((padding_h, m - 1 - padding_h), \(padding_w, n - 1 - padding_w)), mode="edge")img_result = np.zeros(image.shape)for i in range(height):for j in range(width):block = image_pad[i:i + m, j:j + n]gxy = image[i, j]z_sxy = np.mean(block)sigma_sxy = np.var(block)rate = sigma_eta / (sigma_sxy + epsilon)if rate >= 1:rate = 1img_result[i, j] = gxy - rate * (gxy - z_sxy)return img_result
# 自适应局部降噪滤波器处理高斯噪声
img_ori = cv2.imread('DIP_Figures/DIP3E_Original_Images_CH05/Fig0513(a)(ckt_gaussian_var_1000_mean_0).tif', 0) #直接读为灰度图像kernel = np.ones([7, 7])
img_arithmentic_mean = arithmentic_mean(img_ori, kernel=kernel)
img_geometric_mean = geometric_mean(img_ori, kernel=kernel)
img_adaptive_local = adaptive_local_denoise(img_ori, kernel=kernel, sigma_eta=1000)plt.figure(figsize=(10, 10))plt.subplot(221), plt.imshow(img_ori, 'gray'), plt.title('With Gaussian noise'), plt.xticks([]),plt.yticks([])
plt.subplot(222), plt.imshow(img_arithmentic_mean, 'gray'), plt.title('Arithmentic mean'), plt.xticks([]),plt.yticks([])
plt.subplot(223), plt.imshow(img_geometric_mean, 'gray'), plt.title('Geomentric mean'), plt.xticks([]),plt.yticks([])
plt.subplot(224), plt.imshow(img_adaptive_local, 'gray'), plt.title('Adaptive local denoise'), plt.xticks([]),plt.yticks([])
plt.tight_layout()
plt.show()

在这里插入图片描述

自适应中值滤波器

zmin是Sxyz_{\text{min}}是S_{xy}zminSxy邻域中的最小灰度值;zmax是Sxyz_{\text{max}}是S_{xy}zmaxSxy邻域中的最大灰度值;zmed是Sxyz_{\text{med}}是S_{xy}zmedSxy邻域中的中值, zxyz_{xy}zxy是坐标(x,y)(x,y)(x,y)处的灰度值;SmaxS_{\text{max}}SmaxSxyS_{xy}Sxy允许的最大尺寸,是大于1的奇正整数。

自适应中值滤波算法在点(x,y)(x, y)(x,y)处使用两个处理层次,分别表示为层次AAA和层次BBB:

层次AAA:
zmin<zmed<zmaxz_{\text{min}} < z_{\text{med}} < z_{\text{max}}zmin<zmed<zmax 则转到层次B
否则,增SxyS_{xy}Sxy的尺寸,
Sxy≤SmaxS_{xy} \leq S_{\text{max}}SxySmax, 则重复层次A
否则,输出zmedz_{\text{med}}zmed

层次BBB
zmin<zxy<zmaxz_{\text{min}} < z_{xy} < z_{\text{max}}zmin<zxy<zmax,则输出zxyz_{xy}zxy
否则,输出 zmedz_{\text{med}}zmed

这算法有3个主要的目的:去除椒盐(冲激)噪声,平滑其他非常冲激噪声,减少失真(如目标边界的过度细化)。该算法统计上认为zminz_{\text{min}}zminzmaxz_{\text{max}}zmax是区域SxyS_{xy}Sxy的“类冲激”噪声分量,即使它们不是图像中的最小像素和最大像素值。

能很好的处理椒盐噪声,但对高斯噪声不敏感

def adaptive_median_denoise(image, sxy=3, smax=7):"""adaptive median denoising param: image: input image for denoisingparam: sxy  : minimum kernel sizeparam: smax : maximum kernel sizereturn: image after adaptive median denoising """epsilon = 1e-8height, width = image.shape[:2]m, n = smax, smaxpadding_h = int((m -1)/2)padding_w = int((n -1)/2)# 这样的填充方式,可以奇数核或者偶数核都能正确填充image_pad = np.pad(image, ((padding_h, m - 1 - padding_h), \(padding_w, n - 1 - padding_w)), mode="edge")img_new = np.zeros(image.shape)for i in range(padding_h, height + padding_h):for j in range(padding_w, width + padding_w):sxy = 3     #每一轮都重置  k = int(sxy/2)block = image_pad[i-k:i+k+1, j-k:j+k+1]zxy = image[i - padding_h][j - padding_w]zmin = np.min(block)zmed = np.median(block)zmax = np.max(block)if zmin < zmed < zmax:if zmin < zxy < zmax:img_new[i - padding_h, j - padding_w] = zxyelse:img_new[i - padding_h, j - padding_w] = zmedelse:while True:sxy = sxy + 2k = int(sxy / 2)if zmin < zmed < zmax or sxy > smax:breakblock = image_pad[i-k:i+k+1, j-k:j+k+1]zmed = np.median(block)zmin = np.min(block)zmax = np.max(block)if zmin < zmed < zmax or sxy > smax:if zmin < zxy < zmax:img_new[i - padding_h, j - padding_w] = zxyelse:img_new[i - padding_h, j - padding_w] = zmedreturn img_new
# 自适中值滤波器处理椒盐噪声
img_ori = cv2.imread('DIP_Figures/DIP3E_Original_Images_CH05/Fig0514(a)(ckt_saltpep_prob_pt25).tif', 0) #直接读为灰度图像kernel = np.ones([7, 7])img_arithmentic_mean = median_filter(img_ori, kernel=kernel)
img_adaptive_median = adaptive_median_denoise(img_ori)plt.figure(figsize=(15, 10))
plt.subplot(231), plt.imshow(img_ori, 'gray'), plt.title('Salt pepper noise'), plt.xticks([]),plt.yticks([])
plt.subplot(232), plt.imshow(img_arithmentic_mean, 'gray'), plt.title('Arithmentic mean'), plt.xticks([]),plt.yticks([])
plt.subplot(233), plt.imshow(img_adaptive_median, 'gray'), plt.title('Adaptive median'), plt.xticks([]),plt.yticks([])
plt.tight_layout()
plt.show()

在这里插入图片描述

# 自适中值滤波器处理高斯噪声
img_ori = cv2.imread('DIP_Figures/DIP3E_Original_Images_CH05/Fig0513(a)(ckt_gaussian_var_1000_mean_0).tif', 0) #直接读为灰度图像kernel = np.ones([7, 7])
img_arithmentic_mean = median_filter(img_ori, kernel=kernel)
img_adaptive_median = adaptive_median_denoise(img_ori)plt.figure(figsize=(15, 10))plt.subplot(231), plt.imshow(img_ori, 'gray'), plt.title('With Gaussian noise'), plt.xticks([]),plt.yticks([])
plt.subplot(232), plt.imshow(img_arithmentic_mean, 'gray'), plt.title('Arithmentic mean'), plt.xticks([]),plt.yticks([])
plt.subplot(233), plt.imshow(img_adaptive_median, 'gray'), plt.title('Adaptive median'), plt.xticks([]),plt.yticks([])
plt.tight_layout()
plt.show()

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/260592.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关闭防火墙_从零开始学Linux运维|09.关闭防火墙和SElinux

firewalld是centos7默认的防火墙安全增强型 Linux(Security-Enhanced Linux)简称 SELinux初学者建议先关闭,等熟悉了之后再来使用前期联系中的好多错误都有可能是由于没有关闭或者正确配置上面两项造成的1.临时关闭centos7下的防火墙firewalld一行命令就能够关闭firewalld--&qu…

Discuz!NT - 在线显示列表 游客 bug 修复

引发bug的条件&#xff1a;当你修改了系统组里面的[游客]组 的名字后&#xff01;&#xff01; 你会发现首页上底部的在线显示列表里始终都是显示"游客"字样而非你改过得字样&#xff01;如图 至此你需要运行一个t-sql脚本去修复这个bug&#xff01;&#xff08;但是…

基于空间方法的图神经网络模型_用于时空图建模的图神经网络模型 Graph WaveNet | 课程上新...

课程概要本课程来自集智学园图网络论文解读系列活动。是对论文《Graph WaveNet for Deep Spatial-Temporal Graph Modeling》的解读。时空图建模 (Spatial-temporal graph modeling)是分析系统中组成部分的空间维相关性和时间维趋势的重要手段。已有算法大多基于已知的固定的图…

dataframe类型数据的遍历_Python零基础入门到爬虫再到数据分析,这些你都是要学会的...

1.必须知道的两组Python基础术语A.变量和赋值Python可以直接定义变量名字并进行赋值的&#xff0c;例如我们写出a 4时&#xff0c;Python解释器干了两件事情&#xff1a;在内存中创建了一个值为4的整型数据在内存中创建了一个名为a的变量&#xff0c;并把它指向4用一张示意图表…

第5章 Python 数字图像处理(DIP) - 图像复原与重建12 - 空间滤波 - 使用频率域滤波降低周期噪声 - 陷波滤波、最优陷波滤波

标题使用频率域滤波降低周期噪声陷波滤波深入介绍最优陷波滤波本章陷波滤波器有部分得出的结果不佳&#xff0c;如果有更好的解决方案&#xff0c;请赐教&#xff0c;不胜感激。 使用频率域滤波降低周期噪声 陷波滤波深入介绍 零相移滤波器必须关于原点(频率矩形中心)对称&a…

Android之Menu动态改变文字

Menu创建&#xff1a; Override//这里遇到一个问题add的是MenuItem的idpublic boolean onCreateOptionsMenu(Menu menu) {// TODO Auto-generated method stubmenu.add(0,1023, 0, "一");menu.add(0,1022, 1, "开启线程");Log.e("onCreateOptionsMenu…

去掉xcode中警告的一些经验

1、编译时&#xff0c;编译警告忽略掉某些文件 只需在在文件的Compiler Flags 中加入 -w 参数&#xff0c;例如&#xff1a; 2、编译时&#xff0c;编译警告忽略掉某段代码 #pragma clang diagnostic push#pragma clang diagnostic ignored "-Wmultichar"char b df;…

富士施乐3065扫描教程_全面支持IT国产化 富士施乐70款机型获统信UOS兼容认证

最近&#xff0c;富士施乐&#xff08;中国&#xff09;有限公司宣布共70款机型获得国产操作系统统信UOS的兼容认证&#xff0c;其中包括新一代ApeosPort旗舰智能型数码多功能机、多功能一体机/打印机、生产型数字印刷系统。这是继获得中标麒麟、龙芯和兆芯兼容认证后&#xff…

第5章 Python 数字图像处理(DIP) - 图像复原与重建13 - 空间滤波 - 线性位置不变退化 - 退化函数估计、运动模糊函数

标题线性位置不变退化估计退化函数采用观察法估计退化函数采用试验法估计退化函数采用建模法估计退化函数运动模糊函数OpenCV Motion Blur在这一节中&#xff0c;得到的结果&#xff0c;有些不是很好&#xff0c;我需要再努力多找资料&#xff0c;重新完成学习&#xff0c;如果…

视觉感受排序算法

1. 快速排序 介绍&#xff1a; 快速排序是由东尼霍尔所发展的一种排序算法。在平均状况下&#xff0c;排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较&#xff0c;但这种状况并不常见。事实上&#xff0c;快速排序通常明显比其他Ο(n log n) 算法更快&…

python如何自定义函数_python如何自定义函数_后端开发

c语言特点是什么_后端开发 c语言特点是&#xff1a;1、语言简洁、紧凑&#xff0c;使用方便、灵活&#xff1b;2、运算符丰富&#xff1b;3、数据结构丰富&#xff0c;具有现代化语言的各种数据结构&#xff1b;4、具有结构化的控制语句&#xff1b;5、语法限制不太严度格&…

第5章 Python 数字图像处理(DIP) - 图像复原与重建14 - 逆滤波

标题逆滤波逆滤波逆滤波 逆滤波 图像的退化函数已知或者由前面的方法获取退化函数&#xff0c;则可以直接逆滤波 F^(u,v)G(u,v)H(u,v)(5.78)\hat{F}(u,v) \frac{G(u,v)}{H(u,v)} \tag{5.78}F^(u,v)H(u,v)G(u,v)​(5.78) F^(u,v)F(u,v)N(u,v)H(u,v)(5.79)\hat{F}(u,v) F(u, …

表示自己从头开始的句子_微信拍一拍后缀幽默回复有趣的句子 拍了拍唯美内容文案...

阅读本文前&#xff0c;请您先点击上面的“蓝色字体”&#xff0c;再点击“关注”&#xff0c;这样您就可以继续免费收到文章了。每天都会有分享&#xff0c;都是免费订阅&#xff0c;请您放心关注。注图文来源网络&#xff0c;侵删 …

HoloLens开发手记 - Unity之Tracking loss

当HoloLens设备不能识别到自己在世界中的位置时&#xff0c;应用就会发生tracking loss。默认情况下&#xff0c;Unity会暂停Update更新循环并显示一张闪屏图片给用户。当设备重新能追踪到位置时&#xff0c;闪屏图片会消失&#xff0c;并且Update循环还会继续。 此外&#xff…

运维学python用不上_不会Python开发的运维终将被淘汰?

简介 Python 语言是一种面向对象、直译式计算机程序设计语言&#xff0c;由 Guido van Rossum 于 1989 年底发明。Python 语法简捷而清晰&#xff0c;具有丰富和强大的类库&#xff0c;具有可扩展性和可嵌入性&#xff0c;是现代比较流行的语言。最流行的语言 IEEE Spectrum 的…

第5章 Python 数字图像处理(DIP) - 图像复原与重建15 - 最小均方误差(维纳)滤波

标题最小均方误差&#xff08;维纳&#xff09;滤波最小均方误差&#xff08;维纳&#xff09;滤波 目标是求未污染图像fff的一个估计f^\hat{f}f^​&#xff0c;使它们之间的均方误差最小。 e2E{(f−f^)2}(5.80)e^2 E \big\{(f - \hat{f})^2 \big\} \tag{5.80}e2E{(f−f^​)2…

入网许可证_入网许可证怎么办理,申请流程

移动通信系统及终端投资项目核准的若干规定》的出台&#xff0c;打开了更多企业进入手机业的大门&#xff0c;然而一些企业在关心拿到手机牌照后&#xff0c;是不是就是意味了拿到入网许可证&#xff0c;就可以上市销售。某些厂商认为:"手机牌照实行核准制&#xff0c;意味…

使用python matplotlib画图

本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/52577631 未经博主允许不得转载。 博主地址是&#xff1a;http://blog.csdn.net/freewebsys 1&#xff0c;关于 非常简单的画图类库。 简直就是matlab的命令了。 python设计都是非常简单的。 在使用pyt…

碧桂园博智林机器人总部大楼_碧桂园职院新规划曝光!将建机器人实训大楼、新宿舍、水幕电影等...

4月10日&#xff0c;广东碧桂园职业学院召开院务(扩大)会议&#xff0c;学院党政班子领导和相关负责人出席。会议集中观看了学院四期工程的规划区介绍&#xff0c;并就具体方案的可行性进行了研讨。在碧桂园集团董事局主席杨国强先生的带领下&#xff0c;碧桂园职院正紧随集团产…

第5章 Python 数字图像处理(DIP) - 图像复原与重建16 - 约束最小二乘方滤波、几何均值滤波

标题约束最小二乘方滤波几何均值滤波约束最小二乘方滤波 F^(u,v)[H∗(u,v)∣H(u,v)∣2γ∣P(u,v)∣2]G(u,v)(5.89)\hat{F}(u,v) \bigg[\frac{H^*(u,v)}{|H(u,v)|^2 \gamma |P(u,v)|^2} \bigg]G(u,v) \tag{5.89}F^(u,v)[∣H(u,v)∣2γ∣P(u,v)∣2H∗(u,v)​]G(u,v)(5.89) P(u,…