小波阈值图像去噪程序为什么每次运行类似程序都有这个结果

小波阈值图像去噪程序为什么每次运行类似程序都有这个结果,第1张

File "barbara.png" does not exist. Error in ==>wavedenoise_main at 5意思是在主程序wavedenoise_main 第五行出错,出错原因是barbara.png文件不纳租存在唯茄烂;

解决方法:第一种方法:你可以把文件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()进行去噪。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12424658.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存