Bird
Raised Fist0
SciPydata~20 mins

Connected component labeling in SciPy - Practice Problems & Coding Challenges

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Challenge - 5 Problems
🎖️
Connected Components Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
Output of connected components labeling on a binary image
What is the output of the following code that labels connected components in a binary image using scipy.ndimage.label?
SciPy
import numpy as np
from scipy.ndimage import label

binary_image = np.array([
    [1, 0, 0, 1],
    [1, 1, 0, 0],
    [0, 0, 1, 1],
    [0, 0, 1, 0]
])

labeled_array, num_features = label(binary_image)
print((labeled_array, num_features))
A(array([[1, 0, 0, 1], [1, 1, 0, 0], [0, 0, 2, 2], [0, 0, 2, 0]]), 2)
B(array([[1, 0, 0, 2], [1, 1, 0, 0], [0, 0, 3, 3], [0, 0, 3, 0]]), 3)
C(array([[1, 0, 0, 2], [1, 1, 0, 0], [0, 0, 2, 2], [0, 0, 2, 0]]), 2)
D(array([[1, 0, 0, 2], [1, 1, 0, 0], [0, 0, 3, 3], [0, 0, 4, 0]]), 4)
Attempts:
2 left
💡 Hint
Look at how connected pixels with value 1 are grouped. Each group gets a unique label starting from 1.
data_output
intermediate
1:30remaining
Number of connected components in a 3D array
Given the following 3D binary array, how many connected components does scipy.ndimage.label find?
SciPy
import numpy as np
from scipy.ndimage import label

array_3d = np.zeros((3, 3, 3), dtype=int)
array_3d[0, 0, 0] = 1
array_3d[0, 0, 1] = 1
array_3d[2, 2, 2] = 1

labeled, num = label(array_3d)
print(num)
A2
B1
C3
D0
Attempts:
2 left
💡 Hint
Check if the two 1s at positions (0,0,0) and (0,0,1) are connected.
visualization
advanced
2:30remaining
Visualizing labeled connected components
Which option shows the correct matplotlib code to visualize the labeled connected components of a 2D binary image with distinct colors for each component?
SciPy
import numpy as np
from scipy.ndimage import label
import matplotlib.pyplot as plt

binary_image = np.array([
    [1, 0, 1, 1],
    [1, 1, 0, 0],
    [0, 0, 1, 1],
    [0, 0, 1, 0]
])
labeled_array, num_features = label(binary_image)

# Which code below correctly plots labeled_array with distinct colors?
A
plt.imshow(binary_image, cmap='nipy_spectral')
plt.colorbar()
plt.show()
B
plt.imshow(labeled_array, cmap='gray')
plt.colorbar()
plt.show()
C
plt.imshow(labeled_array, cmap='nipy_spectral')
plt.colorbar()
plt.show()
D
plt.imshow(binary_image, cmap='gray')
plt.colorbar()
plt.show()
Attempts:
2 left
💡 Hint
Use the labeled array and a color map that shows distinct colors for different labels.
🔧 Debug
advanced
1:30remaining
Identify the error in connected components labeling code
What error will the following code raise when trying to label connected components?
SciPy
import numpy as np
from scipy.ndimage import label

image = np.array([[1, 2], [3, 4]])
labeled, num = label(image)
print(num)
ARuntimeWarning: Non-binary values ignored
BValueError: The input array must be 2D
CNo error, output is (array([[1, 0], [0, 0]]), 1)
DTypeError: Input array must be binary or boolean
Attempts:
2 left
💡 Hint
Check the input array values. Are they binary (0 or 1)?
🚀 Application
expert
2:30remaining
Counting connected components with custom connectivity
Using scipy.ndimage.label, how many connected components are found in the following binary image if connectivity=1 (only direct neighbors up, down, left, right) is used?
SciPy
import numpy as np
from scipy.ndimage import label

binary_image = np.array([
    [1, 0, 1, 1],
    [1, 1, 0, 0],
    [0, 0, 1, 1],
    [0, 0, 1, 0]
])

structure = np.array([
    [0,1,0],
    [1,1,1],
    [0,1,0]
])

labeled_array, num_features = label(binary_image, structure=structure)
print(num_features)
A1
B2
C4
D3
Attempts:
2 left
💡 Hint
Connectivity=1 means only vertical and horizontal neighbors are connected, not diagonals.

Practice

(1/5)
1. What is the main purpose of connected component labeling in image processing?
easy
A. To enhance image contrast
B. To convert color images to grayscale
C. To identify and label groups of connected pixels in binary images
D. To compress image file size

