急求大神帮助 相对一幅图像进行降噪处理 求能把自适应滤波和小波软阈值降噪的matlab代码

急求大神帮助 相对一幅图像进行降噪处理 求能把自适应滤波和小波软阈值降噪的matlab代码,第1张

自适应滤波
clear all
I1=imread('1jpg');
I=rgb2gray(I1);
J=imnoise(I,'gaussian',0,005); %添加均值为0,方差为005的高斯噪声
K1=wiener2(J,[5,5]);
figure
imshow(J);
title('加入高斯噪声图像');
figure
imshow(K1);
title('55窗口自适应滤波');
小波阈值
clear all
I1=imread('1jpg');
I=rgb2gray(I1);
J=imnoise(I,'gaussian',0,005); %添加均值为0,方差为005的高斯噪声
[Cr, Sr] = wavedec2(J, 2, 'sym4');
thr= Donoho(J);
J_soft = wdenoise(xr, 'gbl', 's', thr, 'sym4', 2);
figure; imshow(J_soft);
/////////////////////////////////用到的函数
function thr = Donoho(x)
%用Donoho通用阈值公式计算阈值 x为要进行处理的图像
% thr = delta sqrt( 2 log(n))
% n为信号的长度或尺寸
% delta = MAD / 06745 -经验公式,其中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) ) / 06745;

%计算阈值
thr = delta sqrt(2log(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 + 3prod(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); % 重构图像

注意,分别对彩色图像的三个分矩阵处理。比如:
彩色图像读入后是a矩阵,下面是提取出来三个分矩阵:
b=a(:,:,1);
c=a(:,:,2);
d=a(:,:,3);
然后分别对b、c、d进行滤波处理,处理完后,再把b、c、d赋给a,
a(:,:,1)=b;
a(:,:,2)=c;
a(:,:,3)=d;
这样就可以了!

%你好。我的程序只针对bmp图像。如果是其他格式,请补充提问。
%窗口大小是55,请按需要适当调整。
clc;
close all;
clear all;
win=[5 5];
img=imread('SaltPepperbmp');
figure;imshow(img);
x=img(:,:,1);
y=img(:,:,2);
z=img(:,:,3);
X = medfilt2(x,win);
Y = medfilt2(y,win);
Z = medfilt2(z,win);
new_img=cat(3,X,Y,Z);
figure;imshow(new_img);

[c,s]=wavedec2(X,2,'sym4');%用sym4小波对图像信号进行二层的小波分解
sizec=size(c);
for i=1:sizec(2)
if(c(i)>350)
c(i)=0;
else
c(i)=05c(i);
end
end
我假设的350是高频啊

添加椒盐噪声:
I = imread('eighttif');
J = imnoise(I,'salt & pepper',002);%%002为噪声密度,默认值为005
边缘检测:
I = imread('circuittif');
BW1 = edge(I,'prewitt');
BW2 = edge(I,'canny');
%%%%%%%%%%%%%%%%%%%%%%%%
doc edge,里面对边缘检测有详细的介绍。
doc imnoise,里也有添加各种噪声的方法。

其实都可以对彩色图像处理的,只是matlab里面的实现不一致。均值滤波和中值滤波matlab函数只考虑了单通道当然就必须转换成灰度图像;小波降噪的matlab函数不知道你是用的那个,肯定也需要把三通道的彩色图像先转换成单通道,分别去噪以后再整合成彩色图像。总的来说一般图像去噪都是对单通道来处理的,因为大部分的filter都是对二维矩阵来 *** 作的,要是对三通道处理也需要分别对不同的通道处理再整合。


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存