MATLAB添加噪声

首先是用MATLAB自带的imnoise函数添加噪声。

img= im2double(imread('D:\Matlab2018a\work\img.png'));%改为你要读入图片的路径;im2double作归一化处理
sigma=25;%添加噪声的标准差
imgnoise=imnoise(img,'gaussian',0,(sigma/255)^2); %添加均值为0,标准差为sigma高斯噪声
imshow(imgnoise);
imwrite(imgnoise,'imgnoise.png');%输出噪声图到当前文件夹

由于matlab的imnoise函数会将输出归一化,所以在读入图片的时候就先用im2double把图片归一化了,免得数据类型不一样。
将上面添加噪声那一句改为如下语句则添加其它种类的噪声

imgnoise=imnoise(img,'salt & pepper',0.05); %添加密度为5%的椒盐噪声
imgnoise=imnoise(img,'speckle',(sigma/255)^2); %添加均值为0,标准差为sigma乘性噪声,这个是用服从均匀分布的随机噪声乘以图像img,再加到img上。
imgnoise=imnoise(img,'poisson');%添加泊松噪声

下面我们用自己写的代码来添加噪声。

img=img+(sigma/255)*randn(size(img));%给img添加标准差为sigma的高斯噪声
img=img+img.*((sigma/255)*rand(size(img)));%给img添加标准差为sigma的乘性噪声,也是均匀分布

对于椒盐噪声,先用rand()生成均匀分布的随机噪声,然后根据你需要的椒盐噪声密度,作阈值处理,反正就是这种思想,实现的方法有很多,我这里列一种。

img=im2double(imread('8.png'));%改为你要读入图片的路径
imgnoise =(rand(size(img))); %生成随机数组
d = 0.1;  %需要的椒盐噪声密度
output=img; 
[width,height]=size(img);

for i=1:width
    for j=1:height
        if(imgnoise(i,j)>(1-d/2))
            output(i,j)=1;
        end
        if(imgnoise(i,j)<d/2)
            output(i,j)=0;
        end
    end
end
imshow(output);

也可以分两步分别生成椒噪声和盐噪声,但是这个总的密度就没有那么好控制

img=im2double(imread('8.png'));%改为你要读入图片的路径
d = 0.1;  %需要的胡椒或盐粒噪声密度
output=img; 
[width,height]=size(img);
a1=rand(width,height)< d^0.5;
a2=rand(width,height)< d^0.5;
output(a1&a2) = 1; %生成盐噪声
b1=rand(width,height)< d^0.5;
b2=rand(width,height)< d^0.5;
output(b1&b2) = 0; %生成胡椒噪声
imshow(output);
%椒盐噪声的密度就是d+d-d*d
  • 22
    点赞
  • 153
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
莱斯信道建模是一种常用的无线通信信道模型,用于描述具有强直射路径和多个散射路径的信号传输。在MATLAB中,可以通过以下步骤实现莱斯信道建模: 1. 生成直射路径和散射路径的信号: - 使用randn函数生成直射路径和散射路径的高斯随机信号。 - 使用exp函数生成指数衰减的幅度衰减因子。 2. 计算直射路径和散射路径的时延: - 使用exprnd函数生成指数分布的时延。 - 使用rand函数生成时延的相位。 3. 计算莱斯信道响应: - 将直射路径和散射路径的信号与对应的幅度衰减因子相乘。 - 将直射路径和散射路径的信号进行时延补偿。 - 将直射路径和散射路径的信号相加得到莱斯信道响应。 下面是MATLAB代码示例: ```matlab % 设置参数 directAmplitude = 1; % 直射路径幅度 scatterAmplitude = 0.5; % 散射路径幅度 directDelay = 0; % 直射路径时延 scatterDelay = [1, 2, 3]; % 散射路径时延 Kfactor = 10; % K因子 % 生成直射路径和散射路径的信号 directSignal = directAmplitude * randn(1, N); scatterSignal = scatterAmplitude * randn(length(scatterDelay), N); % 计算直射路径和散射路径的时延 directDelay = directDelay * ones(1, N); scatterDelay = exprnd(1, length(scatterDelay), N); % 计算莱斯信道响应 directChannel = directSignal .* exp(1i * 2 * pi * directDelay); scatterChannel = scatterSignal .* exp(1i * 2 * pi * scatterDelay); riceChannel = directChannel + scatterChannel; % 可以根据需要对信道进行后续处理,如添加噪声等 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值