matlab编程实现图像的空域平滑和锐化
时间: 2024-05-08 12:16:43 浏览: 56
空域平滑:
1. 均值滤波
```matlab
img = imread('image.jpg'); % 读取图像
img_gray = rgb2gray(img); % 转换为灰度图像
[m, n] = size(img_gray); % 获取图像大小
% 均值滤波模板
mask = ones(3, 3) / 9;
% 边界处理,采用镜像对称扩展
img_pad = padarray(img_gray, [1 1], 'symmetric');
% 进行滤波操作
img_smooth = zeros(m, n);
for i = 1:m
for j = 1:n
img_smooth(i, j) = sum(sum(img_pad(i:i+2, j:j+2) .* mask));
end
end
% 显示结果
imshow(uint8(img_smooth));
```
2. 中值滤波
```matlab
img = imread('image.jpg'); % 读取图像
img_gray = rgb2gray(img); % 转换为灰度图像
[m, n] = size(img_gray); % 获取图像大小
% 中值滤波模板大小
mask_size = 3;
% 边界处理,采用镜像对称扩展
img_pad = padarray(img_gray, [1 1], 'symmetric');
% 进行滤波操作
img_smooth = zeros(m, n);
for i = 1:m
for j = 1:n
% 获取模板内像素值
mask_values = img_pad(i:i+mask_size-1, j:j+mask_size-1);
% 对像素值进行排序,取中间值作为滤波结果
img_smooth(i, j) = median(mask_values(:));
end
end
% 显示结果
imshow(uint8(img_smooth));
```
空域锐化:
1. 拉普拉斯算子
```matlab
img = imread('image.jpg'); % 读取图像
img_gray = rgb2gray(img); % 转换为灰度图像
[m, n] = size(img_gray); % 获取图像大小
% 拉普拉斯算子模板
mask = [0 -1 0; -1 4 -1; 0 -1 0];
% 边界处理,采用镜像对称扩展
img_pad = padarray(img_gray, [1 1], 'symmetric');
% 进行滤波操作
img_sharp = zeros(m, n);
for i = 1:m
for j = 1:n
img_sharp(i, j) = sum(sum(img_pad(i:i+2, j:j+2) .* mask));
end
end
% 显示结果
imshow(uint8(img_sharp));
```
2. Sobel算子
```matlab
img = imread('image.jpg'); % 读取图像
img_gray = rgb2gray(img); % 转换为灰度图像
[m, n] = size(img_gray); % 获取图像大小
% Sobel算子模板
mask_x = [-1 0 1; -2 0 2; -1 0 1];
mask_y = [-1 -2 -1; 0 0 0; 1 2 1];
% 边界处理,采用镜像对称扩展
img_pad = padarray(img_gray, [1 1], 'symmetric');
% 计算图像x方向和y方向梯度
grad_x = zeros(m, n);
grad_y = zeros(m, n);
for i = 1:m
for j = 1:n
grad_x(i, j) = sum(sum(img_pad(i:i+2, j:j+2) .* mask_x));
grad_y(i, j) = sum(sum(img_pad(i:i+2, j:j+2) .* mask_y));
end
end
% 计算梯度幅值
grad_mag = sqrt(grad_x.^2 + grad_y.^2);
% 显示结果
imshow(uint8(grad_mag));
```
阅读全文