matlab加权均值滤波算法
时间: 2023-07-06 12:30:25 浏览: 184
均值滤波matlab算法
Matlab中的加权均值滤波算法可以通过以下代码实现:
```matlab
function output = weighted_mean_filter(input, mask_size, weights)
% input: 输入图像
% mask_size: 滤波器大小,必须为奇数
% weights: 权重矩阵,大小与滤波器大小相同
% 获取输入图像的大小
[height, width] = size(input);
% 计算滤波器中心
center = floor(mask_size / 2) + 1;
% 初始化输出图像
output = zeros(height, width);
% 对每个像素进行滤波
for i = center : height - center + 1
for j = center : width - center + 1
% 获取当前像素周围的像素
neighbors = input(i - center + 1 : i + center - 1, j - center + 1 : j + center - 1);
% 计算加权均值
weighted_neighbors = neighbors .* weights;
output(i, j) = sum(weighted_neighbors(:)) / sum(weights(:));
end
end
```
其中,weights为权重矩阵,可以根据需要自行定义。例如,可以使用高斯分布来定义权重矩阵,代码如下:
```matlab
function weights = gaussian_weights(sigma, mask_size)
% sigma: 高斯分布的标准差
% mask_size: 滤波器大小,必须为奇数
% 计算高斯分布的模板
center = floor(mask_size / 2) + 1;
[x, y] = meshgrid(1 : mask_size, 1 : mask_size);
x = x - center;
y = y - center;
template = exp(-(x .^ 2 + y .^ 2) / (2 * sigma ^ 2));
% 归一化
weights = template / sum(template(:));
```
使用方法如下:
```matlab
% 读取图像
input = imread('lena.jpg');
% 定义权重矩阵
sigma = 1;
mask_size = 3;
weights = gaussian_weights(sigma, mask_size);
% 进行加权均值滤波
output = weighted_mean_filter(input, mask_size, weights);
% 显示结果
figure;
subplot(1, 2, 1); imshow(input); title('原图');
subplot(1, 2, 2); imshow(output); title('加权均值滤波');
```
阅读全文