Əsas məzmuna keçin

Color Spaces

Color Space Nədir?

Color space (rəng fəzası) rəngi rəqəmsal olaraq təmsil etmək üçün istifadə olunan koordinat sistemidir. Hər color space rəngi fərqli komponetlərlə (məsələn, RGB, HSV) təsvir edir.

Əsas məqsədlər:

  • Display - Ekranda göstərmək (RGB)
  • Human perception - İnsan görmə sisteminə uyğun (HSV, LAB)
  • Compression - Effektiv sıxma (YCbCr)
  • Processing - Spesifik əməliyyatlar üçün optimal

RGB Color Space

RGB ən geniş istifadə olunan additive color model-dir - Red, Green, Blue.

RGB Strukturu

Xüsusiyyətlər:

  • 3 kanal: R, G, B
  • Hər kanal 8 bit (0-255) və ya normalized (0.0-1.0)
  • 24-bit color: 16.7 milyon rəng (256³)
  • Additive: Işıqlar toplanır

Color örnəkləri:

Black:   (0, 0, 0)
White: (255, 255, 255)
Red: (255, 0, 0)
Green: (0, 255, 0)
Blue: (0, 0, 255)
Yellow: (255, 255, 0) = Red + Green
Cyan: (0, 255, 255) = Green + Blue
Magenta: (255, 0, 255) = Red + Blue

RGB Cube

Üstünlükləri:

  • Simple və intuitive
  • Hardware support (display, camera)
  • Direct pixel representation

Çatışmazlıqları:

  • Human perception-a uyğun deyil
  • Color manipulation çətin
  • Brightness və color coupled

HSV Color Space

HSV (Hue, Saturation, Value) insan rəng qavrayışına daha yaxın modeldir.

HSV Komponetləri

Hue (Rəng tonu):

  • 0°-360° bucaq
  • 0° = Red, 120° = Green, 240° = Blue
  • Circular: 360° = 0° (Red-ə qayıdır)

Saturation (Doyğunluq):

  • 0-100% (və ya 0-255)
  • 100%: Pure, vivid color
  • 0%: Gray (desaturated)

Value (Parlaqlıq):

  • 0-100% (və ya 0-255)
  • 100%: Brightest
  • 0%: Black

HSV Cylinder

RGB ↔ HSV Conversion

RGB → HSV:

V = max(R, G, B)

if V = 0:
S = 0
else:
S = (V - min(R,G,B)) / V

if V = min(R,G,B):
H = undefined (gray)
else if V = R:
H = 60° × (G - B) / (V - min)
else if V = G:
H = 60° × (2 + (B - R) / (V - min))
else if V = B:
H = 60° × (4 + (R - G) / (V - min))

if H < 0: H += 360°

HSV → RGB:

C = V × S
X = C × (1 - |((H/60°) mod 2) - 1|)
m = V - C

