第5章 Python 数字图像处理(DIP) - 图像复原与重建10 - 空间滤波 - 统计排序滤波器 - 中值、最大值、最小值、中点、修正阿尔法均值滤波器

标题

      • 统计排序滤波器
        • 中值、最大值、最小值、中点 滤波器
        • 修正阿尔法均值滤波器

统计排序滤波器

中值、最大值、最小值、中点 滤波器

f^(x,y)=median{g(r,c)}(5.27)\hat{f}(x, y) = \text{median} \{g(r,c)\} \tag{5.27}f^(x,y)=median{g(r,c)}(5.27)
f^(x,y))=max{g(r,c)}(5.28)\hat{f}(x, y)) = \text{max} \{g(r,c)\} \tag{5.28}f^(x,y))=max{g(r,c)}(5.28)
f^(x,y)=min{g(r,c)}(5.29)\hat{f}(x, y) = \text{min} \{g(r,c)\} \tag{5.29}f^(x,y)=min{g(r,c)}(5.29)
f^(x,y)=12[max{g(r,c)}+min{g(r,c)}](5.30)\hat{f}(x, y) = \frac{1}{2}\big[\text{max}\{g(r,c)\} + \text{min}\{g(r,c)\} \big] \tag{5.30}f^(x,y)=21[max{g(r,c)}+min{g(r,c)}](5.30)

中值滤波器应用广泛,因为与大小相同的线性平滑滤波器相比,它能有效地降低某些随机噪声,且模糊度要小得多。对于单极和双极冲激噪声,中值滤波器的效果更好,但多次使用中值滤波器会使用图像模糊。

最大值滤波器可用于找到图像中的最亮点,或用于消弱与明亮区域相信的暗色区域。此外由于胡椒噪声的值很低,因此可用这种滤波器来降低胡椒噪声

最小值滤波器用于找到图像中的最暗点,或用于削弱与暗色区域的明亮区域。此外,还可通过最小运算降低盐粒噪声

中点滤波器是统计排序滤波器与平均滤波器的结合。它最适合于处理随机分布的噪声,如高斯噪声或均匀噪声

修正阿尔法均值滤波器

f^(x,y)=1mn−d∑g(r,c)(5.31)\hat{f}(x, y) = \frac{1}{mn - d} \sum g(r,c) \tag{5.31}f^(x,y)=mnd1g(r,c)(5.31)

d的取值范围是从0到mn−10到mn - 10mn1。 当d=0d=0d=0时,简化为算术平均滤波器。当d=mn−1d=mn-1d=mn1,那么为中值滤波器。ddd取其它值时,修正阿尔法滤波器适合于处理多种混合噪声,如高斯噪声和椒盐噪声。

使用时需要选取合适的ddd值,才能得到比较好的结果,不同的值差别也很大。

