均值滤波与中值滤波csdn
时间: 2023-10-21 08:31:51 浏览: 37
均值滤波和中值滤波都是常用的图像处理方法,用于去除图像中的噪声。
均值滤波是一种线性平滑滤波技术,它将像素的值替换为周围像素的平均值。这种方法的优点是简单快速,但缺点是会使图像失去一些细节信息,因为它会平滑掉图像中的细节部分。
中值滤波是一种非线性平滑滤波技术,它将像素的值替换为周围像素的中位数。这种方法的优点是可以保留图像中的细节信息,因为它不会像均值滤波那样平滑掉图像中的细节部分。缺点是它的计算量较大,因为需要对像素进行排序,而且在处理边缘部分时可能会出现失真。
一般来说,如果图像中的噪声比较小且不是很明显,可以使用均值滤波。如果图像中的噪声比较大或者需要保留图像中的细节信息,则可以使用中值滤波。
相关问题
对一幅图像依次添加高斯噪声、椒盐噪声,分别运用算术均值滤波、几何均值滤波、中值滤波、修正的阿尔法均值滤波进行图像恢复,显示并比较分析结果
首先,我们需要了解一下几种滤波器的原理和应用场景。
1. 算术均值滤波器:对于每个像素点,将其周围的像素点取平均值作为该像素点的值。适用于轻度噪声。
2. 几何均值滤波器:对于每个像素点,将其周围的像素点取几何平均值作为该像素点的值。适用于轻度噪声。
3. 中值滤波器:对于每个像素点,将其周围的像素点排序,取中间值作为该像素点的值。适用于椒盐噪声。
4. 修正的阿尔法均值滤波器:对于每个像素点,将其周围的像素点按照权重进行加权平均,其中离该像素点较远的像素点权重较小。适用于高斯噪声。
接下来,我们先生成一张测试图像:
```
import cv2
import numpy as np
# 生成测试图像
img = np.zeros((300, 300), np.uint8)
cv2.rectangle(img, (50, 50), (250, 250), (255, 255, 255), -1)
cv2.circle(img, (150, 150), 50, (0, 0, 0), -1)
cv2.imwrite('test.png', img)
```
生成的测试图像如下:
![test.png](https://img-blog.csdn.net/2018050217504843)
我们先对该图像添加高斯噪声和椒盐噪声:
```
import random
# 添加高斯噪声
def add_gaussian_noise(img):
h, w = img.shape
img_noise = np.zeros((h, w), np.uint8)
mean = 0
var = 100
sigma = var ** 0.5
for i in range(h):
for j in range(w):
rdn = random.random()
if rdn < 0.5:
img_noise[i, j] = img[i, j] + int(sigma * np.random.randn())
else:
img_noise[i, j] = img[i, j]
return img_noise
# 添加椒盐噪声
def add_salt_pepper_noise(img):
h, w = img.shape
img_noise = np.zeros((h, w), np.uint8)
threshold = 0.1
for i in range(h):
for j in range(w):
rdn = random.random()
if rdn < threshold:
img_noise[i, j] = 0
elif rdn > 1 - threshold:
img_noise[i, j] = 255
else:
img_noise[i, j] = img[i, j]
return img_noise
# 加载测试图像
img = cv2.imread('test.png', cv2.IMREAD_GRAYSCALE)
# 添加高斯噪声
img_gaussian_noise = add_gaussian_noise(img)
# 添加椒盐噪声
img_salt_pepper_noise = add_salt_pepper_noise(img)
```
添加高斯噪声后的图像:
![gaussian_noise.png](https://img-blog.csdn.net/20180502175053126)
添加椒盐噪声后的图像:
![salt_pepper_noise.png](https://img-blog.csdn.net/20180502175102856)
接下来,我们分别使用算术均值滤波器、几何均值滤波器、中值滤波器、修正的阿尔法均值滤波器对图像进行恢复:
```
# 算术均值滤波器
def arithmetic_mean_filter(img, kernel_size):
h, w = img.shape
img_filtered = np.zeros((h, w), np.uint8)
pad_size = kernel_size // 2
for i in range(pad_size, h - pad_size):
for j in range(pad_size, w - pad_size):
img_filtered[i, j] = np.mean(img[i - pad_size:i + pad_size + 1, j - pad_size:j + pad_size + 1])
return img_filtered
# 几何均值滤波器
def geometric_mean_filter(img, kernel_size):
h, w = img.shape
img_filtered = np.zeros((h, w), np.uint8)
pad_size = kernel_size // 2
for i in range(pad_size, h - pad_size):
for j in range(pad_size, w - pad_size):
img_filtered[i, j] = np.power(np.prod(img[i - pad_size:i + pad_size + 1, j - pad_size:j + pad_size + 1]), 1.0 / (kernel_size * kernel_size))
return img_filtered
# 中值滤波器
def median_filter(img, kernel_size):
h, w = img.shape
img_filtered = np.zeros((h, w), np.uint8)
pad_size = kernel_size // 2
for i in range(pad_size, h - pad_size):
for j in range(pad_size, w - pad_size):
img_filtered[i, j] = np.median(img[i - pad_size:i + pad_size + 1, j - pad_size:j + pad_size + 1])
return img_filtered
# 修正的阿尔法均值滤波器
def alpha_trimmed_mean_filter(img, kernel_size, d):
h, w = img.shape
img_filtered = np.zeros((h, w), np.uint8)
pad_size = kernel_size // 2
for i in range(pad_size, h - pad_size):
for j in range(pad_size, w - pad_size):
img_patch = img[i - pad_size:i + pad_size + 1, j - pad_size:j + pad_size + 1]
img_patch = np.sort(img_patch.flatten())
img_patch = img_patch[d // 2:-d // 2]
img_filtered[i, j] = np.mean(img_patch)
return img_filtered
# 恢复图像
img_arithmetic_mean_filtered = arithmetic_mean_filter(img_gaussian_noise, 3)
img_geometric_mean_filtered = geometric_mean_filter(img_gaussian_noise, 3)
img_median_filtered = median_filter(img_salt_pepper_noise, 3)
img_alpha_trimmed_mean_filtered = alpha_trimmed_mean_filter(img_gaussian_noise, 3, 3)
```
使用算术均值滤波器恢复高斯噪声图像后的结果:
![arithmetic_mean_filtered.png](https://img-blog.csdn.net/2018050217512044)
使用几何均值滤波器恢复高斯噪声图像后的结果:
![geometric_mean_filtered.png](https://img-blog.csdn.net/20180502175127459)
使用中值滤波器恢复椒盐噪声图像后的结果:
![median_filtered.png](https://img-blog.csdn.net/20180502175135662)
使用修正的阿尔法均值滤波器恢复高斯噪声图像后的结果:
![alpha_trimmed_mean_filtered.png](https://img-blog.csdn.net/20180502175142489)
从以上结果可以看出,对于不同类型的噪声,选择不同的滤波器可以得到更好的恢复效果。算术均值滤波器和几何均值滤波器适用于轻度噪声,中值滤波器适用于椒盐噪声,修正的阿尔法均值滤波器适用于高斯噪声。同时,不同的滤波器也有各自的优缺点,需要根据具体情况进行选择。
yolov5进行均值滤波
在yolov5中,没有直接使用均值滤波的步骤进行图像处理。均值滤波是一种常见的图像滤波方法,用于减少图像中的噪声并平滑图像。然而,yolov5主要用于目标检测和跟踪,对图像进行预处理的步骤通常包括调整大小、归一化等,而不包括均值滤波。因此,在yolov5中没有直接进行均值滤波的代码段。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* [OPENCV(二)对图像进行均值滤波,中值滤波,高斯滤波,高斯边缘检测](https://blog.csdn.net/MoastAll/article/details/109756898)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *3* [两万字深入浅出yolov5+deepsort实现目标跟踪,含完整代码, yolov,卡尔曼滤波估计,ReID目标重识别,...](https://blog.csdn.net/m0_56175815/article/details/131177488)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]