中值滤波 python
时间: 2023-07-25 15:48:06 浏览: 47
中值滤波是一种常见的图像处理方法,可以用于去除图像中的噪声。在 Python 中,可以使用 OpenCV 库来实现中值滤波。
下面是一个简单的中值滤波示例代码:
```python
import cv2
import numpy as np
# 读取图像
img = cv2.imread('image.jpg')
# 中值滤波
median = cv2.medianBlur(img, 5)
# 显示图像
cv2.imshow('Original Image', img)
cv2.imshow('Median Filtered Image', median)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在代码中,cv2.medianBlur() 函数用于对图像进行中值滤波。其中,第二个参数为滤波器的大小,表示采用的窗口大小为 5x5。
运行代码后,将会显示原始图像和经过中值滤波后的图像。
相关问题
加权中值滤波 python
加权中值滤波是一种在中值滤波基础上进行改进的滤波方法。相比于传统中值滤波,加权中值滤波在选择中值时引入了权重,使得更接近中心像素的像素值对中值的计算有更大的贡献。
下面是一个使用Python实现加权中值滤波的示例代码:
```python
from PIL import Image
import numpy as np
from scipy.ndimage import generic_filter
def weighted_median(data, weights):
sorted_data = np.sort(data)
cum_weights = np.cumsum(weights[np.argsort(data)])
median_idx = np.searchsorted(cum_weights, np.sum(weights) / 2.0)
return sorted_data[median_idx]
def weighted_median_filter(image_path, window_size):
image = Image.open(image_path).convert('L')
data = np.array(image)
weights = np.ones(window_size**2)
filtered_data = generic_filter(data, weighted_median, size=window_size, extra_arguments=(weights,))
filtered_image = Image.fromarray(filtered_data)
return filtered_image
image_path = "path_to_image.jpg"
window_size = 3
filtered_image = weighted_median_filter(image_path, window_size)
filtered_image.show()
```
中值滤波python代码
这是一个使用Python实现中值滤波的代码示例:
```python
import cv2
import numpy as np
def median_filter(img, kernel_size):
# 边缘填充
padding = (kernel_size - 1) // 2
padded_img = cv2.copyMakeBorder(img, padding, padding, padding, padding, cv2.BORDER_REPLICATE)
# 中值滤波
output_img = np.zeros(img.shape, np.uint8)
for i in range(padding, img.shape[0]+padding):
for j in range(padding, img.shape[1]+padding):
output_img[i-padding][j-padding] = np.median(padded_img[i-padding:i+padding+1, j-padding:j+padding+1])
return output_img
# 载入图像并显示
img = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
cv2.imshow('Original Image', img)
# 中值滤波并显示
filtered_img = median_filter(img, 5)
cv2.imshow('Filtered Image', filtered_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
该函数接受两个参数——输入图像和卷积核的大小,返回一个经过中值滤波处理后的图像。在函数内部,首先对输入图像进行边缘填充,然后对每个像素点及其周围的像素计算中值,并将结果保存到输出图像中。最后,返回输出图像。
注意,为了使代码更易读,这里使用了OpenCV库完成了一些边界填充和图像显示的操作,但这并不影响中值滤波本身的实现。