Name
Image::Find::Paths - Find paths in an image.
Synopsis
Use new to create and analyze a new image, then print to visualize the paths detected, or path to get the coordinates of points along each path in sequential order with an estimate of the thickness of the path at each point.
Description
Find paths in an image.
The following sections describe the methods in each functional area of this module. For an alphabetic listing of all methods by name see Index.
Methods
Find paths in an image
new($)
Find paths in an image represented as a string.
   Parameter  Description                                                 
1  $string    String of blanks; non blanks; new lines defining the image  
Example:
my $d = new(<<END);
     11                                                                      111
      11                                                                 1   111
       1111                            111                                   111
          1                           111111             1                   111
        111                            1111             111                  111
       11  1111111                      1                1
      11    11111                       1                                      1
      1      111                        1                 1                    1
     1111111111                         1             111111                   1
              111                       1                               1      1
END
is_deeply [$d->count, $d->x, $d->y, $d->numberOfPaths], [96, 80, 10, 6];
ok nws($d->print) eq nws(<<END);
   0         1         2         3         4         5         6         7         8
   01234567890123456789012345678901234567890123456789012345678901234567890123456789
 0      E1                                                                      E
 1       11                                                                     23
 2        1111                                                                   3
 3           1                             322E             S                    3
 4         111                             2               E1                    2S
 5        11     221S                      1
 6       11     23                         1                                      E
 7       1      3                          1                 S                    1
 8       11111112                          1             E1111                    1
 9                                         S                                      S
Image: X = 80, Y = 10, Paths = 6
END
is_deeply $d->path(5),
[[79,4, 1], [78,4, 2], [78,3, 3], [78,2, 3], [78,1, 3], [77,1, 2], [77,0, 1]];
This is a static method and so should be invoked as:
Image::Find::Paths::new
numberOfPaths($)
Number of paths in the image.
   Parameter  Description  
1  $i         Image        
Example:
is_deeply [$d->count, $d->x, $d->y, $d->numberOfPaths], [96, 80, 10, 6];
path($$)
Returns an array of arrays [x, y, t] where x, y are the coordinates of each point sequentially along the specified path and t is the estimated thickness of the path at that point. Paths are numbered from 1 to numberOfPaths.
   Parameter   Description  
1  $i          Image        
2  $partition  Partition    
Example:
is_deeply $d->path(5),
[[79,4, 1], [78,4, 2], [78,3, 3], [78,2, 3], [78,1, 3], [77,1, 2], [77,0, 1]];
print($)
Print the image: use S, E to show the start and end of each path, otherwise use the estimated thickness of the path at each point to mark the track of each path within each connected partition of the image.
   Parameter  Description  
1  $i         Image        
Example:
ok nws($d->print) eq nws(<<END);
   0         1         2         3         4         5         6         7         8
   01234567890123456789012345678901234567890123456789012345678901234567890123456789
 0      E1                                                                      E
 1       11                                                                     23
 2        1111                                                                   3
 3           1                             322E             S                    3
 4         111                             2               E1                    2S
 5        11     221S                      1
 6       11     23                         1                                      E
 7       1      3                          1                 S                    1
 8       11111112                          1             E1111                    1
 9                                         S                                      S
Image: X = 80, Y = 10, Paths = 6
END
Attributes
Attributes of an image
count :lvalue
Number of points in the image.
image :lvalue
Image data points.
partitions :lvalue
Number of partitions in the image.
partitionEnd :lvalue
End points for each path.
partitionStart :lvalue
Start points for each path.
partitionPath :lvalue
Path for each partition.
x :lvalue
Image dimension in x.
y :lvalue
Image dimension in y.
Private Methods
clone($)
Clone an image.
   Parameter  Description  
1  $i         Image        
Example:
is_deeply $d, $d->clone;
clonePartition($$)
Clone a partition of an image.
   Parameter   Description  
1  $i          Image        
2  $partition  Partition    
countPixels($)
Count the pixels in an image.
   Parameter  Description  
1  $i         Image        
height($)
Clone an image adding height to each pixel.
   Parameter  Description  
1  $i         Image        
partition($)
Partition the images into disjoint sets of connected points.
   Parameter  Description  
1  $i         Image        
mapPartition($$$)
Locate the pixels in the image that are connected to a pixel with a specified value.
   Parameter  Description                               
1  $i         Image                                     
2  $x         X coordinate of first point in partition  
3  $y         Y coordinate of first point in partition  
start($$)
Find the starting point for a path in a partition.
   Parameter   Description  
1  $i          Image        
2  $partition  Partition    
end($$)
Find the other end of a path in a partition.
   Parameter   Description  
1  $i          Image        
2  $partition  Partition    
traverseToOtherEnd($$$$)
Traverse to the other end of a partition.
   Parameter   Description         
1  $I          Image               
2  $partition  Partition           
3  $X          Start x coordinate  
4  $Y          Start y coordinate  
searchArea($$$$)
Return the pixels to search from around a given pixel.
   Parameter   Description                        
1  $i          Image                              
2  $partition  Partition                          
3  $x          X coordinate of center of search   
4  $y          Y coordinate of center of search.  
checkAtLevelOne($$$)
Confirm that the specified pixel is at level one.
   Parameter   Description  
1  $i          Image        
2  $partition  Partition    
3  $pixel      Pixel        
searchAreaHighest($$$$$$)
Return the highest pixels to search from around a given pixel.
   Parameter   Description                        
1  $i          Image                              
2  $partition  Partition                          
3  $seen       Pixels already visited             
4  $depth      Depth of search                    
5  $x          X coordinate of center of search   
6  $y          Y coordinate of center of search.  
shortestPathBetweenEndPoints($$$)
Find the shortest path between the start and the end points of a partition.
   Parameter   Description         
1  $I          Image               
2  $i          Image height clone  
3  $partition  Partition           
widthOfPath($$)
Find the (estimated) width of the path at each point.
   Parameter   Description  
1  $I          Image        
2  $partition  Partition    
widthOfPaths($)
Find the (estimated) width of each path at each point.
   Parameter  Description  
1  $i         Image        
printHeader($)
Print a header for the image so we can locate pixels by their coordinates.
   Parameter  Description  
1  $i         Image        
Index
2 clone
4 count
6 end
7 height
8 image
10 new
12 partition
13 partitionEnd
15 partitions
17 path
18 print
19 printHeader
20 searchArea
22 shortestPathBetweenEndPoints
23 start
25 widthOfPath
26 widthOfPaths
27 x
28 y
Installation
This module is written in 100% Pure Perl and, thus, it is easy to read, use, modify and install.
Standard Module::Build process for building and installing modules:
perl Build.PL
./Build
./Build test
./Build install
Author
Copyright
Copyright (c) 2016-2018 Philip R Brenan.
This module is free software. It may be used, redistributed and/or modified under the same terms as Perl itself.