Color space conversion in MATLAB - Time & Space Complexity
When converting colors from one space to another, the time taken depends on how many pixels we process.
We want to know how the work grows as the image size grows.
Analyze the time complexity of the following code snippet.
function rgbImage = ycbcr2rgb(ycbcrImage)
[rows, cols, ~] = size(ycbcrImage);
rgbImage = zeros(rows, cols, 3, 'uint8');
for r = 1:rows
for c = 1:cols
Y = double(ycbcrImage(r,c,1));
Cb = double(ycbcrImage(r,c,2)) - 128;
Cr = double(ycbcrImage(r,c,3)) - 128;
R = Y + 1.402 * Cr;
G = Y - 0.344136 * Cb - 0.714136 * Cr;
B = Y + 1.772 * Cb;
rgbImage(r,c,1) = uint8(min(max(R,0),255));
rgbImage(r,c,2) = uint8(min(max(G,0),255));
rgbImage(r,c,3) = uint8(min(max(B,0),255));
end
end
end
This code converts an image from YCbCr color space to RGB by processing each pixel one by one.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Nested loops over all pixels in the image.
- How many times: The inner code runs once for each pixel, so rows x columns 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 | About 100 times the pixel work |
| 100 x 100 = 10,000 | About 10,000 times the pixel work |
| 1000 x 1000 = 1,000,000 | About 1,000,000 times the pixel work |
Pattern observation: The work grows directly with the number of pixels, so doubling width and height quadruples the work.
Time Complexity: O(n)
This means the time grows in a straight line with the number of pixels in the image.
[X] Wrong: "The time depends only on image width or height, not both."
[OK] Correct: The code processes every pixel, so both width and height matter together, multiplying the total work.
Understanding how image size affects processing time helps you explain performance in real projects involving pictures or videos.
"What if we vectorized the code to process all pixels at once? How would the time complexity change?"
Practice
rgb2gray do?Solution
Step 1: Understand the function name
The function namergb2graysuggests conversion from RGB to gray scale.Step 2: Recall MATLAB image processing basics
In MATLAB,rgb2grayconverts a color image (RGB) to a grayscale image by removing color information.Final Answer:
Converts a color image from RGB to grayscale -> Option DQuick Check:
rgb2gray = RGB to grayscale [OK]
- Confusing rgb2gray with gray2rgb
- Thinking it converts HSV images
- Assuming it changes image size
img to HSV in MATLAB?Solution
Step 1: Identify the function for RGB to HSV conversion
MATLAB usesrgb2hsvto convert RGB images to HSV color space.Step 2: Check the syntax correctness
The syntaxhsvImage = rgb2hsv(img);correctly calls the function with the image variable.Final Answer:
hsvImage = rgb2hsv(img); -> Option AQuick Check:
rgb2hsv syntax = correct [OK]
- Using hsv2rgb instead of rgb2hsv
- Using rgb2gray for color conversion
- Using non-existent gray2hsv function
grayImage after running this code?rgbImage = imread('peppers.png');
grayImage = rgb2gray(rgbImage);Solution
Step 1: Understand input image dimensions
RGB images have height x width x 3 channels (for red, green, blue).Step 2: Effect of rgb2gray on image size
rgb2gray converts to grayscale, keeping height and width but reducing channels to 1.Final Answer:
Same height and width as rgbImage but single channel -> Option BQuick Check:
rgb2gray output = height x width x 1 [OK]
- Assuming rgb2gray changes image dimensions
- Thinking output has 3 channels
- Confusing with resizing functions
img = imread('image.jpg');
grayImg = rgb2gray(img, 'double');Solution
Step 1: Check rgb2gray function usage
rgb2gray only takes one input argument: the RGB image.Step 2: Analyze the second argument 'double'
Passing 'double' as a second argument causes an error because rgb2gray does not support it.Final Answer:
rgb2gray does not accept a second argument like 'double' -> Option CQuick Check:
rgb2gray single input only [OK]
- Adding unsupported extra arguments
- Assuming imread fails without reason
- Thinking semicolon is mandatory for correctness
Solution
Step 1: Convert RGB to HSV correctly
Usergb2hsvto convert the RGB image to HSV color space.Step 2: Extract the Hue channel
In HSV, the first channel (:,:,1) is the Hue component.Final Answer:
hsvImage = rgb2hsv(rgbImage); hueChannel = hsvImage(:,:,1); -> Option AQuick Check:
Hue channel is first in HSV [OK]
- Using rgb2gray instead of rgb2hsv
- Extracting wrong channel index
- Using hsv2rgb instead of rgb2hsv
Ready to prove it?
Pass the test and this pattern moves unknown
