annotate imnoise.m @ 0:587e29845b1d Octave-Forge-2001.11.02

Initial revision
author pkienzle
date Wed, 10 Oct 2001 19:54:49 +0000
parents
children 82d503016b14
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
1 ## Copyright (C) 2000 Paul Kienzle
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
2 ##
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
3 ## This program is free software; you can redistribute it and/or modify
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
4 ## it under the terms of the GNU General Public License as published by
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
5 ## the Free Software Foundation; either version 2 of the License, or
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
6 ## (at your option) any later version.
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
7 ##
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
8 ## This program is distributed in the hope that it will be useful,
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
9 ## but WITHOUT ANY WARRANTY; without even the implied warranty of
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
10 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
11 ## GNU General Public License for more details.
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
12 ##
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
13 ## You should have received a copy of the GNU General Public License
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
14 ## along with this program; if not, write to the Free Software
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
15 ## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
16
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
17 ## usage: B = imnoise (A, type)
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
18 ##
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
19 ## Adds noise to image in A.
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
20 ##
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
21 ## imnoise (A, 'gaussian' [, mean [, var]])
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
22 ## additive gaussian noise: A = A + noise
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
23 ## defaults to mean=0, var=0.01
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
24 ##
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
25 ## imnoise (A, 'salt & pepper' [, density])
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
26 ## lost pixels: A = 0 or 1 for density*100% of the pixels
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
27 ## defaults to density=0.05, or 5%
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
28 ##
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
29 ## imnoise (A, 'speckle' [, var])
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
30 ## multiplicative gaussian noise: A = A + A*noise
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
31 ## defaults to var=0.04
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
32
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
33 function A = imnoise(A, stype, a, b)
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
34
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
35 if (nargin < 3 || nargin > 4 || !is_matrix(A) || !isstr(stype))
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
36 usage("B = imnoise(A, type, parameters, ...)");
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
37 endif
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
38
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
39 stype = tolower(stype);
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
40 if (strcmp(stype, 'gaussian'))
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
41 if (nargin < 3), a = 0.0; endif
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
42 if (nargin < 4), b = 0.01; endif
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
43 A = A + (a + randn(size(A)) * b);
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
44 elseif (strcmp(stype, 'salt & pepper'))
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
45 if (nargin < 3), a = 0.05; endif
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
46 noise = rand(size(A));
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
47 A(noise <= a/2) = 0;
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
48 A(noise >= 1-a/2) = 1;
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
49 elseif (strcmp(stype, 'speckle'))
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
50 if (nargin < 3), a = 0.04; endif
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
51 A = A * (1 + randn(size(A))*a);
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
52 else
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
53 error("imnoise: use type 'gaussian', 'salt & pepper', or 'speckle'");
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
54 endif
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
55
587e29845b1d Initial revision
pkienzle
parents:
diff changeset
56 endfunction