📄 imnoise2.m
字号:
function R = imnoise2(type, M, N, a, b)
% IMNOISE2 Generates an array of random numbers with specified PDF.
% R=IMNOISE2(TYPE,M,N,A,B) generates an array,R, of aize
% M-by-N, whose elements are random numbers of the specified TYPE
% with parameters A and B. If only TYPE is included in the
% input argument list, a single random number of the specified
% TYPE and default parameters shown below is generated . If only
% TYPE , M,and % Nare provided, the default parameters shown below
% are used. If M=N=1,IMNOISE2 generates a single random
% number of the specified TYPE and
% parameters A and B. Set default values.
%
% Valid Values for TYPE and parameters A and B are:
% The default values are (0, 1).
% 'uniform' Uniform random numbers in the interval (A, B);
% 'Gaussian' Gaussian random numbers with mean A and standard
% deviation B. The default values are a = 0, B = 1.
% 'salt & pepper' salt and pepper numbers of amplitued 0 with
% probability pa = A, an damplitued 1 with
% probability Pb = B. the default values are Pa =
% Pb = A = B = 0.05. Note that the noise has
% values 0 (with probability pa = A) and 1 (with
% probability Pb = B), so scaling is necessary if
% values other than 0 and 1 are required. The noise
% matrix R is asigned three values. If R(x, y) =
% 0, the noise at (x, y) is pepper (black). If
% R(x, y) = 1, the noise at (x, y) is salt
% (white). If R(x, y) = 0.5, there is no nosie
% assigned to coordinates (x, y).
% 'lognormal' Lognormal numbers with offset A and shape
% parameter B. The defaults are A 1 and B =
% 0.25.
% 'rayleigh' Rayleigh noise with parameters A and B. The
% default values are A = 0 and B = 1
% 'exponential' Exponential random numbers with parameter A. The
% default is A = 1.
% 'erlang' Erlang (gamma) random numbers with paramentes A
% and B. B must be a positive integer. T
% defaults are A = 2 and B = 5. Erlang random
% numbers are approximated as the sum of B
% exponential random numbers
% Set default values.
if nargin==1
a=0;b=1;
M=1;N=1;
elseif nargin==3
a=0;b=1;
end
% Begin processing. Use lower(type) to protect against input being
% capitalized.
switch lower(type)
case 'uniform'
R=a+(b-a)*rand(M,N);
case 'guassian'
R=a+b*randn(M,N);
case 'salt & pepper'
if nargin<=3
a=0.05;b=0.05;
end
% Check to make sure that Pa+Pb is not >1.
if (a+b)>1
error('The sum Pa+Pb must not exceed 1.')
end
R(1:M,1:N)=0.5;
% Generate an M-by-N array of uniformly - distributed random numbers in the
% range(0,1). Then, Pa*(M*N) OF THEM WILL HAVE VALUES <=a. The coordinates
% of these points we call 0 (pepper noise). Similarly, Pb*(M*N) points will
% have values inthe range > a & <= (a+b). These we call 1 (salt noise).
X=rand(M,N);
c=find(X<=a);
R(c)=0;
u=a+b;
c=find(X>a & X<=u);
R(c)=1;
case 'lognormal'
if nargin<=3
a=1;b=0.25;
end
R=a*exp(b*randn(M,N));
case 'rayleigh'
R=a+(-b*log(1-rand(M,N))).^0.5;
case 'exponential'
if nargin<=3
a=1;
end
if a<=0
error('Parameter a must be positive for exponential type.')
end
k=-1/a;
R=k*log(1-rand(M,N));
case 'erlang'
if nargin <=3
a=2;b=5;
end
if (b ~= round(b) | b<=0)
error('Param b must be a positive integer for Erlang.')
end
k=-1/a;
R=zeros(M,N);
for j=1:b
R=R+k*log(1-rand(M,N));
end
otherwise
error('Unknown distribution type.')
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -