使用以下代码,我将生成一个具有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));
但我想要的是在随机位置添加随机噪声,而不是随处可见。我该怎么办?
提前致谢
答案 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);