(R', G', B') depends on H:
0° ≤ H < 60°: (C, X, 0)
60° ≤ H < 120°: (X, C, 0)
120° ≤ H < 180°: (0, C, X)
180° ≤ H < 240°: (0, X, C)
240° ≤ H < 300°: (X, 0, C)
300° ≤ H < 360°: (C, 0, X)

(R, G, B) = ((R'+m), (G'+m), (B'+m))

Implementation:

import cv2
import numpy as np

# RGB → HSV
rgb_image = cv2.imread('image.jpg')
hsv_image = cv2.cvtColor(rgb_image, cv2.COLOR_BGR2HSV)

# HSV → RGB
rgb_back = cv2.cvtColor(hsv_image, cv2.COLOR_HSV2BGR)

# OpenCV-də H: 0-180 (180-ə bölünür storage üçün)
# Manual conversion
h, s, v = cv2.split(hsv_image)
h_degrees = h * 2 # 0-360 aralığına convert

HSV Applications

Color range detection:

# Qırmızı obyektləri tap
lower_red1 = np.array([0, 120, 70])
upper_red1 = np.array([10, 255, 255])
lower_red2 = np.array([170, 120, 70])
upper_red2 = np.array([180, 255, 255])

mask1 = cv2.inRange(hsv_image, lower_red1, upper_red1)
mask2 = cv2.inRange(hsv_image, lower_red2, upper_red2)
red_mask = mask1 | mask2

HSL Color Space

HSL (Hue, Saturation, Lightness) HSV-yə oxşar, lakin Lightness fərqlidir.

HSL vs HSV

HSL Lightness:

  • 0%: Black
  • 50%: Pure color (hue)
  • 100%: White

HSV Value:

  • 0%: Black
  • 100%: Pure color (at S=100%)

HSL Bi-cone

RGB → HSL:

L = (max(R,G,B) + min(R,G,B)) / 2

if max = min:
S = 0, H = undefined
else:
if L ≤ 0.5:
S = (max - min) / (max + min)
else:
S = (max - min) / (2 - max - min)

H calculation same as HSV

Implementation:

# RGB → HLS (OpenCV-də HLS adlanır)
hls_image = cv2.cvtColor(rgb_image, cv2.COLOR_BGR2HLS)

# Channels: H (0-180), L (0-255), S (0-255)
h, l, s = cv2.split(hls_image)

YCbCr Color Space

YCbCr (YUV ailəsindən) video və image compression üçün istifadə olunur.

YCbCr Komponetləri

Xüsusiyyətlər:

  • Y: Luminance (grayscale information)
  • Cb, Cr: Chrominance (color information)
  • Human eye Y-ə daha həssasdır
  • Chroma subsampling: 4:2:0, 4:2:2

RGB ↔ YCbCr Conversion

RGB → YCbCr (JPEG standard):

Y  = 0.299×R + 0.587×G + 0.114×B
Cb = -0.169×R - 0.331×G + 0.500×B + 128
Cr = 0.500×R - 0.419×G - 0.081×B + 128

YCbCr → RGB:

R = Y + 1.402×(Cr - 128)
G = Y - 0.344×(Cb - 128) - 0.714×(Cr - 128)
B = Y + 1.772×(Cb - 128)

Implementation:

# RGB → YCrCb
ycrcb_image = cv2.cvtColor(rgb_image, cv2.COLOR_BGR2YCrCb)

# Split channels
y, cr, cb = cv2.split(ycrcb_image)

# Y channel: grayscale equivalent
# Skin detection üçün CrCb istifadə olunur

YCbCr Applications

LAB Color Space

LAB (CIELAB) human vision-ə uyğun, perceptually uniform color space-dir.

LAB Komponetləri

L (Lightness):

  • 0: Black
  • 100: White
  • Perceptual lightness

a channel:

  • Negative: Green
  • Positive: Red
  • 0: Neutral

b channel:

  • Negative: Blue
  • Positive: Yellow
  • 0: Neutral

LAB Üstünlükləri

Perceptually uniform:

  • ΔE = √((ΔL)² + (Δa)² + (Δb)²)
  • Euclidean distance ≈ perceived color difference

Device-independent:

  • CIE XYZ-dən törəmə
  • Standard reference

RGB ↔ LAB Conversion

Birbaşa yox, XYZ vasitəsilə:

RGB → XYZ → LAB
LAB → XYZ → RGB

Implementation:

# RGB → LAB
lab_image = cv2.cvtColor(rgb_image, cv2.COLOR_BGR2LAB)

# L: 0-255 (OpenCV-də), standard-da 0-100
# a, b: 0-255 (OpenCV-də shifted), standard-da -128 to +127

l, a, b = cv2.split(lab_image)

# L channel-də CLAHE (Contrast Limited AHE) apply et
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))
l_enhanced = clahe.apply(l)
lab_enhanced = cv2.merge([l_enhanced, a, b])
rgb_enhanced = cv2.cvtColor(lab_enhanced, cv2.COLOR_LAB2BGR)

Grayscale Conversion

Color image-i grayscale-ə çevirmək.

Conversion Methods

1. Luminosity method (recommended):

Gray = 0.299×R + 0.587×G + 0.114×B

Reason: Human eye-ə uyğun
- Green-ə daha həssas (58.7%)
- Red orta (29.9%)
- Blue ən az (11.4%)

2. Average method:

Gray = (R + G + B) / 3

3. Desaturation:

Gray = (max(R,G,B) + min(R,G,B)) / 2

Implementation:

# Luminosity (OpenCV default)
gray = cv2.cvtColor(rgb_image, cv2.COLOR_BGR2GRAY)

# Manual
gray_manual = 0.299*rgb[:,:,2] + 0.587*rgb[:,:,1] + 0.114*rgb[:,:,0]

# Average
gray_avg = np.mean(rgb_image, axis=2).astype(np.uint8)

# Single channel
gray_red = rgb_image[:,:,2]

Color Space Comparison

Color SpaceChannelsRangeUse CasePerceptual
RGBR,G,B0-255Display, storageZəif
HSVH,S,VH:0-360°, S,V:0-100%Color detectionYaxşı
HSLH,S,LH:0-360°, S,L:0-100%Color manipulationYaxşı
YCbCrY,Cb,Cr0-255Compression, videoOrta
LABL,a,bL:0-100, a,b:-128..127Color matchingƏla
GrayscaleIntensity0-255Processing-

Practical Examples

1. Color-based Object Detection

# HSV-də sarı obyekt tap
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
lower_yellow = np.array([20, 100, 100])
upper_yellow = np.array([30, 255, 255])
mask = cv2.inRange(hsv, lower_yellow, upper_yellow)
result = cv2.bitwise_and(image, image, mask=mask)

2. Skin Detection

# YCrCb-də skin detection
ycrcb = cv2.cvtColor(image, cv2.COLOR_BGR2YCrCb)
lower_skin = np.array([0, 133, 77])
upper_skin = np.array([255, 173, 127])
skin_mask = cv2.inRange(ycrcb, lower_skin, upper_skin)

3. Contrast Enhancement

# LAB-də L channel-ə CLAHE
lab = cv2.cvtColor(image, cv2.COLOR_BGR2LAB)
l, a, b = cv2.split(lab)
clahe = cv2.createCLAHE(clipLimit=3.0, tileGridSize=(8,8))
l_clahe = clahe.apply(l)
lab_clahe = cv2.merge([l_clahe, a, b])
enhanced = cv2.cvtColor(lab_clahe, cv2.COLOR_LAB2BGR)

4. Color Histogram Equalization

# HSV-də V channel-ə histogram equalization
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
h, s, v = cv2.split(hsv)
v_eq = cv2.equalizeHist(v)
hsv_eq = cv2.merge([h, s, v_eq])
result = cv2.cvtColor(hsv_eq, cv2.COLOR_HSV2BGR)

Performance Considerations

Optimization tips:

  1. Minimize conversions - work in appropriate space
  2. Cache converted images if reused
  3. Use ROI (Region of Interest) when possible
  4. Consider GPU for real-time applications
  5. Grayscale when color not needed

Əsas Nəticələr

  1. RGB - Additive model, display üçün, 3 kanal (R,G,B)
  2. HSV/HSL - Perceptual, color detection və manipulation üçün
  3. Hue - Rəng tonu (0-360°), circular
  4. Saturation - Rəng doyğunluğu, pure ↔ gray
  5. Value/Lightness - Parlaqlıq komponenti
  6. YCbCr - Luminance/chrominance separation, compression üçün
  7. LAB - Perceptually uniform, color matching üçün
  8. Grayscale - Luminosity method human perception-a uyğundur
  9. Color space seçimi - Task-a görə optimal fəza seç
  10. Conversion cost - LAB ən slow, grayscale ən fast