% 加载原始图片
I = im2double(imread('D1原始图像.jpg'));
% 随机生成运动模糊参数
LEN = randi([100, 500], 1); % 长度密钥
THETA = randi([0, 90], 1); % 角度密钥
% 生成运动模糊核
PSF = fspecial('motion', LEN, THETA);
% 应用运动模糊核
blurred = imfilter(I, PSF, 'conv', 'circular');
% 添加高斯噪声
sigma = 0.01;
noisy_blurred = imnoise(blurred, 'gaussian', 0, sigma^2);
% 加密运动模糊图像
key = randi([0, 1], [size(I, 1), size(I, 2)]);
encrypted = xor(noisy_blurred, key);
% 保存加密后的运动模糊图像
imwrite(encrypted, 'encrypted_motion_blur.png');
% 读取加密后的运动模糊图像
encrypted = imread('encrypted_motion_blur.png');
% 解密运动模糊图像
denoised = wiener2(encrypted, [5, 5]);
% 估计运动模糊参数
[estimated_LEN, estimated_THETA] = estimate_motion_blur_params(denoised);
% 使用估计的运动模糊参数生成运动模糊核
estimated_PSF = fspecial('motion', estimated_LEN, estimated_THETA);
% 使用自适应维纳滤波器还原原始图像
deblurred = deconvwnr_adaptive(denoised, estimated_PSF, sigma);
% 解密运动模糊图像
decrypted = xor(deblurred, key);
% 显示原始图像和解密后的图像
figure
subplot(1,3,1), imshow(I), title('原始图像')
subplot(1,3,2), imshow(encrypted), title('加密后的图像')
subplot(1,3,3), imshow(decrypted), title('解密后的图像')
% 估计运动模糊参数的函数
function [estimated_LEN, estimated_THETA] = estimate_motion_blur_params(image)
% 根据图像内容估计运动模糊参数
estimated_LEN = 250;
estimated_THETA = 45;
end
% 自适应维纳滤波器的函数
function deblurred = deconvwnr_adaptive(image, PSF, sigma)
% 根据图像内容自适应选择适当的维纳滤波参数
NSR = sigma^2 / var(image(:));
deblurred = deconvwnr(image, PSF, NSR);
end
```
imwrite(encrypted, 'encrypted_motion_blur.png', 'BitDepth', 16);
第一个错误 imwrite 中指出图像的位深度无效,必须为 8 或 16。这是因为 Matlab 中 imwrite 默认保存图像的位深度为 8 位,如果输入的图像不是 8 位深度,就会出现这个错误。因此要明确指定要保存的位深度,例如:
将 BitDepth 参数设置为 16,指定了要保存的图像位深度为 16 位。
第二个错误 imread 中可能是由于加载的图像文件格式不受支持,或者保存时指定了不受支持的图像格式,导致无法读取图像。在此情况下,可以尝试使用其他支持的图像格式进行保存和加载,例如 .jpg,.png 等。可以尝试使用以下代码进行保存:
imwrite(encrypted, 'encrypted_motion_blur.png', 'png');
上述代码将图像保存为 PNG 格式。然后,可以尝试使用以下代码进行加载:
encrypted = imread('encrypted_motion_blur.png');
在使用mesh和surf这些函数的时候,matlab都会对其进行默认的配色,此外可以通过shading自由设置图形的表面颜色,这个已经有过简单使用了,再进行介绍下
调用格式:
shading flat %用同一种颜色配色,表面更光滑
shading faceted %系统的默认配色
shading interp %插值处理的方式配色,表面非常光滑
shading(axes_handle,...) %对指定句柄对应的图,设置shading的类型