annotate inst/fspecial.m @ 857:75d6748324de

New functions imgradient and imgradientxy (patch #8265) * imgradient.m, imgradientxy.m: new function files. * INDEX: update list of functions. * NEWS: update list of new functinos for next release.
author Brandon Miles <brandon.miles7@gmail.com>
date Sun, 05 Jan 2014 07:27:06 +0000
parents 71a92303203d
children f1cf02800a87
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
676
71a92303203d image: change enconding to UTF-8
carandraug
parents: 600
diff changeset
1 ## Copyright (C) 2005 Søren Hauberg <soren@hauberg.org>
561
c45838839d86 maint: update license to GPLv3 and mention non GPL files
carandraug
parents: 356
diff changeset
2 ##
c45838839d86 maint: update license to GPLv3 and mention non GPL files
carandraug
parents: 356
diff changeset
3 ## This program is free software; you can redistribute it and/or modify it under
c45838839d86 maint: update license to GPLv3 and mention non GPL files
carandraug
parents: 356
diff changeset
4 ## the terms of the GNU General Public License as published by the Free Software
c45838839d86 maint: update license to GPLv3 and mention non GPL files
carandraug
parents: 356
diff changeset
5 ## Foundation; either version 3 of the License, or (at your option) any later
c45838839d86 maint: update license to GPLv3 and mention non GPL files
carandraug
parents: 356
diff changeset
6 ## version.
c45838839d86 maint: update license to GPLv3 and mention non GPL files
carandraug
parents: 356
diff changeset
7 ##
c45838839d86 maint: update license to GPLv3 and mention non GPL files
carandraug
parents: 356
diff changeset
8 ## This program is distributed in the hope that it will be useful, but WITHOUT
c45838839d86 maint: update license to GPLv3 and mention non GPL files
carandraug
parents: 356
diff changeset
9 ## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
c45838839d86 maint: update license to GPLv3 and mention non GPL files
carandraug
parents: 356
diff changeset
10 ## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
c45838839d86 maint: update license to GPLv3 and mention non GPL files
carandraug
parents: 356
diff changeset
11 ## details.
c45838839d86 maint: update license to GPLv3 and mention non GPL files
carandraug
parents: 356
diff changeset
12 ##
c45838839d86 maint: update license to GPLv3 and mention non GPL files
carandraug
parents: 356
diff changeset
13 ## You should have received a copy of the GNU General Public License along with
c45838839d86 maint: update license to GPLv3 and mention non GPL files
carandraug
parents: 356
diff changeset
14 ## this program; if not, see <http://www.gnu.org/licenses/>.
217
93ec20b95b4a First revision
hauberg
parents:
diff changeset
15
220
df13bd973471 Documentation is now in Texinfo (looks better on the website)
hauberg
parents: 217
diff changeset
16 ## -*- texinfo -*-
df13bd973471 Documentation is now in Texinfo (looks better on the website)
hauberg
parents: 217
diff changeset
17 ## @deftypefn {Function File} {@var{filter} = } fspecial(@var{type}, @var{arg1}, @var{arg2})
df13bd973471 Documentation is now in Texinfo (looks better on the website)
hauberg
parents: 217
diff changeset
18 ## Create spatial filters for image processing.
df13bd973471 Documentation is now in Texinfo (looks better on the website)
hauberg
parents: 217
diff changeset
19 ##
df13bd973471 Documentation is now in Texinfo (looks better on the website)
hauberg
parents: 217
diff changeset
20 ## @var{type} determines the shape of the filter and can be
356
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
21 ## @table @t
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
22 ## @item "average"
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
23 ## Rectangular averaging filter. The optional argument @var{arg1} controls the
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
24 ## size of the filter. If @var{arg1} is an integer @var{N}, a @var{N} by @var{N}
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
25 ## filter is created. If it is a two-vector with elements @var{N} and @var{M}, the
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
26 ## resulting filter will be @var{N} by @var{M}. By default a 3 by 3 filter is
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
27 ## created.
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
28 ## @item "disk"
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
29 ## Circular averaging filter. The optional argument @var{arg1} controls the
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
30 ## radius of the filter. If @var{arg1} is an integer @var{N}, a 2 @var{N} + 1
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
31 ## filter is created. By default a radius of 5 is used.
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
32 ## @item "gaussian"
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
33 ## Gaussian filter. The optional argument @var{arg1} controls the size of the
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
34 ## filter. If @var{arg1} is an integer @var{N}, a @var{N} by @var{N}
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
35 ## filter is created. If it is a two-vector with elements @var{N} and @var{M}, the
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
36 ## resulting filter will be @var{N} by @var{M}. By default a 3 by 3 filter is
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
37 ## created. The optional argument @var{arg2} sets spread of the filter. By default
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
38 ## a spread of @math{0.5} is used.
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
39 ## @item "log"
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
40 ## Laplacian of Gaussian. The optional argument @var{arg1} controls the size of the
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
41 ## filter. If @var{arg1} is an integer @var{N}, a @var{N} by @var{N}
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
42 ## filter is created. If it is a two-vector with elements @var{N} and @var{M}, the
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
43 ## resulting filter will be @var{N} by @var{M}. By default a 5 by 5 filter is
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
44 ## created. The optional argument @var{arg2} sets spread of the filter. By default
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
45 ## a spread of @math{0.5} is used.
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
46 ## @item "laplacian"
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
47 ## 3x3 approximation of the laplacian. The filter is approximated as
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
48 ## @example
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
49 ## (4/(@var{alpha}+1))*[@var{alpha}/4, (1-@var{alpha})/4, @var{alpha}/4; ...
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
50 ## (1-@var{alpha})/4, -1, (1-@var{alpha})/4; ...
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
51 ## @var{alpha}/4, (1-@var{alpha})/4, @var{alpha}/4];
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
52 ## @end example
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
53 ## where @var{alpha} is a number between 0 and 1. This number can be controlled
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
54 ## via the optional input argument @var{arg1}. By default it is @math{0.2}.
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
55 ## @item "unsharp"
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
56 ## Sharpening filter. The following filter is returned
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
57 ## @example
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
58 ## (1/(@var{alpha}+1))*[-@var{alpha}, @var{alpha}-1, -@var{alpha}; ...
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
59 ## @var{alpha}-1, @var{alpha}+5, @var{alpha}-1; ...
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
60 ## -@var{alpha}, @var{alpha}-1, -@var{alpha}];
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
61 ## @end example
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
62 ## where @var{alpha} is a number between 0 and 1. This number can be controlled
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
63 ## via the optional input argument @var{arg1}. By default it is @math{0.2}.
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
64 ## @item "motion"
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
65 ## Moion blur filter of width 1 pixel. The optional input argument @var{arg1}
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
66 ## controls the length of the filter, which by default is 9. The argument @var{arg2}
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
67 ## controls the angle of the filter, which by default is 0 degrees.
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
68 ## @item "sobel"
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
69 ## Horizontal Sobel edge filter. The following filter is returned
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
70 ## @example
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
71 ## [ 1, 2, 1;
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
72 ## 0, 0, 0;
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
73 ## -1, -2, -1 ]
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
74 ## @end example
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
75 ## @item "prewitt"
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
76 ## Horizontal Prewitt edge filter. The following filter is returned
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
77 ## @example
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
78 ## [ 1, 1, 1;
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
79 ## 0, 0, 0;
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
80 ## -1, -1, -1 ]
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
81 ## @end example
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
82 ## @item "kirsch"
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
83 ## Horizontal Kirsch edge filter. The following filter is returned
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
84 ## @example
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
85 ## [ 3, 3, 3;
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
86 ## 3, 0, 3;
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
87 ## -5, -5, -5 ]
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
88 ## @end example
220
df13bd973471 Documentation is now in Texinfo (looks better on the website)
hauberg
parents: 217
diff changeset
89 ## @end table
df13bd973471 Documentation is now in Texinfo (looks better on the website)
hauberg
parents: 217
diff changeset
90 ## @end deftypefn
df13bd973471 Documentation is now in Texinfo (looks better on the website)
hauberg
parents: 217
diff changeset
91
676
71a92303203d image: change enconding to UTF-8
carandraug
parents: 600
diff changeset
92 ## Remarks by Søren Hauberg (jan. 2nd 2007)
220
df13bd973471 Documentation is now in Texinfo (looks better on the website)
hauberg
parents: 217
diff changeset
93 ## The motion filter and most of the documentation was taken from Peter Kovesi's
df13bd973471 Documentation is now in Texinfo (looks better on the website)
hauberg
parents: 217
diff changeset
94 ## GPL'ed implementation of fspecial from
df13bd973471 Documentation is now in Texinfo (looks better on the website)
hauberg
parents: 217
diff changeset
95 ## http://www.csse.uwa.edu.au/~pk/research/matlabfns/OctaveCode/fspecial.m
df13bd973471 Documentation is now in Texinfo (looks better on the website)
hauberg
parents: 217
diff changeset
96
356
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
97 function f = fspecial (type, arg1, arg2)
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
98 if (!ischar (type))
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
99 error ("fspecial: first argument must be a string");
217
93ec20b95b4a First revision
hauberg
parents:
diff changeset
100 endif
93ec20b95b4a First revision
hauberg
parents:
diff changeset
101
93ec20b95b4a First revision
hauberg
parents:
diff changeset
102 switch lower(type)
93ec20b95b4a First revision
hauberg
parents:
diff changeset
103 case "average"
93ec20b95b4a First revision
hauberg
parents:
diff changeset
104 ## Get filtersize
356
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
105 if (nargin > 1 && isreal (arg1) && length (arg1 (:)) <= 2)
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
106 fsize = arg1 (:);
217
93ec20b95b4a First revision
hauberg
parents:
diff changeset
107 else
93ec20b95b4a First revision
hauberg
parents:
diff changeset
108 fsize = 3;
93ec20b95b4a First revision
hauberg
parents:
diff changeset
109 endif
93ec20b95b4a First revision
hauberg
parents:
diff changeset
110 ## Create the filter
356
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
111 f = ones (fsize);
217
93ec20b95b4a First revision
hauberg
parents:
diff changeset
112 ## Normalize the filter to integral 1
356
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
113 f = f / sum (f (:));
217
93ec20b95b4a First revision
hauberg
parents:
diff changeset
114
93ec20b95b4a First revision
hauberg
parents:
diff changeset
115 case "disk"
93ec20b95b4a First revision
hauberg
parents:
diff changeset
116 ## Get the radius
356
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
117 if (nargin > 1 && isreal (arg1) && length (arg1 (:)) == 1)
217
93ec20b95b4a First revision
hauberg
parents:
diff changeset
118 radius = arg1;
93ec20b95b4a First revision
hauberg
parents:
diff changeset
119 else
93ec20b95b4a First revision
hauberg
parents:
diff changeset
120 radius = 5;
93ec20b95b4a First revision
hauberg
parents:
diff changeset
121 endif
93ec20b95b4a First revision
hauberg
parents:
diff changeset
122 ## Create the filter
356
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
123 [x, y] = meshgrid (-radius:radius, -radius:radius);
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
124 r = sqrt (x.^2 + y.^2);
217
93ec20b95b4a First revision
hauberg
parents:
diff changeset
125 f = (r <= radius);
93ec20b95b4a First revision
hauberg
parents:
diff changeset
126 ## Normalize the filter to integral 1
356
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
127 f = f / sum (f (:));
217
93ec20b95b4a First revision
hauberg
parents:
diff changeset
128
93ec20b95b4a First revision
hauberg
parents:
diff changeset
129 case "gaussian"
93ec20b95b4a First revision
hauberg
parents:
diff changeset
130 ## Get hsize
356
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
131 if (nargin > 1 && isreal (arg1))
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
132 if (length (arg1 (:)) == 1)
217
93ec20b95b4a First revision
hauberg
parents:
diff changeset
133 hsize = [arg1, arg1];
356
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
134 elseif (length (arg1 (:)) == 2)
217
93ec20b95b4a First revision
hauberg
parents:
diff changeset
135 hsize = arg1;
93ec20b95b4a First revision
hauberg
parents:
diff changeset
136 else
356
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
137 error ("fspecial: second argument must be a scalar or a vector of two scalars");
217
93ec20b95b4a First revision
hauberg
parents:
diff changeset
138 endif
93ec20b95b4a First revision
hauberg
parents:
diff changeset
139 else
93ec20b95b4a First revision
hauberg
parents:
diff changeset
140 hsize = [3, 3];
93ec20b95b4a First revision
hauberg
parents:
diff changeset
141 endif
93ec20b95b4a First revision
hauberg
parents:
diff changeset
142 ## Get sigma
356
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
143 if (nargin > 2 && isreal (arg2) && length (arg2 (:)) == 1)
217
93ec20b95b4a First revision
hauberg
parents:
diff changeset
144 sigma = arg2;
93ec20b95b4a First revision
hauberg
parents:
diff changeset
145 else
93ec20b95b4a First revision
hauberg
parents:
diff changeset
146 sigma = 0.5;
93ec20b95b4a First revision
hauberg
parents:
diff changeset
147 endif
356
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
148 h1 = hsize (1)-1; h2 = hsize (2)-1;
217
93ec20b95b4a First revision
hauberg
parents:
diff changeset
149 [x, y] = meshgrid(0:h2, 0:h1);
93ec20b95b4a First revision
hauberg
parents:
diff changeset
150 x = x-h2/2; y = y-h1/2;
93ec20b95b4a First revision
hauberg
parents:
diff changeset
151 gauss = exp( -( x.^2 + y.^2 ) / (2*sigma^2) );
356
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
152 f = gauss / sum (gauss (:));
217
93ec20b95b4a First revision
hauberg
parents:
diff changeset
153
93ec20b95b4a First revision
hauberg
parents:
diff changeset
154 case "laplacian"
93ec20b95b4a First revision
hauberg
parents:
diff changeset
155 ## Get alpha
356
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
156 if (nargin > 1 && isscalar (arg1))
217
93ec20b95b4a First revision
hauberg
parents:
diff changeset
157 alpha = arg1;
356
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
158 if (alpha < 0 || alpha > 1)
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
159 error ("fspecial: second argument must be between 0 and 1");
217
93ec20b95b4a First revision
hauberg
parents:
diff changeset
160 endif
93ec20b95b4a First revision
hauberg
parents:
diff changeset
161 else
93ec20b95b4a First revision
hauberg
parents:
diff changeset
162 alpha = 0.2;
93ec20b95b4a First revision
hauberg
parents:
diff changeset
163 endif
93ec20b95b4a First revision
hauberg
parents:
diff changeset
164 ## Compute filter
356
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
165 f = (4/(alpha+1))*[alpha/4, (1-alpha)/4, alpha/4; ...
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
166 (1-alpha)/4, -1, (1-alpha)/4; ...
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
167 alpha/4, (1-alpha)/4, alpha/4];
217
93ec20b95b4a First revision
hauberg
parents:
diff changeset
168 case "log"
93ec20b95b4a First revision
hauberg
parents:
diff changeset
169 ## Get hsize
356
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
170 if (nargin > 1 && isreal (arg1))
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
171 if (length (arg1 (:)) == 1)
217
93ec20b95b4a First revision
hauberg
parents:
diff changeset
172 hsize = [arg1, arg1];
356
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
173 elseif (length (arg1 (:)) == 2)
217
93ec20b95b4a First revision
hauberg
parents:
diff changeset
174 hsize = arg1;
93ec20b95b4a First revision
hauberg
parents:
diff changeset
175 else
356
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
176 error ("fspecial: second argument must be a scalar or a vector of two scalars");
217
93ec20b95b4a First revision
hauberg
parents:
diff changeset
177 endif
93ec20b95b4a First revision
hauberg
parents:
diff changeset
178 else
93ec20b95b4a First revision
hauberg
parents:
diff changeset
179 hsize = [5, 5];
93ec20b95b4a First revision
hauberg
parents:
diff changeset
180 endif
93ec20b95b4a First revision
hauberg
parents:
diff changeset
181 ## Get sigma
356
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
182 if (nargin > 2 && isreal (arg2) && length (arg2 (:)) == 1)
217
93ec20b95b4a First revision
hauberg
parents:
diff changeset
183 sigma = arg2;
93ec20b95b4a First revision
hauberg
parents:
diff changeset
184 else
93ec20b95b4a First revision
hauberg
parents:
diff changeset
185 sigma = 0.5;
93ec20b95b4a First revision
hauberg
parents:
diff changeset
186 endif
93ec20b95b4a First revision
hauberg
parents:
diff changeset
187 ## Compute the filter
356
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
188 h1 = hsize (1)-1; h2 = hsize (2)-1;
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
189 [x, y] = meshgrid(0:h2, 0:h1);
217
93ec20b95b4a First revision
hauberg
parents:
diff changeset
190 x = x-h2/2; y = y = y-h1/2;
93ec20b95b4a First revision
hauberg
parents:
diff changeset
191 gauss = exp( -( x.^2 + y.^2 ) / (2*sigma^2) );
93ec20b95b4a First revision
hauberg
parents:
diff changeset
192 f = ( (x.^2 + y.^2 - 2*sigma^2).*gauss )/( 2*pi*sigma^6*sum(gauss(:)) );
93ec20b95b4a First revision
hauberg
parents:
diff changeset
193
93ec20b95b4a First revision
hauberg
parents:
diff changeset
194 case "motion"
93ec20b95b4a First revision
hauberg
parents:
diff changeset
195 ## Taken (with some changes) from Peter Kovesis implementation
93ec20b95b4a First revision
hauberg
parents:
diff changeset
196 ## (http://www.csse.uwa.edu.au/~pk/research/matlabfns/OctaveCode/fspecial.m)
93ec20b95b4a First revision
hauberg
parents:
diff changeset
197 ## FIXME: The implementation is not quite matlab compatible.
356
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
198 if (nargin > 1 && isreal (arg1))
217
93ec20b95b4a First revision
hauberg
parents:
diff changeset
199 len = arg1;
93ec20b95b4a First revision
hauberg
parents:
diff changeset
200 else
93ec20b95b4a First revision
hauberg
parents:
diff changeset
201 len = 9;
93ec20b95b4a First revision
hauberg
parents:
diff changeset
202 endif
356
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
203 if (mod (len, 2) == 1)
217
93ec20b95b4a First revision
hauberg
parents:
diff changeset
204 sze = [len, len];
93ec20b95b4a First revision
hauberg
parents:
diff changeset
205 else
93ec20b95b4a First revision
hauberg
parents:
diff changeset
206 sze = [len+1, len+1];
93ec20b95b4a First revision
hauberg
parents:
diff changeset
207 end
356
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
208 if (nargin > 2 && isreal (arg2))
217
93ec20b95b4a First revision
hauberg
parents:
diff changeset
209 angle = arg2;
93ec20b95b4a First revision
hauberg
parents:
diff changeset
210 else
93ec20b95b4a First revision
hauberg
parents:
diff changeset
211 angle = 0;
93ec20b95b4a First revision
hauberg
parents:
diff changeset
212 endif
600
81388819d69a image: use spaces, not tabs
carandraug
parents: 561
diff changeset
213
217
93ec20b95b4a First revision
hauberg
parents:
diff changeset
214 ## First generate a horizontal line across the middle
356
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
215 f = zeros (sze);
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
216 f (floor (len/2)+1, 1:len) = 1;
217
93ec20b95b4a First revision
hauberg
parents:
diff changeset
217
93ec20b95b4a First revision
hauberg
parents:
diff changeset
218 # Then rotate to specified angle
356
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
219 f = imrotate (f, angle, "bilinear", "loose");
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
220 f = f / sum (f (:));
217
93ec20b95b4a First revision
hauberg
parents:
diff changeset
221
93ec20b95b4a First revision
hauberg
parents:
diff changeset
222 case "prewitt"
93ec20b95b4a First revision
hauberg
parents:
diff changeset
223 ## The filter
356
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
224 f = [1, 1, 1; 0, 0, 0; -1, -1, -1];
217
93ec20b95b4a First revision
hauberg
parents:
diff changeset
225
93ec20b95b4a First revision
hauberg
parents:
diff changeset
226 case "sobel"
93ec20b95b4a First revision
hauberg
parents:
diff changeset
227 ## The filter
356
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
228 f = [1, 2, 1; 0, 0, 0; -1, -2, -1];
217
93ec20b95b4a First revision
hauberg
parents:
diff changeset
229
93ec20b95b4a First revision
hauberg
parents:
diff changeset
230 case "kirsch"
93ec20b95b4a First revision
hauberg
parents:
diff changeset
231 ## The filter
356
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
232 f = [3, 3, 3; 3, 0, 3; -5, -5, -5];
217
93ec20b95b4a First revision
hauberg
parents:
diff changeset
233
93ec20b95b4a First revision
hauberg
parents:
diff changeset
234 case "unsharp"
93ec20b95b4a First revision
hauberg
parents:
diff changeset
235 ## Get alpha
356
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
236 if (nargin > 1 && isscalar (arg1))
217
93ec20b95b4a First revision
hauberg
parents:
diff changeset
237 alpha = arg1;
356
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
238 if (alpha < 0 || alpha > 1)
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
239 error ("fspecial: second argument must be between 0 and 1");
217
93ec20b95b4a First revision
hauberg
parents:
diff changeset
240 endif
93ec20b95b4a First revision
hauberg
parents:
diff changeset
241 else
93ec20b95b4a First revision
hauberg
parents:
diff changeset
242 alpha = 0.2;
93ec20b95b4a First revision
hauberg
parents:
diff changeset
243 endif
93ec20b95b4a First revision
hauberg
parents:
diff changeset
244 ## Compute filter
356
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
245 f = (1/(alpha+1))*[-alpha, alpha-1, -alpha; ...
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
246 alpha-1, alpha+5, alpha-1; ...
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
247 -alpha, alpha-1, -alpha];
217
93ec20b95b4a First revision
hauberg
parents:
diff changeset
248
93ec20b95b4a First revision
hauberg
parents:
diff changeset
249 otherwise
356
83b86e861886 Improve help message
hauberg
parents: 274
diff changeset
250 error ("fspecial: filter type '%s' is not supported", type);
217
93ec20b95b4a First revision
hauberg
parents:
diff changeset
251 endswitch
93ec20b95b4a First revision
hauberg
parents:
diff changeset
252 endfunction