中值滤波、Median blurring
原始中值滤波
Opencv
代码如下(示例):
import cv2
img = cv2.imread('img.jpg')
# Median blurring
med = cv2.medianBlur(img,5)
cv2.imshow('Media Blurring', med)
cv2.waitKey(0)
循环(耗时)
代码如下(示例):
def median_blur(image, kernel_size=3):
# 确保输入图像是一个3D张量 (channels, height, width)
image=image.squeeze(0)
assert len(image.shape) == 3, "Input image must be a 3D tensor"
# 在图像边界补零
padding = kernel_size // 2
padded_image = F.pad(image, (padding, padding, padding, padding)
# 获取图像的尺寸
channels, height, width = image.shape
# 创建一个用于存储中值结果的张量
median_image = torch.zeros_like(image)
for h in range(height):
for w in range(width):
# 提取邻域窗口
window_0 = padded_image[0, h:h+kernel_size, w:w+kernel_size]
median_image[0, h, w] = window_0.flatten().median()
window_1 = padded_image[1, h:h+kernel_size, w:w+kernel_size]
median_image[1, h, w] = window_1.flatten().median()
window_2 = padded_image[2, h:h+kernel_size, w:w+kernel_size]
median_image[2, h, w] = window_2.flatten().median()
median_image=quantization(median_image.unsqueeze(0))
return median_image
Torch.tensor
代码如下(示例):
class MedianBlur(torch.nn.Module):
def __init__(self, kernel_size):
super().__init__()
# self.random = True
self.kernel = kernel_size
def forward(self, img, _=None):
img_blurred = kornia.filters.median_blur(img, (self.kernel, self.kernel))
img_blurred=quantization(img_blurred)
return img_blurred