基于matlab的自适应高斯滤波
时间: 2023-08-24 12:10:00 浏览: 58
自适应高斯滤波是一种常用的图像滤波方法,在Matlab中也可以实现。下面是一个基于Matlab的自适应高斯滤波的示例代码:
```matlab
% 读入原始图像
img = imread('lena.jpg');
% 将图像转换为灰度图像
img_gray = rgb2gray(img);
% 定义窗口大小和标准差
ws = 11; % 窗口大小
sigma = 5; % 标准差
% 计算每个像素的权重
weights = fspecial('gaussian', [ws ws], sigma);
% 对每个像素进行滤波
img_filtered = zeros(size(img_gray));
for i = 1:size(img_gray, 1)
for j = 1:size(img_gray, 2)
% 计算当前像素的窗口
row_start = max(1, i - floor(ws/2));
row_end = min(size(img_gray, 1), i + floor(ws/2));
col_start = max(1, j - floor(ws/2));
col_end = min(size(img_gray, 2), j + floor(ws/2));
window = img_gray(row_start:row_end, col_start:col_end);
% 计算窗口中每个像素的权重
weights_window = weights((i-row_start+1):(i-row_start+1+row_end-row_start), (j-col_start+1):(j-col_start+1+col_end-col_start));
% 对窗口中的像素加权平均
img_filtered(i, j) = sum(sum(double(window).*weights_window));
end
end
% 将滤波后的图像显示出来
imshow(uint8(img_filtered));
```
在上面的代码中,我们首先读入一张彩色图像并将其转换为灰度图像。然后定义了窗口大小和标准差,并使用`fspecial`函数计算每个像素的权重。接着对每个像素的周围窗口进行处理,计算窗口中每个像素的权重,并对窗口中的像素进行加权平均。最后将滤波后的图像显示出来。