请使用matlab完成以下任务并给出代码1. 编程实现低通掩模法平滑图象; 2. 比较 Box 掩模和高斯掩模的平滑效果; 3. 编程实现拉普拉斯掩模法锐化图象; 4. 比较拉普拉斯掩模 H3 和含有对角线分量的拉普拉斯掩模 H4 的锐化效果; 5. 尝试用高斯型拉普拉斯掩模(LoG 算子)锐化图象,并观察与其他拉普拉斯掩模在抑 制噪声上的差异;
时间: 2023-06-12 09:07:01 浏览: 200
使用matlab程序进行高斯圆滑和求取梯度,高斯圆滑可以压制高斯噪声
以下是Matlab代码实现低通掩模法平滑图像:
```matlab
%读取图像
img = imread('lena.png');
%将图像转为灰度图像
gray_img = rgb2gray(img);
%显示原图像
subplot(1,2,1);
imshow(gray_img);
title('原图像');
%定义低通掩模
mask = [1/9, 1/9, 1/9;
1/9, 1/9, 1/9;
1/9, 1/9, 1/9];
%对图像进行平滑操作
smooth_img = conv2(double(gray_img), mask, 'same');
%将平滑后的图像转为uint8类型
smooth_img = uint8(smooth_img);
%显示平滑后的图像
subplot(1,2,2);
imshow(smooth_img);
title('低通掩模平滑后的图像');
```
以下是Matlab代码比较Box掩模和高斯掩模的平滑效果:
```matlab
%读取图像
img = imread('lena.png');
%将图像转为灰度图像
gray_img = rgb2gray(img);
%定义Box掩模
box_mask = ones(3,3)/9;
%定义高斯掩模
gaussian_mask = [1/16, 1/8, 1/16;
1/8, 1/4, 1/8;
1/16, 1/8, 1/16];
%对图像进行平滑操作
box_smooth_img = conv2(double(gray_img), box_mask, 'same');
gaussian_smooth_img = conv2(double(gray_img), gaussian_mask, 'same');
%将平滑后的图像转为uint8类型
box_smooth_img = uint8(box_smooth_img);
gaussian_smooth_img = uint8(gaussian_smooth_img);
%显示原图像和平滑后的图像
subplot(2,2,1);
imshow(gray_img);
title('原图像');
subplot(2,2,2);
imshow(box_smooth_img);
title('Box掩模平滑后的图像');
subplot(2,2,3);
imshow(gray_img);
title('原图像');
subplot(2,2,4);
imshow(gaussian_smooth_img);
title('高斯掩模平滑后的图像');
```
以下是Matlab代码实现拉普拉斯掩模法锐化图像:
```matlab
%读取图像
img = imread('lena.png');
%将图像转为灰度图像
gray_img = rgb2gray(img);
%定义拉普拉斯掩模
laplacian_mask = [0, -1, 0;
-1, 4, -1;
0, -1, 0];
%对图像进行锐化操作
sharp_img = conv2(double(gray_img), laplacian_mask, 'same');
%将锐化后的图像转为uint8类型
sharp_img = uint8(sharp_img);
%将原图像和锐化后的图像进行对比
subplot(1,2,1);
imshow(gray_img);
title('原图像');
subplot(1,2,2);
imshow(sharp_img);
title('拉普拉斯掩模锐化后的图像');
```
以下是Matlab代码比较拉普拉斯掩模H3和含有对角线分量的拉普拉斯掩模H4的锐化效果:
```matlab
%读取图像
img = imread('lena.png');
%将图像转为灰度图像
gray_img = rgb2gray(img);
%定义拉普拉斯H3掩模
laplacian_H3_mask = [-1, -1, -1;
-1, 8, -1;
-1, -1, -1];
%定义拉普拉斯H4掩模
laplacian_H4_mask = [0, -1, 0;
-1, 5, -1;
0, -1, 0];
%对图像进行锐化操作
sharp_H3_img = conv2(double(gray_img), laplacian_H3_mask, 'same');
sharp_H4_img = conv2(double(gray_img), laplacian_H4_mask, 'same');
%将锐化后的图像转为uint8类型
sharp_H3_img = uint8(sharp_H3_img);
sharp_H4_img = uint8(sharp_H4_img);
%将原图像和锐化后的图像进行对比
subplot(2,2,1);
imshow(gray_img);
title('原图像');
subplot(2,2,2);
imshow(sharp_H3_img);
title('拉普拉斯H3掩模锐化后的图像');
subplot(2,2,3);
imshow(gray_img);
title('原图像');
subplot(2,2,4);
imshow(sharp_H4_img);
title('拉普拉斯H4掩模锐化后的图像');
```
以下是Matlab代码尝试用高斯型拉普拉斯掩模(LoG算子)锐化图像,并观察与其他拉普拉斯掩模在抑制噪声上的差异:
```matlab
%读取图像
img = imread('lena.png');
%将图像转为灰度图像
gray_img = rgb2gray(img);
%定义高斯型拉普拉斯掩模
log_mask = fspecial('log', [5, 5], 0.5);
%对图像进行锐化操作
sharp_img = conv2(double(gray_img), log_mask, 'same');
%将锐化后的图像转为uint8类型
sharp_img = uint8(sharp_img);
%将原图像和锐化后的图像进行对比
subplot(1,2,1);
imshow(gray_img);
title('原图像');
subplot(1,2,2);
imshow(sharp_img);
title('高斯型拉普拉斯掩模锐化后的图像');
```
与其他拉普拉斯掩模相比,高斯型拉普拉斯掩模(LoG算子)在抑制噪声方面的效果更好,因为它可以对图像进行平滑操作,从而减少噪声的影响。但是,在锐化边缘时,高斯型拉普拉斯掩模的效果可能会比其他拉普拉斯掩模差,因为它会导致边缘变得模糊。因此,在实际应用中,需要根据具体情况选择合适的拉普拉斯掩模。
阅读全文