在V斜率DEM中插入随机噪声

时间:2017-06-19 10:30:32

标签: matlab matlab-figure noise

使用以下代码,我将生成一个具有2个不同斜率的V平面,分别为10°和20°。

% /*
%  Assumptions
%  */  

% resolution [m]
res = 1;
% inclination [deg]
i1 = 10; i2 = 20;


% /*
%  DEM -> V shape  
%  */  

% pre-allocate output
testDEM = zeros(513);
% required elevation step [m]
hstep = res*tan(i1*(pi/180));
% elevation start right [m]
k = 513*(2/3)*tan(i1*(pi/180));
% coordinates
q = length(1:513*(2/3));
% initialize
nStep = 0;
for jj = 1:q
    testDEM(:,jj) = k-nStep;
    nStep = nStep + hstep;
end
% change elevation step
step = res*tan(i2*(pi/180));
% update nStep
nStep = step;
% elevation start left [m]
start = testDEM(end,q);
for jj = q+1:513
    testDEM(:,jj) = start + nStep;
    nStep = nStep + step;
end
testDEM = testDEM(1:507,1:507);

%//Plot test DEM 
f_tSlope = figure();  
set(gca,'PlotBoxAspectRatio',[1 1 1]);
surf(testDEM, 'EdgeColor', 'none')
colormap jet;
hb = colorbar('location','eastoutside');
hb.Label.String = '[m]';
hb.Label.Rotation = 0;
hb.Label.HorizontalAlignment = 'Left';

以下是我在每个地方添加噪音

sigma = 1;
testDEM = testDEM + sigma*randn(size(testDEM));

但我想要的是在随机位置添加随机噪声,而不是随处可见。我该怎么办?

提前致谢

2 个答案:

答案 0 :(得分:1)

这个怎么样:

N_locations = 100; % no. of locations to add random noise
% randomize 'N_locations' linear indecies in 'testDEM':
noise_location = randi(numel(testDEM),N_locations,1);
% add the noise:
testDEM(noise_location) = testDEM(noise_location)+sigma*randn(N_locations,1);

这将在地图上随机化N_locations个随机位置,并为每个位置应用不同的随机噪音。

如果您希望将相同的噪声添加到所有随机位置,只需编写sigma*randn,不要使用后面的括号。

对于小N_locations,这应该足够了。但是,如果您想确保两次选择相同的位置,或N_locations很大,则可以设置noise_location,如下所示:

noise_location = randperm(numel(testDEM),N_locations);

所以你在testDEM中只有非重复的索引值。

答案 1 :(得分:0)

此代码以0.5概率

添加噪声
testDEM = testDEM + sigma*randn(size(testDEM)) .* (rand(size(testDEM)) > 0.5);