NAME
Image::Leptonica::Func::graymorph
VERSION
version 0.04
graymorph.c
graymorph.c
Top-level binary morphological operations (van Herk / Gil-Werman)
PIX
*pixErodeGray
()
PIX
*pixDilateGray
()
PIX
*pixOpenGray
()
PIX
*pixCloseGray
()
Special operations
for
1x3, 3x1 and 3x3 Sels (direct)
PIX
*pixErodeGray3
()
PIX
*pixDilateGray3
()
PIX
*pixOpenGray3
()
PIX
*pixCloseGray3
()
Method: Algorithm by van Herk and Gil and Werman, 1992
Measured speed of the vH/G-W implementation is about 1 output
pixel per 120 PIII clock cycles,
for
a horizontal or vertical
erosion or dilation. The computation
time
doubles
for
opening
or closing, or
for
a square SE, as expected, and is independent
of the size of the SE.
A faster implementation can be made directly
for
brick Sels
of maximum size 3. We unroll the computation
for
sets of 8 bytes.
It needs to be called explicitly; the general functions
do
not
default
for
the size 3 brick Sels.
FUNCTIONS
pixCloseGray
PIX * pixCloseGray ( PIX *pixs, l_int32 hsize, l_int32 vsize )
pixCloseGray()
Input: pixs
hsize (of Sel; must be odd; origin implicitly in center)
vsize (ditto)
Return: pixd
Notes:
(1) Sel is a brick
with
all elements being hits
(2) If hsize = vsize = 1, just returns a copy.
pixCloseGray3
PIX * pixCloseGray3 ( PIX *pixs, l_int32 hsize, l_int32 vsize )
pixCloseGray3()
Input: pixs (8 bpp, not cmapped)
hsize (1 or 3)
vsize (1 or 3)
Return: pixd, or null on error
Notes:
(1) Special case
for
1x3, 3x1 or 3x3 brick sel (all hits)
(2) If hsize = vsize = 1, just returns a copy.
pixDilateGray
PIX * pixDilateGray ( PIX *pixs, l_int32 hsize, l_int32 vsize )
pixDilateGray()
Input: pixs
hsize (of Sel; must be odd; origin implicitly in center)
vsize (ditto)
Return: pixd
Notes:
(1) Sel is a brick
with
all elements being hits
(2) If hsize = vsize = 1, just returns a copy.
pixDilateGray3
PIX * pixDilateGray3 ( PIX *pixs, l_int32 hsize, l_int32 vsize )
pixDilateGray3()
Input: pixs (8 bpp, not cmapped)
hsize (1 or 3)
vsize (1 or 3)
Return: pixd, or null on error
Notes:
(1) Special case
for
1x3, 3x1 or 3x3 brick sel (all hits)
(2) If hsize = vsize = 1, just returns a copy.
pixErodeGray
PIX * pixErodeGray ( PIX *pixs, l_int32 hsize, l_int32 vsize )
pixErodeGray()
Input: pixs
hsize (of Sel; must be odd; origin implicitly in center)
vsize (ditto)
Return: pixd
Notes:
(1) Sel is a brick
with
all elements being hits
(2) If hsize = vsize = 1, just returns a copy.
pixErodeGray3
PIX * pixErodeGray3 ( PIX *pixs, l_int32 hsize, l_int32 vsize )
pixErodeGray3()
Input: pixs (8 bpp, not cmapped)
hsize (1 or 3)
vsize (1 or 3)
Return: pixd, or null on error
Notes:
(1) Special case
for
1x3, 3x1 or 3x3 brick sel (all hits)
(2) If hsize = vsize = 1, just returns a copy.
(3) It would be nice not to add a border, but it is required
if
we want the same results as from the general case.
We add 4 bytes on the left to speed up the copying, and
8 bytes at the right and bottom to allow unrolling of
the computation of 8 pixels.
pixOpenGray
PIX * pixOpenGray ( PIX *pixs, l_int32 hsize, l_int32 vsize )
pixOpenGray()
Input: pixs
hsize (of Sel; must be odd; origin implicitly in center)
vsize (ditto)
Return: pixd
Notes:
(1) Sel is a brick
with
all elements being hits
(2) If hsize = vsize = 1, just returns a copy.
pixOpenGray3
PIX * pixOpenGray3 ( PIX *pixs, l_int32 hsize, l_int32 vsize )
pixOpenGray3()
Input: pixs (8 bpp, not cmapped)
hsize (1 or 3)
vsize (1 or 3)
Return: pixd, or null on error
Notes:
(1) Special case
for
1x3, 3x1 or 3x3 brick sel (all hits)
(2) If hsize = vsize = 1, just returns a copy.
(3) It would be nice not to add a border, but it is required
to get the same results as
for
the general case.
AUTHOR
Zakariyya Mughal <zmughal@cpan.org>
COPYRIGHT AND LICENSE
This software is copyright (c) 2014 by Zakariyya Mughal.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.