⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 imnoise2.m

📁 Matlab數位影音處理 影像方面的處理
💻 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 + -