Solution

  1. Step 1: Understand connected component labeling

    It finds groups of connected pixels in binary images and assigns unique labels to each group.
  2. Step 2: Compare with other image tasks

    Other options like grayscale conversion, contrast enhancement, and compression do not involve labeling connected pixels.
  3. Final Answer:

    To identify and label groups of connected pixels in binary images -> Option C
  4. Quick Check:

    Connected component labeling = identify connected pixel groups [OK]
Hint: Remember: labeling means assigning unique IDs to connected pixels [OK]
Common Mistakes:
  • Confusing labeling with color conversion
  • Thinking it compresses images
  • Mixing it up with image enhancement
2. Which of the following is the correct way to import the connected component labeling function from scipy.ndimage?
easy
A. import scipy.ndimage.label
B. from scipy.ndimage import label
C. from scipy import label
D. import label from scipy.ndimage

Solution

  1. Step 1: Recall correct import syntax in Python

    The correct syntax to import a function is 'from module import function'.
  2. Step 2: Match with scipy.ndimage.label

    The function 'label' is inside 'scipy.ndimage', so 'from scipy.ndimage import label' is correct.
  3. Final Answer:

    from scipy.ndimage import label -> Option B
  4. Quick Check:

    Correct import syntax = from module import function [OK]
Hint: Use 'from module import function' to import specific functions [OK]
Common Mistakes:
  • Using 'import scipy.ndimage.label' which is invalid
  • Trying 'from scipy import label' which misses submodule
  • Incorrect 'import label from scipy.ndimage' syntax
3. Given the following code, what will be the output of num_features?
import numpy as np
from scipy.ndimage import label

array = np.array([[1, 0, 0, 1],
                  [1, 1, 0, 0],
                  [0, 0, 1, 1],
                  [0, 0, 1, 0]])

labeled_array, num_features = label(array)
print(num_features)
medium
A. 1
B. 3
C. 4
D. 2

Solution

  1. Step 1: Identify connected groups in the array

    There are two groups of connected 1s: one cluster at top-left (positions (0,0),(1,0),(1,1)) and one cluster at bottom-right (positions (0,3),(2,2),(2,3),(3,2)).
  2. Step 2: Count the connected components

    Counting these groups gives 2 connected components.
  3. Final Answer:

    2 -> Option D
  4. Quick Check:

    Count connected 1s groups = 2 [OK]
Hint: Count distinct connected 1s clusters in the array [OK]
Common Mistakes:
  • Counting isolated 1s as separate components incorrectly
  • Ignoring connectivity rules
  • Misreading array layout
4. What is wrong with the following code snippet for connected component labeling?
import numpy as np
from scipy.ndimage import label

binary_image = np.array([[1, 1, 0],
                         [0, 1, 0],
                         [1, 0, 1]])

labeled, num = label(binary_image, structure=1)
print(num)
medium
A. The 'structure' parameter should be an array, not an integer
B. The input array must be float type, not integer
C. The 'label' function does not accept a 'structure' parameter
D. The print statement syntax is incorrect

Solution

  1. Step 1: Check 'structure' parameter type

    The 'structure' parameter expects an array defining connectivity, not a single integer.
  2. Step 2: Identify correct usage

    Passing 'structure=1' is invalid; it should be an array like np.ones((3,3)) for full connectivity.
  3. Final Answer:

    The 'structure' parameter should be an array, not an integer -> Option A
  4. Quick Check:

    'structure' must be array, not int [OK]
Hint: Remember: 'structure' needs an array defining connectivity [OK]
Common Mistakes:
  • Passing integer instead of array for 'structure'
  • Assuming 'label' lacks 'structure' parameter
  • Confusing data types of input array
5. You have a binary image with noise: small isolated pixels scattered randomly. How can you use connected component labeling with scipy to remove noise by keeping only components larger than 2 pixels?
hard
A. Label components, count sizes, then remove components with size ≤ 2
B. Apply Gaussian blur before labeling to remove noise
C. Use label function with parameter 'min_size=3' to filter components
D. Invert the image and label the background instead

Solution

  1. Step 1: Label connected components in the binary image

    Use scipy.ndimage.label to assign unique labels to each connected group of pixels.
  2. Step 2: Count the size of each labeled component and filter

    Calculate the size of each component and remove those with size less than or equal to 2 pixels to eliminate noise.
  3. Final Answer:

    Label components, count sizes, then remove components with size ≤ 2 -> Option A
  4. Quick Check:

    Filter small components after labeling to remove noise [OK]
Hint: Label, count sizes, remove small components to clean noise [OK]
Common Mistakes:
  • Expecting label() to filter by size automatically
  • Using image blur instead of component filtering
  • Inverting image does not remove noise directly