Bird
Raised Fist0
SciPydata~20 mins

Median and uniform filters 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
🎖️
Median and Uniform Filters Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
Output of median filter on 1D array
What is the output of the following code applying a median filter with size 3 on a 1D array?
SciPy
import numpy as np
from scipy.ndimage import median_filter

arr = np.array([1, 2, 80, 4, 5, 6, 7])
filtered = median_filter(arr, size=3)
print(filtered.tolist())
A[2, 2, 4, 5, 6, 6, 7]
B[1, 2, 80, 4, 5, 6, 7]
C[1, 2, 4, 4, 5, 6, 7]
D[1, 2, 4, 5, 5, 6, 7]
Attempts:
2 left
💡 Hint
Median filter replaces each element with the median of neighbors within the window size.
data_output
intermediate
2:00remaining
Result of uniform filter on 2D array
What is the resulting 2D array after applying a uniform filter with size 3 on this 3x3 array?
SciPy
import numpy as np
from scipy.ndimage import uniform_filter

arr = np.array([[1, 2, 3],
                [4, 5, 6],
                [7, 8, 9]])
filtered = uniform_filter(arr, size=3, mode='constant', cval=0)
print(filtered)
A
[[1.55555556 2.33333333 1.88888889]
 [3.66666667 5.         4.11111111]
 [3.11111111 4.66666667 3.55555556]]
B
[[1.33333333 2.         1.66666667]
 [3.         5.         3.        ]
 [2.66666667 4.         2.66666667]]
C
[[1. 2. 3.]
 [4. 5. 6.]
 [7. 8. 9.]]
D
[[0.66666667 1.33333333 1.        ]
 [2.33333333 4.         3.        ]
 [2.         3.33333333 2.33333333]]
Attempts:
2 left
💡 Hint
Uniform filter computes the average over the window including zero padding outside edges.
visualization
advanced
3:00remaining
Visual effect of median vs uniform filter on noisy image
Which option best describes the visual difference after applying median and uniform filters on a noisy grayscale image?
SciPy
import numpy as np
import matplotlib.pyplot as plt
from scipy.ndimage import median_filter, uniform_filter

np.random.seed(0)
image = np.ones((10,10)) * 100
noise = np.random.randint(0, 50, (10,10))
noisy_image = image + noise
median_img = median_filter(noisy_image, size=3)
uniform_img = uniform_filter(noisy_image, size=3)

plt.subplot(1,3,1)
plt.title('Noisy')
plt.imshow(noisy_image, cmap='gray')
plt.subplot(1,3,2)
plt.title('Median Filter')
plt.imshow(median_img, cmap='gray')
plt.subplot(1,3,3)
plt.title('Uniform Filter')
plt.imshow(uniform_img, cmap='gray')
plt.show()
AMedian filter increases noise; uniform filter sharpens edges.
BMedian filter removes noise while preserving edges; uniform filter blurs edges and smooths noise.
CBoth filters produce identical smoothing and edge preservation.
DUniform filter removes noise while preserving edges; median filter blurs edges and smooths noise.
Attempts:
2 left
💡 Hint
Median filter is good for salt-and-pepper noise; uniform filter averages values.
🧠 Conceptual
advanced
2:00remaining
Effect of filter size on median and uniform filters
How does increasing the filter size affect the output of median and uniform filters on a noisy signal?
AIncreasing size increases smoothing for both filters; median filter preserves edges better but may remove small details.
BIncreasing size decreases smoothing for both filters; median filter blurs edges more than uniform filter.
CIncreasing size has no effect on median filter; uniform filter smoothing decreases.
DIncreasing size causes median filter to amplify noise; uniform filter preserves edges perfectly.
Attempts:
2 left
💡 Hint
Think about how larger windows affect averaging and median calculations.
🔧 Debug
expert
2:00remaining
Identify the error in applying median filter on a 3D array
What error will this code raise when applying median_filter with size=3 on a 3D array without specifying axis?
SciPy
import numpy as np
from scipy.ndimage import median_filter

arr = np.random.randint(0, 10, (4,4,4))
filtered = median_filter(arr, size=3)
print(filtered.shape)
AValueError: size must be less than or equal to input size along each axis
BTypeError: size must be a sequence of integers
CNo error; output shape is (4,4,4)
DNo error; output shape is (2,2,2)
Attempts:
2 left
💡 Hint
Check how median_filter handles size parameter for multi-dimensional arrays.

Practice

(1/5)
1. What is the main purpose of applying a median filter to a dataset?
easy
A. To find the maximum value in the dataset
B. To calculate the average of all values in the dataset
C. To remove noise by replacing each value with the middle value in its neighborhood
D. To sort the dataset in ascending order

Solution

  1. Step 1: Understand median filter function

    A median filter replaces each data point with the median (middle) value of its neighbors, reducing spikes and noise.
  2. Step 2: Compare options with median filter purpose

    Only To remove noise by replacing each value with the middle value in its neighborhood describes replacing values with the middle value in a neighborhood, which matches the median filter's role.
  3. Final Answer:

    To remove noise by replacing each value with the middle value in its neighborhood -> Option C
  4. Quick Check:

    Median filter = middle value replacement [OK]
