Watershed segmentationΒΆ
This example demonstrates how to perform watershed segmentation.
In pi2, you will have to first generate seeds image that contains colored regions that will be grown in the watershed process. The filling priority of pixels must also be calculated somehow, usually this is the gradient of the input image, but in this example we use the input image itself.
def watershed():
"""
Demonstrates Meyer's flooding algorithm for calculation of watershed.
"""
# Read image
weights = pi.read(input_file('t1-head.tif'))
# Create new image, taking unspecified properties from the old image
labels = pi.newlike(weights, 'uint8')
# Set some seeds
pi.set(labels, [110, 90, 63], 100) # Brain
pi.set(labels, [182, 165, 63], 200) # Skull
# Save seeds so that they can be viewed later
pi.writetif(labels, output_file('meyer_grow_seeds'))
# Grow the seeds. (Normally you would use gradient of input image etc. as weight)
pi.grow(labels, weights)
# Save result
pi.writetif(labels, output_file('meyer_grow'))