给出文档中问题的答案代码
时间: 2024-12-28 12:41:45 浏览: 54
您提到的是需要编写MATLAB代码来实现文档中的实验任务。以下是根据文档内容编写的MATLAB代码示例:
```matlab
% 上机2 实验代码
% 读取输入图像
inputImage = imread('your_face_image.jpg'); % 替换为您的图像文件路径
if size(inputImage, 1) < 1024 || size(inputImage, 2) < 1024
error('图像尺寸必须大于1024x1024');
end
% 将彩色图像转换为灰度图像
grayImage = rgb2gray(inputImage);
% 调整图像大小为512x512
resizedImage = imresize(grayImage, [512 512]);
% 添加高斯噪声
noisyGaussianImage = imnoise(resizedImage, 'gaussian');
% 选择低通滤波器(例如:均值滤波器)
lowPassFiltered = imfilter(noisyGaussianImage, fspecial('average', 3));
% 选择高通滤波器(例如:拉普拉斯滤波器)
highPassFiltered = imfilter(noisyGaussianImage, fspecial('laplacian'));
% 显示结果
figure;
subplot(2, 2, 1); imshow(resizedImage); title('原图');
subplot(2, 2, 2); imshow(noisyGaussianImage); title('加高斯噪声后的图');
subplot(2, 2, 3); imshow(lowPassFiltered); title('低通滤波后');
subplot(2, 2, 4); imshow(highPassFiltered); title('高通滤波后');
% 添加盐和胡椒噪声
noisySaltPepperImage = imnoise(resizedImage, 'salt & pepper');
% 使用中位滤波器
medianFiltered = medfilt2(noisySaltPepperImage, [3 3]);
% 使用几何平均滤波器
geometricMeanFilter = @(x) nthroot(prod(x(:)), numel(x));
geoMeanFiltered = nlfilter(noisySaltPepperImage, [3 3], geometricMeanFilter);
% 显示结果
figure;
subplot(2, 2, 1); imshow(resizedImage); title('原图');
subplot(2, 2, 2); imshow(noisySaltPepperImage); title('加盐和胡椒噪声后的图');
subplot(2, 2, 3); imshow(medianFiltered); title('中位滤波后');
subplot(2, 2, 4); imshow(geoMeanFiltered); title('几何平均滤波后');
% Kirsch滤波器
kirschFilters = {
[-5 -5 -5; 3 0 3; 3 3 3],
[-5 -5 3; -5 0 3; 3 3 3],
[-5 3 3; -5 0 3; -5 3 3],
[3 3 3; -5 0 3; -5 -5 -5],
[3 3 3; 3 0 -5; -5 -5 -5],
[3 3 3; 3 0 -5; 3 -5 -5],
[3 3 -5; 3 0 -5; 3 3 -5],
[-5 3 3; -5 3 0; -5 3 3]
};
% 应用Kirsch滤波器
kirschResults = cell(1, 8);
for i = 1:8
kirschResults{i} = imfilter(double(resizedImage), kirschFilters{i});
figure;
subplot(3, 3, i); imshow(kirschResults{i}, []); title(['Kirsch ', num2str(i)]);
end
% 求和并显示结果
sumResult = sum(cell2mat(kirschResults), 3);
figure;
imshow(sumResult, []); title('Kirsch滤波结果求和');
% 保存所有图像
saveas(gcf, 'kirsch_sum_result.png');
for i = 1:8
saveas(gcf, ['kirsch_result_', num2str(i), '.png']);
end
saveas(gcf, 'original_image.png');
saveas(gcf, 'resized_image.png');
saveas(gcf, 'gaussian_noisy_image.png');
saveas(gcf, 'low_pass_filtered_image.png');
saveas(gcf, 'high_pass_filtered_image.png');
saveas(gcf, 'salt_pepper_noisy_image.png');
saveas(gcf, 'median_filtered_image.png');
saveas(gcf, 'geometric_mean_filtered_image.png');
% 发送邮件
sendEmail = false; % 设置为true以发送邮件
if sendEmail
recipient = 'LZHAO@haust.edu.cn';
subject = '上机2';
body = '姓名:XXX\n班级:XXX\n学号:XXX';
attachments = {'kirsch_sum_result.png', ...
'kirsch_result_1.png', 'kirsch_result_2.png', 'kirsch_result_3.png', ...
'kirsch_result_4.png', 'kirsch_result_5.png', 'kirsch_result_6.png', ...
'kirsch_result_7.png', 'kirsch_result_8.png', ...
'original_image.png', 'resized_image.png', 'gaussian_noisy_image.png', ...
'low_pass_filtered_image.png', 'high_pass_filtered_image.png', ...
'salt_pepper_noisy_image.png', 'median_filtered_image.png', ...
'geometric_mean_filtered_image.png'};
sendmail(recipient, subject, body, '-attach', attachments{:});
end
```
### 说明
1. **读取图像**:使用 `imread` 函数读取图像,并检查其尺寸是否符合要求。
2. **灰度化**:使用 `rgb2gray` 函数将彩色图像转换为灰度图像。
3. **调整图像大小**:使用 `imresize` 函数将图像调整为512x512。
4. **添加高斯噪声**:使用 `imnoise` 函数添加高斯噪声。
5. **滤波**:分别使用低通滤波器和高通滤波器对添加了高斯噪声的图像进行滤波。
6. **添加盐和胡椒噪声**:再次使用 `imnoise` 函数添加盐和胡椒噪声。
7. **中位滤波和几何平均滤波**:分别使用 `medfilt2` 和自定义的 `nlfilter` 函数进行滤波。
8. **Kirsch滤波器**:定义8个Kirsch滤波器,并对图像进行滤波,最后求和并显示结果。
9. **保存图像**:将所有处理后的图像保存为PNG文件。
10. **发送邮件**:设置 `sendEmail` 变量为 `true` 并配置收件人、主题、正文和附件列表,调用 `sendmail` 函数发送邮件。
请根据实际情况修改文件路径、邮件配置等信息。希望这段代码能帮助您完成实验任务!
阅读全文