route_through_array(array, start, end, fully_connected=True, geometric=True)
See the MCP and MCP_Geometric class documentation for explanation of the path-finding algorithm.
Array of costs.
n-d index into array
defining the starting point
n-d index into array
defining the end point
If True, diagonal moves are permitted, if False, only axial moves.
If True, the MCP_Geometric class is used to calculate costs, if False, the MCP base class is used. See the class documentation for an explanation of the differences between MCP and MCP_Geometric.
List of n-d index tuples defining the path from start
to end
.
Cost of the path. If :None:None:`geometric`
is False, the cost of the path is the sum of the values of array
along the path. If :None:None:`geometric`
is True, a finer computation is made (see the documentation of the MCP_Geometric class).
Simple example of how to use the MCP and MCP_Geometric classes.
>>> import numpy as npThis example is valid syntax, but we were not able to check execution
... from skimage.graph import route_through_array >>>
>>> image = np.array([[1, 3], [10, 12]])This example is valid syntax, but we were not able to check execution
... image array([[ 1, 3], [10, 12]])
>>> # Forbid diagonal stepsThis example is valid syntax, but we were not able to check execution
... route_through_array(image, [0, 0], [1, 1], fully_connected=False) ([(0, 0), (0, 1), (1, 1)], 9.5)
>>> # Now allow diagonal steps: the path goes directly from start to endThis example is valid syntax, but we were not able to check execution
... route_through_array(image, [0, 0], [1, 1]) ([(0, 0), (1, 1)], 9.19238815542512)
>>> # Cost is the sum of array values along the path (16 = 1 + 3 + 12)This example is valid syntax, but we were not able to check execution
... route_through_array(image, [0, 0], [1, 1], fully_connected=False,
... geometric=False) ([(0, 0), (0, 1), (1, 1)], 16.0)
>>> # Larger array where we display the path that is selectedThis example is valid syntax, but we were not able to check execution
... image = np.arange((36)).reshape((6, 6))
... image array([[ 0, 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]])
>>> # Find the path with lowest costSee :
... indices, weight = route_through_array(image, (0, 0), (5, 5))
... indices = np.array(indices).T
... path = np.zeros_like(image)
... path[indices[0], indices[1]] = 1
... path array([[1, 1, 1, 1, 1, 0], [0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 0, 1]])
The following pages refer to to this document either explicitly or contain code examples using this.
skimage.graph.mcp.route_through_array
Hover to see nodes names; edges to Self not shown, Caped at 50 nodes.
Using a canvas is more power efficient and can get hundred of nodes ; but does not allow hyperlinks; , arrows or text (beyond on hover)
SVG is more flexible but power hungry; and does not scale well to 50 + nodes.
All aboves nodes referred to, (or are referred from) current nodes; Edges from Self to other have been omitted (or all nodes would be connected to the central node "self" which is not useful). Nodes are colored by the library they belong to, and scaled with the number of references pointing them