function [recovImg, costTime, psnr, prePSNR] = ImgDenoise(orgImg, sigma, method)
% function ImgDenoise
%% 读图像文件,产生噪声
% orgImg = imread('lena256.bmp');
% method = 'OMP';
% sigma = 25;
orgImg = double(orgImg);
sigmaImg = std2(orgImg);
% figure(1), imshow(uint8(orgImg)), title('原始图像 '), drawnow;
[a,b] = size(orgImg);
lam = 0;
n = 8;
C = 2*sigma^2*(1+sigma^2/sigmaImg^2);
C = 1/C;
ranTime = 10;
distance = 4;
noisyMtx = sigma * randn(a,b);
noisyImg = orgImg + noisyMtx;
% figure(2), imshow(uint8(noisyImg)), title('噪声图像 '), drawnow;
% noisyImg = imresize(noisyImg, 2);
[a, b] = size(noisyImg);
%% 生成字典
K = 256;
subDicMtx = zeros(n,sqrt(K));
for k=0:1:sqrt(K)-1,
V=cos((0:1:n-1)*k*pi/sqrt(K));
if k>0, V=V-mean(V); end;
subDicMtx(:,k+1)=V/norm(V);
end;
dicMtx=kron(subDicMtx,subDicMtx);
dicMtx=dicMtx * diag(1./sqrt(sum(dicMtx.*dicMtx)));
% dicImg = DicToImg(dicMtx, n, n);
% dicImg = imresize(dicImg, 2);
% figure(3), imshow(dicImg,[]), title('初始字典'), drawnow;
%% 对噪声图像分块
noisyPatchs = zeros(n*n, ceil(1/distance*(a-n+1))*ceil(1/distance*(b-n+1)));
count = 0;
for i = 1:distance:a-n+1
for j = 1:distance:b-n+1
count = count + 1;
imgPatch = noisyImg(i:i+n-1, j:j+n-1);
noisyPatchs(:, count) = imgPatch(:);
end
end
%% 重构分块数据,也是降噪过程
reSparRepMtx = zeros(size(dicMtx, 2), count);
tic;
if (strcmp(method, 'OMP'))
for i = 1:1:count
reSparRepMtx(:,i) = OMP2(dicMtx, noisyPatchs(:,i), sigma);
end
elseif (strcmp(method, 'RandOMP'))
sparRepcolums = zeros(size(dicMtx, 2), ranTime);
for i = 1:1:count
for j =1:1:ranTime
sparRepcolums(:, j) = RandOMP2(dicMtx, noisyPatchs(:,i), sigma, C);
end
reSparRepMtx(:,i) = mean(sparRepcolums, 2);
end
end
costTime = toc;
recovPatchs = dicMtx * reSparRepMtx;
%% 分块数据重组成图像
[recovImg, weightMtx] = ReconstructImg(recovPatchs, distance, a, b, n);
recovImg = recovImg./weightMtx;
% recovImg = imresize(recovImg, 0.5);
figure(4), imshow(uint8(recovImg)), title('重构图像 '), drawnow;
%% 计算恢复前后的psnr
% preErrSum = sum(sum(abs(noisyImg-orgImg).^2));
% prePSNR = 10*log10(255*255/(preErrSum/256/256));
prePSNR=1;
errSum = sum(sum(abs(recovImg-orgImg).^2));
psnr = 10*log10(255*255/(errSum/256/256))
没有合适的资源?快使用搜索试试~ 我知道了~
matlab-基于OMP和KSVD算法的图像去噪算法matlab仿真,包括图像分块,字典,重构,OMP,KSVD等步骤-源码
共21个文件
m:9个
bmp:6个
mat:3个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
4星 · 超过85%的资源 3 下载量 173 浏览量
2021-09-20
02:35:02
上传
评论
收藏 323KB RAR 举报
温馨提示
matlab_基于OMP和KSVD算法的图像去噪算法matlab仿真,包括图像分块,字典,重构,OMP,KSVD等步骤_源码
资源推荐
资源详情
资源评论
收起资源包目录
matlab_基于OMP和KSVD算法的图像去噪算法matlab仿真,包括图像分块,字典,重构,OMP,KSVD等步骤_源码.rar (21个子文件)
matlab_基于OMP和KSVD算法的图像去噪算法matlab仿真,包括图像分块,字典,重构,OMP,KSVD等步骤_源码
3-3-1recovimg.jpg 14KB
bank256.bmp 65KB
costTimes_OMP.mat 480B
couple256.bmp 65KB
3-3-1orgimg.jpg 16KB
lena256.bmp 65KB
psnrs_OMP.mat 471B
barbara256.bmp 65KB
Runme.m 2KB
prePSNRs_OMP.mat 184B
3-3-1noisyimg25.jpg 29KB
beth256.bmp 65KB
func
DicToImg.m 362B
RandOMP2.m 644B
K_SVD.m 614B
ImgDenoise.m 2KB
exp3_3_2.m 619B
exp3_3_1.m 614B
OMP2.m 451B
ReconstructImg.m 450B
cameraman256.bmp 65KB
共 21 条
- 1
资源评论
- lksoft20082022-12-03就是一个pdf文档,骗子,不是源代码,一点都不值8元钱
- m0_736084302022-09-14资源内容详细全面,与描述一致,对我很有用,有一定的使用价值。
- cn_usr2022-10-03资源很实用,对我启发很大,有很好的参考价值,内容详细。
mYlEaVeiSmVp
- 粉丝: 1887
- 资源: 19万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功