运维开发网
广告位招商联系QQ:123077622
 
广告位招商联系QQ:123077622

数字图像处理——中值滤波器【像素级别处理】(python)

运维开发网 https://www.qedev.com 2021-04-14 09:03 出处:51CTO 作者:谁唱江南断肠句
数字图像处理——中值滤波器【像素级别处理】(python)文章目录数字图像处理——中值滤波器【像素级别处理】(python)简介代码实现简介中值滤波(统计排序滤波器)是一种非线性数字滤波器技术,经常用于去除图像或者其它信号中的噪声。这个设计思想就是检查输入信号中的采样并判断它是否代表了信号,使用奇数个采样组成的观察窗实现这项功能。观察窗口中的数值进行排序,位于观察窗中间的中值作为输出。然后,...

数字图像处理——中值滤波器【像素级别处理】(python)

文章目录

  • 数字图像处理——中值滤波器【像素级别处理】(python)
  • 简介
  • 代码实现

简介

中值滤波(统计排序滤波器)是一种非线性数字滤波器技术,经常用于去除图像或者其它信号中的噪声。这个设计思想就是检查输入信号中的采样并判断它是否代表了信号,使用奇数个采样组成的观察窗实现这项功能。观察窗口中的数值进行排序,位于观察窗中间的中值作为输出。然后,丢弃最早的值,取得新的采样,重复上面的计算过程。

其中中值滤波对椒盐噪声处理非常好

代码实现

输入:

数字图像处理——中值滤波器【像素级别处理】(python)

import cv2import datetimeimport numpy as npimport matplotlib.pyplot as plt

img = cv2.imread('Fig0335.tif')  # 测试图片H = img.shape[0]W = img.shape[1]img3 = np.zeros((H, W, 3), np.uint8)  # 3*3邻域平滑后的图像imgmid = np.zeros((H, W, 3), np.uint8)  # 3*3邻域内取中值的图像tmpImg = np.zeros((H + 2, W + 2, 3), np.uint8)  # 扩充之后的图像for i in range(H):for j in range(W):tmpImg[i + 1, j + 1] = img[i, j]starttime = datetime.datetime.now()for i in range(H):for j in range(W):S = []for x in range(3):for y in range(3):# S[x * 3 + y] = tmpImg[i + x, j + y, 0]S.append(tmpImg[i + x, j + y, 0])img3[i, j, 0] = sum(S) // 9img3[i, j, 1] = img3[i, j, 0]img3[i, j, 2] = img3[i, j, 0]# 冒泡排序,只要排到中间一个值,即4,因此x范围是8->3# for x in range(8, 3, -1):#     for y in range(x):#         if S[y + 1] > S[y]:#             temp = S[y]#             S[y] = S[y + 1]#             S[y + 1] = temp# 自带的排序,timesort,经过测试,这个比冒泡排序要快60%S.sort()print(S)imgmid[i, j, 0] = S[4]imgmid[i, j, 1] = imgmid[i, j, 0]imgmid[i, j, 2] = imgmid[i, j, 0]endtime = datetime.datetime.now()print(endtime - starttime)# 原图plt.subplot(1, 3, 1)plt.axis('off')plt.title('Original image')plt.imshow(img)# 3*3邻域plt.subplot(1, 3, 2)plt.axis('off')plt.title('3*3 smoothing')plt.imshow(img3)# 邻域中值替换之后plt.subplot(1, 3, 3)plt.axis('off')plt.title('Middle Value Replaced Image')plt.imshow(imgmid)plt.show()

输出:

数字图像处理——中值滤波器【像素级别处理】(python)

import cv2import datetimeimport numpy as npimport matplotlib.pyplot as plt

img = cv2.imread('Fig0335.tif')  # 测试图片H = img.shape[0]W = img.shape[1]img3 = np.zeros((H, W, 3), np.uint8)  # 3*3邻域平滑后的图像imgmid = np.zeros((H, W, 3), np.uint8)  # 3*3邻域内取中值的图像imgmid5 = np.zeros((H, W, 3), np.uint8)tmpImg = np.zeros((H + 2, W + 2, 3), np.uint8)  # 扩充之后的图像tmpImg5 = np.zeros((H + 4, W + 4, 3), np.uint8)for i in range(H):for j in range(W):tmpImg[i + 1, j + 1] = img[i, j]tmpImg5[i + 2, j + 2] = img[i, j]starttime = datetime.datetime.now()for i in range(H):for j in range(W):S = []T = []for x in range(3):for y in range(3):# S[x * 3 + y] = tmpImg[i + x, j + y, 0]S.append(tmpImg[i + x, j + y, 0])# img3[i, j, 0] = sum(S) // 9# img3[i, j, 1] = img3[i, j, 0]# img3[i, j, 2] = img3[i, j, 0]# 冒泡排序,只要排到中间一个值,即4,因此x范围是8->3# for x in range(8, 3, -1):#     for y in range(x):#         if S[y + 1] > S[y]:#             temp = S[y]#             S[y] = S[y + 1]#             S[y + 1] = temp# 自带的排序,timesort,经过测试,这个比冒泡排序要快60%S.sort()print(S)imgmid[i, j, 0] = S[4]imgmid[i, j, 1] = imgmid[i, j, 0]imgmid[i, j, 2] = imgmid[i, j, 0]for x in range(5):for y in range(5):T.append(tmpImg5[i + x, j + y, 0])T.sort()imgmid5[i, j, 0] = T[12]imgmid5[i, j, 1] = T[12]imgmid5[i, j, 2] = T[12]endtime = datetime.datetime.now()print(endtime - starttime)# 原图plt.subplot(1, 3, 1)plt.axis('off')plt.title('Original image')plt.imshow(img)# 3*3邻域plt.subplot(1, 3, 2)plt.axis('off')plt.title('5*5 smoothing')plt.imshow(imgmid5)# 邻域中值替换之后plt.subplot(1, 3, 3)plt.axis('off')plt.title('Middle Value Replaced Image')plt.imshow(imgmid)plt.show()

数字图像处理——中值滤波器【像素级别处理】(python)

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号