Image filtering in MATLAB - Time & Space Complexity
When we apply a filter to an image, the computer processes each pixel to create a new image.
We want to know how the time needed grows as the image size gets bigger.
Analyze the time complexity of the following code snippet.
% Assume img is a grayscale image matrix
filtered_img = zeros(size(img));
filter = [1 1 1; 1 1 1; 1 1 1] / 9; % simple averaging filter
for i = 2:size(img,1)-1
for j = 2:size(img,2)-1
region = img(i-1:i+1, j-1:j+1);
filtered_img(i,j) = sum(region .* filter, 'all');
end
end
This code applies a 3x3 averaging filter to each pixel of the image, skipping the edges.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Nested loops over image rows and columns applying the filter.
- How many times: The outer loop runs about the number of rows (n), and the inner loop runs about the number of columns (m), so roughly n x m times.
As the image gets bigger, the number of pixels grows, so the work grows too.
| Input Size (pixels) | Approx. Operations |
|---|---|
| 10 x 10 | ~100 |
| 100 x 100 | ~10,000 |
| 1000 x 1000 | ~1,000,000 |
Pattern observation: Doubling the image width and height roughly quadruples the work because we process every pixel.
Time Complexity: O(n x m)
This means the time grows directly with the number of pixels in the image.
[X] Wrong: "The filter size affects the time complexity a lot, so bigger filters make the time grow faster than the image size."
[OK] Correct: The filter size is fixed and small (like 3x3), so it only adds a constant amount of work per pixel, not changing the overall growth with image size.
Understanding how image filtering scales helps you explain performance in real projects where images can be large and processing time matters.
"What if we used a filter that changes size depending on the image dimensions? How would the time complexity change?"
Practice
Solution
Step 1: Understand what a kernel does
A kernel is a small matrix used to process an image by changing pixel values based on neighbors.Step 2: Identify the effect of filtering
Filtering modifies the image to highlight edges, blur, or sharpen features, not file format or size.Final Answer:
To modify the image by emphasizing or reducing certain features -> Option BQuick Check:
Image filtering changes features = D [OK]
- Confusing filtering with file format conversion
- Thinking filtering changes image size
- Assuming filtering only converts to grayscale
h to an image img using MATLAB's imfilter function?Solution
Step 1: Recall MATLAB's imfilter syntax
The correct syntax is imfilter(image, kernel), where the image is first and kernel second.Step 2: Check each option
filtered_img = imfilter(img, h); matches the correct syntax. Options B and D use 'filter' which is incorrect. filtered_img = imfilter(h, img); reverses arguments.Final Answer:
filtered_img = imfilter(img, h); -> Option DQuick Check:
imfilter(image, kernel) = A [OK]
- Using 'filter' instead of 'imfilter'
- Swapping image and kernel arguments
- Missing semicolon or parentheses
img = [1 2 3; 4 5 6; 7 8 9]; h = [1 0 -1; 1 0 -1; 1 0 -1]; result = imfilter(img, h, 'replicate');
What is the value of
result(2,2)?Solution
Step 1: Understand the filter and padding
The kernel h detects vertical edges. 'replicate' pads edges by repeating border values.Step 2: Calculate convolution at (2,2)
Neighborhood of (2,2):
1 2 3
4 5 6
7 8 9
Apply kernel:
(1*1)+(0*2)+(-1*3)+(1*4)+(0*5)+(-1*6)+(1*7)+(0*8)+(-1*9) = 1+0-3+4+0-6+7+0-9 = (1-3)+(4-6)+(7-9) = -2 -2 -2 = -6
But imfilter flips kernel, so actual sum is 6.Final Answer:
6 -> Option CQuick Check:
imfilter result center = 6 [OK]
- Not flipping the kernel before convolution
- Ignoring padding method 'replicate'
- Calculating sum incorrectly
img = imread('peppers.png');
h = fspecial('average', 3);
filtered_img = imfilter(img, h, 'same');What is the error in this code?
Solution
Step 1: Check fspecial usage
fspecial('average', 3) creates a 3x3 averaging filter, which is valid.Step 2: Check imfilter usage
imfilter supports RGB images and 'same' option returns output same size as input.Final Answer:
No error; the code runs correctly -> Option AQuick Check:
fspecial + imfilter with 'same' = A [OK]
- Assuming imfilter only works on grayscale
- Thinking 'same' is invalid option
- Believing kernel size must be odd but 3 is odd and valid
img in MATLAB by combining the original image with a filtered version using the Laplacian kernel h = fspecial('laplacian', 0.2);. Which code snippet correctly applies this sharpening?Solution
Step 1: Understand Laplacian sharpening
Sharpening = original image minus the Laplacian filtered image to enhance edges.Step 2: Match code to formula
sharpened = img - imfilter(img, h, 'replicate'); subtracts the filtered image from original, correctly applying sharpening.Final Answer:
sharpened = img - imfilter(img, h, 'replicate'); -> Option AQuick Check:
Sharpen = img - Laplacian filtered img = B [OK]
- Adding instead of subtracting Laplacian result
- Multiplying original image incorrectly
- Confusing Laplacian with averaging filter
Ready to prove it?
Pass the test and this pattern moves unknown
