[07d29c]: erode.m  Maximize  Restore  History

Download this file

90 lines (75 with data), 2.7 kB

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
## Copyright (C) 2004 Josep Mones i Teixidor
##
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## (at your option) any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
## -*- texinfo -*-
## @deftypefn {Function File} {@var{BW2} = } erode (@var{BW1},@var{SE})
## @deftypefnx {Function File} {@var{BW2} = } erode (@var{BW1},@var{SE},@var{alg})
## @deftypefnx {Function File} {@var{BW2} = } erode (@var{BW1},@var{SE},...,@var{n})
## Perform an erosion morphological operation on a binary image.
##
## BW2 = erosion(BW1, SE) returns a binary image with the result of an erosion
## operation on @var{BW1} using neighbour mask @var{SE}.
##
## For each point in @var{BW1}, erode searchs its neighbours (which are
## defined by setting to 1 their in @var{SE}). If all neighbours
## are on (1), then pixel is set to 1. If any is off (0) then it is set to 0.
##
## Center of @var{SE} is calculated using floor((size(@var{SE})+1)/2).
##
## Pixels outside the image are considered to be 0.
##
## BW2 = erode(BW1, SE, alg) returns the result of a erosion operation
## using algorithm @var{alg}. Only 'spatial' is implemented at the moment.
##
## BW2 = erosion(BW1, SE, ..., n) returns the result of @var{n} erosion
## operations on @var{BW1}.
##
## @end deftypefn
## @seealso{dilate}
## Author: Josep Mones i Teixidor <jmones@puntbarra.com>
function BW2 = erode(BW1, SE, a, b)
alg='spatial';
n=1;
if (nargin < 1 || nargin > 4)
usage ("BW2 = erode(BW1, SE [, alg] [, n])");
endif
if nargin == 4
alg=a;
n=b;
elseif nargin == 3
if ischar(a)
alg=a;
else
n=a;
endif
endif
if !strcmp(alg, 'spatial')
error("erode: alg not implemented.");
endif
# count ones in mask
thr=sum(SE(:));
# "Binarize" BW1, just in case image is not [1,0]
BW1=BW1!=0;
for i=1:n
# create result matrix
BW1=filter2(SE,BW1) == thr;
endfor
BW2=BW1;
endfunction
%!demo
%! erode(ones(5,5),ones(3,3))
%! % creates a zeros border around ones.
%!assert(erode([0,1,0;1,1,1;0,1,0],[0,0,0;0,0,1;0,1,1])==[1,0,0;0,0,0;0,0,0]);
%!assert(erode([0,1,0;1,1,1;0,1,0],[0,1;1,1])==[1,0,0;0,0,0;0,0,0]);

Get latest updates about Open Source Projects, Conferences and News.

Sign up for the SourceForge newsletter:





No, thanks