最爱947 2023-04-17 21:37 采纳率: 75%
浏览 178
已结题

(matlab)错误使用psnr>checkimages,如何解决?

% 加载图像
img = imread('lena.bmp');
% 将图像转换为灰度图像
gray_img = rgb2gray(img);
% 显示原始图像
subplot(2,3,1);
imshow(gray_img);
title('原始图像');

% 设置水印
watermark = 'Hello World';
% 将水印转换为二进制序列
watermark_bin = dec2bin(watermark, 8);
watermark_bin = watermark_bin(:)';
% 将二进制序列转换为数字序列
watermark_num = str2num(watermark_bin);

% 进行小波变换
[cA,cH,cV,cD] = dwt2(gray_img,'haar');
% 提取水印嵌入位置
embed_pos = 1:4:length(cA(:));
% 将水印嵌入到小波系数中
cA(embed_pos) = cA(embed_pos) + watermark_num;
% 进行逆小波变换
watermarked_img = idwt2(cA,cH,cV,cD,'haar');
% 显示加水印后的图像
subplot(2,3,2);
imshow(uint8(watermarked_img));
title('加水印后的图像');

% 计算PSNR和NC值
[peaksnr, snr] = psnr(watermarked_img, gray_img);
nc_value = nc(gray_img, watermarked_img);
fprintf('PSNR值为:%f\n', peaksnr);
fprintf('NC值为:%f\n', nc_value);

% 提取水印
[cA,cH,cV,cD] = dwt2(watermarked_img,'haar');
% 从小波系数中提取嵌入位置的值
extracted_watermark_num = cA(embed_pos);
% 对提取的水印进行FFT变换
fft_extracted_watermark = fft(extracted_watermark_num);
% 对原始水印进行FFT变换
fft_watermark = fft(watermark_num);
% 计算相关性
corr = ifft(fft_extracted_watermark .* conj(fft_watermark));
% 显示相关性曲线
subplot(2,3,3);
plot(abs(corr));
title('相关性曲线');

% 添加噪声攻击
noisy_img = imnoise(watermarked_img, 'salt & pepper', 0.05);
% 显示添加噪声后的图像
subplot(2,3,4);
imshow(noisy_img);
title('添加噪声后的图像');

% 提取水印
[cA,cH,cV,cD] = dwt2(noisy_img,'haar');
% 从小波系数中提取嵌入位置的值
extracted_watermark_num = cA(embed_pos);
% 对提取的水印进行FFT变换
fft_extracted_watermark = fft(extracted_watermark_num);
% 对原始水印进行FFT变换
fft_watermark = fft(watermark_num);
% 计算相关性
corr = ifft(fft_extracted_watermark .* conj(fft_watermark));
% 显示相关性曲线
subplot(2,3,5);
plot(abs(corr));
title('添加噪声后的相关性曲线');

% 添加压缩攻击
imwrite(watermarked_img, 'watermarked_img.jpg', 'jpg', 'Quality', 50);
compressed_img = imread('watermarked_img.jpg');
% 显示压缩后的图像
subplot(2,3,6);
imshow(compressed_img);
title('压缩后的图像');

% 提取水印
[cA,cH,cV,cD] = dwt2(compressed_img,'haar');
% 从小波系数中提取嵌入位置的值
extracted_watermark_num = cA(embed_pos);
% 对提取的水印进行FFT变换
fft_extracted_watermark = fft(extracted_watermark_num);
% 对原始水印进行FFT变换
fft_watermark = fft(watermark_num);
% 计算相关性
corr = ifft(fft_extracted_watermark .* conj(fft_watermark));
%显示压缩后的相关性曲线
subplot(2,3,6);
plot(abs(corr));
title('压缩后的相关性曲线');

% 计算PSNR和NC值
psnr_value = psnr(gray_img, compressed_img);
nc_value = nc(gray_img, compressed_img);
fprintf('经过噪声和压缩攻击后的PSNR值为:%f\n', psnr_value);
fprintf('经过噪声和压缩攻击后的NC值为:%f\n', nc_value);

代码运行显示
错误使用psnr>checkimages
A和REF的类必须相同

出错psnr(第69行)
checkimages(A,ref)
有人知道要如何解决这个问题嘛?

  • 写回答

4条回答 默认 最新

  • CSDN专家-sinJack 2023-04-17 22:39
    关注
    [peaksnr, snr] = psnr(watermarked_img, gray_img);
    改为:
    
    [peaksnr, snr] = psnr(watermarked_img, uint8(gray_img));
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 4月27日
  • 已采纳回答 4月19日
  • 创建了问题 4月17日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效