Hint: Median filter picks middle value to reduce spikes [OK]
Common Mistakes:
  • Confusing median filter with averaging
  • Thinking median filter sorts entire dataset
  • Assuming median filter finds max or min values
2. Which of the following is the correct way to import the median filter function from scipy?
easy
A. from scipy.ndimage import median_filter
B. import scipy.median_filter
C. from scipy import median_filter
D. import median_filter from scipy

Solution

  1. Step 1: Recall scipy median filter import syntax

    The median_filter function is in scipy.ndimage module, so it is imported as from scipy.ndimage import median_filter.
  2. Step 2: Check each option's correctness

    from scipy.ndimage import median_filter matches the correct syntax. The other options are invalid Python import statements.
  3. Final Answer:

    from scipy.ndimage import median_filter -> Option A
  4. Quick Check:

    Correct import = from scipy.ndimage import median_filter [OK]
Hint: Import median_filter from scipy.ndimage module [OK]
Common Mistakes:
  • Trying to import median_filter directly from scipy
  • Using invalid import syntax
  • Confusing module names
3. What is the output of this code snippet?
import numpy as np
from scipy.ndimage import uniform_filter

arr = np.array([1, 2, 3, 4, 5])
result = uniform_filter(arr, size=3)
print(result)
medium
A. [1 2 3 4 5]
B. [1.66666667 2. 3. 4. 4.33333333]
C. [1 2 3 3 3 3]
D. [1 2 2 3 4]

Solution

  1. Step 1: Understand uniform_filter with size=3

    The uniform_filter computes the average over a sliding window of size 3. For edges, it uses 'reflect' mode by default.
  2. Step 2: Calculate each element in result

    Using reflect padding:
    - index 0: [2, 1, 2] avg = 1.66666667
    - index 1: [1, 2, 3] avg = 2.0
    - index 2: [2, 3, 4] avg = 3.0
    - index 3: [3, 4, 5] avg = 4.0
    - index 4: [4, 5, 4] avg = 4.33333333
    print(result) shows [1.66666667 2. 3. 4. 4.33333333]
  3. Final Answer:

    [1.66666667 2. 3. 4. 4.33333333] -> Option B
  4. Quick Check:

    Uniform filter smooths values with reflect padding [OK]
Hint: Uniform filter averages neighbors in window size [OK]
Common Mistakes:
  • Confusing median_filter output with uniform_filter
  • Ignoring edge effects in uniform_filter
  • Expecting original array unchanged
4. Identify the error in this code that applies a median filter:
import numpy as np
from scipy.ndimage import median_filter

arr = np.array([1, 2, 100, 4, 5])
filtered = median_filter(arr, size=0)
print(filtered)
medium
A. missing import for numpy
B. median_filter requires 2D arrays only
C. numpy array must be float type
D. size parameter cannot be zero

Solution

  1. Step 1: Check median_filter size parameter

    The size parameter defines the window size and must be a positive integer. Zero is invalid and causes an error.
  2. Step 2: Verify other code parts

    Array is 1D which is allowed. numpy is imported. Data type can be int. So only size=0 is wrong.
  3. Final Answer:

    size parameter cannot be zero -> Option D
  4. Quick Check:

    Window size > 0 for median_filter [OK]
Hint: Window size must be positive integer [OK]
Common Mistakes:
  • Using zero or negative size values
  • Assuming median_filter only works on 2D arrays
  • Forgetting to import numpy
5. You have a noisy 2D image array with salt-and-pepper noise. Which filter and parameters would best reduce noise while preserving edges?
import numpy as np
from scipy.ndimage import median_filter, uniform_filter

image = np.array([[10, 10, 10, 10],
                  [10, 255, 10, 10],
                  [10, 10, 10, 10],
                  [10, 10, 10, 10]])
hard
A. Use median_filter with size=3 to remove salt-and-pepper noise
B. Use uniform_filter with size=3 to blur the image
C. Use median_filter with size=1 to keep image unchanged
D. Use uniform_filter with size=1 to sharpen edges

Solution

  1. Step 1: Understand noise type and filter effects

    Salt-and-pepper noise is best removed by median filters because they replace each pixel with the median of neighbors, preserving edges.
  2. Step 2: Evaluate filter choices and parameters

    Median_filter with size=3 covers neighbors and removes noise spikes. Uniform_filter averages and blurs edges, not ideal here. Size=1 means no change.
  3. Final Answer:

    Use median_filter with size=3 to remove salt-and-pepper noise -> Option A
  4. Quick Check:

    Median filter + size=3 removes salt-and-pepper noise [OK]
Hint: Median filter removes salt-and-pepper noise best [OK]
Common Mistakes:
  • Using uniform filter which blurs edges
  • Using size=1 which does nothing
  • Confusing noise types and filter effects