0
0
Computer Visionml~20 mins

Color space conversion in Computer Vision - ML Experiment: Train & Evaluate

Choose your learning style9 modes available
Experiment - Color space conversion
Problem:You want to convert images from RGB color space to grayscale and HSV color space to prepare data for a computer vision model.
Current Metrics:N/A - currently only RGB images are used without color space conversion.
Issue:Using only RGB images may limit the model's ability to learn color and brightness features effectively.
Your Task
Implement color space conversion to grayscale and HSV for input images and compare model training accuracy using these different color spaces.
Use OpenCV or similar library for color conversion.
Keep the model architecture the same for fair comparison.
Use the same dataset split for training and validation.
Hint 1
Hint 2
Hint 3
Solution
Computer Vision
import cv2
import numpy as np
from sklearn.model_selection import train_test_split
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
from tensorflow.keras.utils import to_categorical

# Dummy dataset creation: 100 images of 64x64 with 3 channels (RGB)
np.random.seed(42)
X_rgb = np.random.randint(0, 256, (100, 64, 64, 3), dtype=np.uint8)
y = np.random.randint(0, 2, 100)  # Binary classification

def convert_to_grayscale(images):
    return np.array([cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) for img in images])

def convert_to_hsv(images):
    return np.array([cv2.cvtColor(img, cv2.COLOR_RGB2HSV) for img in images])

# Convert images
X_gray = convert_to_grayscale(X_rgb)
X_hsv = convert_to_hsv(X_rgb)

# Reshape grayscale to add channel dimension
X_gray = X_gray.reshape(-1, 64, 64, 1)

# Normalize all images
X_rgb = X_rgb / 255.0
X_gray = X_gray / 255.0
X_hsv = X_hsv / 255.0

# Prepare labels
y_cat = to_categorical(y, 2)

# Split data
X_train_rgb, X_val_rgb, y_train, y_val = train_test_split(X_rgb, y_cat, test_size=0.2, random_state=42)
X_train_gray, X_val_gray, _, _ = train_test_split(X_gray, y_cat, test_size=0.2, random_state=42)
X_train_hsv, X_val_hsv, _, _ = train_test_split(X_hsv, y_cat, test_size=0.2, random_state=42)

# Define simple CNN model
def create_model(input_shape):
    model = Sequential([
        Conv2D(16, (3,3), activation='relu', input_shape=input_shape),
        MaxPooling2D((2,2)),
        Flatten(),
        Dense(32, activation='relu'),
        Dense(2, activation='softmax')
    ])
    model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
    return model

# Train and evaluate on RGB
model_rgb = create_model((64,64,3))
history_rgb = model_rgb.fit(X_train_rgb, y_train, epochs=5, batch_size=16, validation_data=(X_val_rgb, y_val), verbose=0)

# Train and evaluate on Grayscale
model_gray = create_model((64,64,1))
history_gray = model_gray.fit(X_train_gray, y_train, epochs=5, batch_size=16, validation_data=(X_val_gray, y_val), verbose=0)

# Train and evaluate on HSV
model_hsv = create_model((64,64,3))
history_hsv = model_hsv.fit(X_train_hsv, y_train, epochs=5, batch_size=16, validation_data=(X_val_hsv, y_val), verbose=0)

# Collect final validation accuracies
val_acc_rgb = history_rgb.history['val_accuracy'][-1] * 100
val_acc_gray = history_gray.history['val_accuracy'][-1] * 100
val_acc_hsv = history_hsv.history['val_accuracy'][-1] * 100

print(f"Validation Accuracy RGB: {val_acc_rgb:.2f}%")
print(f"Validation Accuracy Grayscale: {val_acc_gray:.2f}%")
print(f"Validation Accuracy HSV: {val_acc_hsv:.2f}%")
Added functions to convert RGB images to grayscale and HSV color spaces using OpenCV.
Normalized images after conversion for model input.
Trained the same CNN model architecture separately on RGB, grayscale, and HSV images.
Compared validation accuracy to evaluate which color space helps the model learn better.
Results Interpretation

Before: Model trained only on RGB images without color space conversion.

After: Model trained separately on RGB, grayscale, and HSV images with color space conversion.

  • Validation accuracy is similar across color spaces on random data but in real datasets, color space choice can impact performance.
  • Grayscale reduces input size and focuses on brightness.
  • HSV separates color and brightness, which can help models learn color features better.
Color space conversion is a useful preprocessing step in computer vision. It can help models learn different aspects of images like brightness or color separately, potentially improving performance depending on the task.
Bonus Experiment
Try converting images to the LAB color space and train the model to see if it improves validation accuracy compared to RGB, grayscale, and HSV.
💡 Hint
LAB color space separates lightness from color channels and is designed to be perceptually uniform, which might help the model learn better color features.