Bird
Raised Fist0
SciPydata~5 mins

Median and uniform filters in SciPy

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
Introduction

Median and uniform filters help clean noisy data by smoothing values. They make data easier to understand and analyze.

Removing salt-and-pepper noise from images or signals
Smoothing sensor data to reduce random fluctuations
Preparing data for better pattern detection
Reducing noise in time series data before forecasting
Syntax
SciPy
from scipy.ndimage import median_filter, uniform_filter

median_filter(input_array, size)
uniform_filter(input_array, size)

input_array is your data, like a list or array of numbers.

size controls how many neighbors to include when filtering.

Examples
Applies median filter with window size 3 to smooth out the large spike (80).
SciPy
median_filter([1, 2, 80, 4, 5], size=3)
Applies uniform filter averaging neighbors to smooth data.
SciPy
uniform_filter([1, 2, 80, 4, 5], size=3)
Median filter on 2D data with window size 2.
SciPy
median_filter([[10, 200], [30, 40]], size=2)
Sample Program

This code shows how median and uniform filters smooth noisy 1D data. The median filter removes spikes by picking the middle value in each window. The uniform filter averages neighbors to smooth values.

SciPy
import numpy as np
from scipy.ndimage import median_filter, uniform_filter

# Create noisy data
data = np.array([1, 2, 80, 4, 5, 100, 6, 7, 8])

# Apply median filter with window size 3
median_result = median_filter(data, size=3)

# Apply uniform filter with window size 3
uniform_result = uniform_filter(data, size=3)

print("Original data:", data)
print("Median filter result:", median_result)
print("Uniform filter result:", uniform_result)
OutputSuccess
Important Notes

The median filter is good at removing sudden spikes without blurring edges too much.

The uniform filter smooths by averaging, which can blur sharp changes.

Choose the filter and window size based on your data and noise type.

Summary

Median and uniform filters help reduce noise in data.

Median filter picks the middle value in a window to remove spikes.

Uniform filter averages values in a window to smooth data.

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