m0_63254202 2023-04-20 19:24 采纳率: 33.3%
浏览 14
已结题

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

```

  • 写回答

2条回答 默认 最新

  • 社区专家-Monster-XH 2023-04-20 20:27
    关注

    基于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');
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月2日
  • 已采纳回答 4月24日
  • 创建了问题 4月20日

悬赏问题

  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan