解决方法:第一种方法:你可以把文件barbara.png放在指漏主程序wavedenoise_main这个文件夹;
第二种方法:im=imread('barbara.png')改为im=imread('路径\barbara.png')路径即为你图片存放的路径如:d:image\..\
自适应滤波clear all
I1=imread('1.jpg')
I=rgb2gray(I1)
J=imnoise(I,'gaussian',0,0.05)%添加均值为0,方差为0.05的高斯噪声
K1=wiener2(J,[5,5])
figure
imshow(J)
title('加入高斯噪声图像')
figure
imshow(K1)
title('5*5窗口自适应滤波')
clear all
I1=imread('1.jpg')
I=rgb2gray(I1)
J=imnoise(I,'gaussian',0,0.05)%添加均值为0,方差为0.05的高斯噪声
[Cr, Sr] = wavedec2(J, 2, 'sym4')
thr= Donoho(J)
J_soft = wdenoise(xr, 'gbl', 's', thr, 'sym4', 2)
figureimshow(J_soft)
/////////////////////////////////用到的函数
function thr = Donoho(x)
%用Donoho通用阈值公式计算阈值 x为要进行处理的图像
% thr = delta * sqrt( 2 * log(n))
% n为信号的长度或尺寸
% delta = MAD / 0.6745-经验公式,其中MAD为小波分解后高子带系数的中值
n = prod( size(x) ) %图像尺寸
%计算delta
[C, S] = wavedec2(x, 1, 'db1')%小波分解
d = C( prod( S(1,:) ) + 2 * prod( S(2,:) ) + 1 : end) %HH子带系数迟歼兄
delta = median( abs(d) ) / 0.6745
%计算阈值
thr = delta * sqrt(2*log(n))
////////////////////////////////////用到的函数
function X = wdenoise(x, measure, sorh, thr, wname, n)
% 阈值去噪函数
% x为带噪声图像
% measure表示全局或局部
% sorh表示软硬阈值方法
% thr为阈值
% wname为小波函数码袭名
% n为分解层次
[C, S] = wavedec2(x, n, wname)% 对图像进行小波分解
switch measure
case 'gbl' % 全局阈值方法
dcoef = C( prod(S(1, :)) + 1 : end) % 提取细节部分系数
switch sorh
case 'h'% 硬阈值
dcoef = dcoef .* (abs(dcoef) >thr)
case '改历s'% 软阈值
temp = abs(dcoef) - thr
temp = (temp + abs(temp)) / 2
dcoef = sign(dcoef) .* temp
end
C( prod(S(1, :)) + 1 : end) = dcoef
case 'lvd' % 局部阈值方法
for i = n:-1:1 % 每层单独处理
k = size(S,1) - i
first = prod(S(1, :)) + ...
3 * sum(S(2:k-1, 1) .* S(2:k-1, 2)) + 1
% 第i层细节系数的起始位置
last = first + 3*prod(S(k,:)) - 1 % 终止位置
dcoef = C(first : last) % 细节系数
switch sorh
case 'h'% 硬阈值
dcoef = dcoef .* (abs(dcoef) >thr(i))
case 's'% 软阈值
temp = abs(dcoef) - thr(i)
temp = (temp + abs(temp)) / 2
dcoef = sign(dcoef) .* temp
end
C(first:last) = dcoef
end
end
X = waverec2(C, S, wname) % 重构图像
去姿咐噪有很多种方法,现在小波去噪派举最为常用,在迹羡纯matlab中有自带的函数进行小波去噪,简单易行。最常用且简单的是阈值去噪,用函数ddencmp()生成信号的默认阈值,然后利用函数wdencmp()进行去噪。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)