# 中值、最大值、最小值、中点 滤波器
def median_filter(image, kernel):"""median filter, math: $$\hat{f}(x, y) = \text{median} \{g(r,c)\}$$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 median filter"""height, 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")image_result = np.zeros(image.shape)for i in range(height):for j in range(width):temp = image_pad[i:i + m, j:j + n]image_result[i, j] = np.median(temp)return image_resultdef max_filter(image, kernel):"""max filter, math: $$\hat{f}(x, y)) = \text{max} \{g(r,c)\}$$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 max filter"""height, 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="constant", constant_values=0)img_result = np.zeros(image.shape)for i in range(height):for j in range(width):temp = image_pad[i:i + m, j:j + n]img_result[i, j] = np.max(temp)return img_resultdef min_filter(image, kernel):"""min filter, math: $$\hat{f}(x, y) = \text{min} \{g(r,c)\}$$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 min filter"""height, 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):temp = image_pad[i:i + m, j:j + n]img_result[i, j] = np.min(temp)return img_resultdef middle_filter(image, kernel):"""middle filter, math: $$\hat{f}(x, y) = \frac{1}{2}\big[\text{max}\{g(r,c)\} + \text{min}\{g(r,c)\} \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 middle filter"""height, 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):temp = image_pad[i:i + m, j:j + n]img_result[i, j] = int(temp.max()/2 + temp.min()/2)return img_result
# 中值、最大值、最小值、中点 滤波器处理胡椒噪声
img_ori = cv2.imread('DIP_Figures/DIP3E_Original_Images_CH05/Fig0508(a)(circuit-board-pepper-prob-pt1).tif', 0) #直接读为灰度图像kernel = np.ones([3, 3])
img_median = median_filter(img_ori, kernel=kernel)
img_max = max_filter(img_ori, kernel=kernel)
img_min = min_filter(img_ori, kernel=kernel)
img_middle = middle_filter(img_ori, kernel=kernel)plt.figure(figsize=(15, 10))plt.subplot(231), plt.imshow(img_ori, 'gray'), plt.title('Original'), plt.xticks([]), plt.yticks([])
plt.subplot(232), plt.imshow(img_median, 'gray'), plt.title('Median filter'), plt.xticks([]), plt.yticks([])
plt.subplot(233), plt.imshow(img_max, 'gray'), plt.title('Max filter'), plt.xticks([]), plt.yticks([])
plt.subplot(234), plt.imshow(img_min, 'gray'), plt.title('Min filter'), plt.xticks([]), plt.yticks([])
plt.subplot(235), plt.imshow(img_middle, 'gray'), plt.title('Middle filter'), plt.xticks([]), plt.yticks([])
plt.tight_layout()
plt.show()

在这里插入图片描述

# 中值、最大值、最小值、中点 滤波器处理盐粒噪声
img_ori = cv2.imread('DIP_Figures/DIP3E_Original_Images_CH05/Fig0508(b)(circuit-board-salt-prob-pt1).tif', 0) #直接读为灰度图像kernel = np.ones([3, 3])
img_median = median_filter(img_ori, kernel=kernel)
img_max = max_filter(img_ori, kernel=kernel)
img_min = min_filter(img_ori, kernel=kernel)
img_middle = middle_filter(img_ori, kernel=kernel)plt.figure(figsize=(15, 10))plt.subplot(231), plt.imshow(img_ori, 'gray'), plt.title('Original'), plt.xticks([]), plt.yticks([])
plt.subplot(232), plt.imshow(img_median, 'gray'), plt.title('Median filter'), plt.xticks([]), plt.yticks([])
plt.subplot(233), plt.imshow(img_max, 'gray'), plt.title('Max filter'), plt.xticks([]), plt.yticks([])
plt.subplot(234), plt.imshow(img_min, 'gray'), plt.title('Min filter'), plt.xticks([]), plt.yticks([])
plt.subplot(235), plt.imshow(img_middle, 'gray'), plt.title('Middle filter'), plt.xticks([]), plt.yticks([])
plt.tight_layout()
plt.show()

在这里插入图片描述

# 中值、最大值、最小值、中点 滤波器处理高斯噪声
img_ori = cv2.imread('DIP_Figures/DIP3E_Original_Images_CH05/Fig0507(b)(ckt-board-gauss-var-400).tif', 0) #直接读为灰度图像kernel = np.ones([3, 3])
img_median = median_filter(img_ori, kernel=kernel)
img_max = max_filter(img_ori, kernel=kernel)
img_min = min_filter(img_ori, kernel=kernel)
img_middle = middle_filter(img_ori, kernel=kernel)plt.figure(figsize=(15, 10))plt.subplot(231), plt.imshow(img_ori, 'gray'), plt.title('Original'), plt.xticks([]), plt.yticks([])
plt.subplot(232), plt.imshow(img_median, 'gray'), plt.title('Median filter'), plt.xticks([]), plt.yticks([])
plt.subplot(233), plt.imshow(img_max, 'gray'), plt.title('Max filter'), plt.xticks([]), plt.yticks([])
plt.subplot(234), plt.imshow(img_min, 'gray'), plt.title('Min filter'), plt.xticks([]), plt.yticks([])
plt.subplot(235), plt.imshow(img_middle, 'gray'), plt.title('Middle filter'), plt.xticks([]), plt.yticks([])
plt.tight_layout()
plt.show()

在这里插入图片描述

# 多次中值滤波器处理椒盐噪声
img_ori = cv2.imread('DIP_Figures/DIP3E_Original_Images_CH05/Fig0507(a)(ckt-board-orig).tif', 0) #直接读为灰度图像img_salt_pepper = add_salt_pepper(img_ori, ps=0.1, pp=0.1)kernel = np.ones([3, 3])
img_median_1 = median_filter(img_salt_pepper, kernel=kernel)
img_median_2 = median_filter(img_median_1, kernel=kernel)
img_median_3 = median_filter(img_median_2, kernel=kernel)plt.figure(figsize=(15, 10))
plt.subplot(231), plt.imshow(img_ori, 'gray'), plt.title('Original'), plt.xticks([]), plt.yticks([])
plt.subplot(232), plt.imshow(img_salt_pepper, 'gray'), plt.title('With salt pepper 0.1'), plt.xticks([]), plt.yticks([])
plt.subplot(233), plt.imshow(img_median_1, 'gray'), plt.title('1 time Median filter'), plt.xticks([]), plt.yticks([])
plt.subplot(234), plt.imshow(img_median_2, 'gray'), plt.title('2 times Median filter'), plt.xticks([]), plt.yticks([])
plt.subplot(235), plt.imshow(img_median_3, 'gray'), plt.title('3 times Median filter'), plt.xticks([]), plt.yticks([])
plt.tight_layout()
plt.show()

在这里插入图片描述

def modified_alpha_mean(image, kernel, d=0):"""modified alpha filter, math: $$$$\hat{f}(x, y) = \frac{1}{mn - d} \sum g(r,c)$$param: image:  input image for denoisingparam: kernel: input kernel, actually only use kernel shape, just want to keep the format as mean filterparam: d     : input int, which is from 0 to m * nreturn: image after modified alpha filter"""height, 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):temp = np.sum(image_pad[i:i + m, j:j + n] * 1)img_result[i, j] = temp / (m * n - d)return img_result
# 修正阿尔法滤波器处理高斯噪声
img_ori = cv2.imread('DIP_Figures/DIP3E_Original_Images_CH05/Fig0507(b)(ckt-board-gauss-var-400).tif', 0) #直接读为灰度图像kernel = np.ones([3, 3])img_median = median_filter(img_ori, kernel=kernel)
img_max = max_filter(img_ori, kernel=kernel)
img_min = min_filter(img_ori, kernel=kernel)
img_alpha_d_1 = modified_alpha_mean(img_ori, kernel, d=1)
img_alpha_d_05 = modified_alpha_mean(img_ori, kernel, d=0.5)plt.figure(figsize=(15, 10))
plt.subplot(231), plt.imshow(img_ori, 'gray'), plt.title('Original'), plt.xticks([]), plt.yticks([])
plt.subplot(232), plt.imshow(img_median, 'gray'), plt.title('Median filter'), plt.xticks([]), plt.yticks([])
plt.subplot(233), plt.imshow(img_max, 'gray'), plt.title('Max filter'), plt.xticks([]), plt.yticks([])
plt.subplot(234), plt.imshow(img_min, 'gray'), plt.title('Min filter'), plt.xticks([]), plt.yticks([])
plt.subplot(235), plt.imshow(img_alpha_d_1, 'gray'), plt.title('Modified alpha d=1'), plt.xticks([]), plt.yticks([])
plt.subplot(236), plt.imshow(img_alpha_d_05, 'gray'), plt.title('Modified alpha d=0.5'), plt.xticks([]), plt.yticks([])
plt.tight_layout()
plt.show()

在这里插入图片描述

# 修正阿尔法滤波器处理高斯噪声+椒盐噪声
img_ori = cv2.imread('DIP_Figures/DIP3E_Original_Images_CH05/Fig0507(a)(ckt-board-orig).tif', 0) #直接读为灰度图像img_uniform = cv2.imread('DIP_Figures/DIP3E_Original_Images_CH05/Fig0512(a)(ckt-uniform-var-800).tif', 0) 
img_salt_pepper = cv2.imread('DIP_Figures/DIP3E_Original_Images_CH05/Fig0512(b)(ckt-uniform-plus-saltpepr-prob-pt1).tif', 0) kernel = np.ones([5, 5])img_geometric_mean = geometric_mean(img_salt_pepper, kernel=kernel)
img_dst = img_salt_pepper - img_geometric_mean
img_median = median_filter(img_salt_pepper, kernel=kernel)
img_modified_alpha = modified_alpha_mean(img_salt_pepper, kernel=kernel, d=1)plt.figure(figsize=(15, 10))plt.subplot(231), plt.imshow(img_ori, 'gray'), plt.title('Original'), plt.xticks([]),plt.yticks([])
plt.subplot(232), plt.imshow(img_uniform, 'gray'), plt.title('Uniform noise'), plt.xticks([]),plt.yticks([])
plt.subplot(233), plt.imshow(img_salt_pepper, 'gray'), plt.title('Uniform plus salt pepper'), plt.xticks([]),plt.yticks([])
plt.subplot(234), plt.imshow(img_dst, 'gray'), plt.title('Geometric mean'), plt.xticks([]),plt.yticks([])
plt.subplot(235), plt.imshow(img_median, 'gray'), plt.title('1 time Median filter'), plt.xticks([]),plt.yticks([])
plt.subplot(236), plt.imshow(img_modified_alpha, 'gray'), plt.title('Modified alpha mean d=6'), plt.xticks([]),plt.yticks([])
plt.tight_layout()
plt.show()

在这里插入图片描述

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

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

相关文章

如何设置坐标原点值_氨气检测仪电化学原理及报警值如何设置

氨气体检测仪检定规程:一般氨气体检测仪检定规程主要是针对技术参数设定的一些标准,具体包含有规程的名称和范围、仪器示值误差、充分性标准差、响应时间、稳定性、报警功能、流量控制器、检定项目表、检定操作有数值误差、重复性、响应时间、稳定性等。…

统计信息及相关说明

统计信息:0 recursive calls20434 db block gets 317970511 consistent gets 0 physical reads 3759764 redo size 382 bytes sent via SQL*Net to client 1061 bytes received via SQL*Net from client 3 SQL*Ne…

Android横竖屏切换的生命周期

关于Android手机横竖屏切换时Activity的生命周期问题,网上有很多相似的文章,大多数都是说明在竖屏切换横屏时Activity会重启一次,而在横屏切换竖屏时Activity会重启两次。 我本身不太理解这样设计的意义,并且觉得新版本会解决这个…

python 随机字符串_python生成随机数、随机字符串

python生成随机数、随机字符串 import random import string # 随机整数: print random.randint(1,50) # 随机选取0到100间的偶数: print random.randrange(0, 101, 2) # 随机浮点数: print random.random() print random.uniform(1, 10) # 随…

ACM 会场安排问题

会场安排问题 时间限制:3000 ms | 内存限制:65535 KB难度:4描述学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办。小刘的工作就是安排学校小礼堂的活动,…

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

标题自适应滤波器自适应局部降噪滤波器自适应中值滤波器自适应滤波器 自适应局部降噪滤波器 均值是计算平均值的区域上的平均灰度,方差是该区域上的图像对比度 g(x,y)g(x, y)g(x,y)噪声图像在(x,y)(x, y)(x,y)处的值 ση2\sigma_{\eta}^2ση2​ 为噪声的方差&am…

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

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

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

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

Linux查看物理CPU个数、核数、逻辑CPU个数

# 总核数 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 物理CPU个数 X 每颗物理CPU的核数 X 超线程数# 查看物理CPU个数 cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l# 查看每个物理CPU中core的个数(即核数) cat /proc/cpuinfo| grep "cpu …

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

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

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

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

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

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

Android之Menu动态改变文字

Menu创建: 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…

iOS 开发周报:Apple 发布 iPhone 7 / 7 Plus 、Apple Watch 2 等新品

新闻\\Apple 发布 iPhone 7 / 7 Plus 、Apple Watch 2 等新品:Apple 正式发布了 iPhone 7 / 7 Plus、Apple Watch 2 新品,带来 AirPods 无线耳机,并把马里奥带进了 iOS。iPhone 7 新增亮黑色,移除3.5mm 耳机孔,支持 IP…

python写界面c这算法_插入算法分别从C,java,python三种语言进行书写

真正学懂计算机的人(不只是“编程匠”)都对数学有相当的造诣,既能用科学家的严谨思维来求证,也能用工程师的务实手段来解决问题——而这种思维和手段的最佳演绎就是“算法”。 作为一个初级编程人员或者说是一个程序员&#xff0c…

去掉xcode中警告的一些经验

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

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

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

Flash系统字体中的中文字体问题

在flash中使用as来改变textfield的中文字体 ,遇到发布版本超过10.2的时候,会悲剧!不支持使用中文名称来改变字体。 解决办法:1)使用英文名称。2)发布的版本低于10.2 label:TextField new TextField(); for…

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

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

视觉感受排序算法

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