Matlab里的两处错误,不理解求解答

img


% 加载原始图片
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

```

基于Monster 组和GPT的调写:

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');


  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7541357
  • 这篇博客你也可以参考下:matlab函数的定义,函数嵌套调用与递归调用
  • 你还可以看下matlab参考手册中的 matlab 按元素求幂 .^
  • 除此之外, 这篇博客: Matlab系列之三维图形中的 颜色处理 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 在使用mesh和surf这些函数的时候,matlab都会对其进行默认的配色,此外可以通过shading自由设置图形的表面颜色,这个已经有过简单使用了,再进行介绍下

    调用格式:
    shading flat %用同一种颜色配色,表面更光滑
    shading faceted %系统的默认配色
    shading interp %插值处理的方式配色,表面非常光滑
    shading(axes_handle,...) %对指定句柄对应的图,设置shading的类型
    
  • 您还可以看一下 苏金明老师的MATLAB最优化方法课程中的 相关函数介绍小节, 巩固相关知识点