カラースペースの設計目的の違い
| カラーモデル | 主な目的 | 代表的な用途 |
|---|
| YUV | 明度と色差を分離し、黒白テレビとの互換性と帯域効率を向上 | 動画圧縮(テレビ放送、JPEG/MPEG) |
| HSV | 人間の色覚に近い直感的なカラーパラメータを提供 | 画像編集、色選択、コンピュータビジョン |
構成要素と定義
YUVの構造
- Y成分: 明度情報(画像の主な帯域を占める)
- U(Cb)とV(Cr): 色差情報。色階の解像度を低下させた4:2:0サムプリングによりデータ量を削減。
HSVの構造
- H(色相): 色の種類(0°〜360°)
- S(彩度): 色の純度(0%がグレースケール、100%が原色)
- V(明度): 色の明るさ(0%が黒、100%が最大輝度)
変換式と幾何的特徴
YUVの変換
# BT.601基準の例
Y = 0.299*R + 0.587*G + 0.114*B
U = 0.492*(B - Y)
V = 0.877*(R - Y)
明度-色差分離型の三次元線形空間としての特性。
HSVの変換
# 簡易版の計算
max_val = max(R, G, B)
min_val = min(R, G, B)
V = max_val
S = (max_val - min_val) / max_val if max_val != 0 else 0
# Hの計算(色相帯ごとに処理が必要)
円筒座標系(Hが角度、Sが半径、Vが高さ)として表現。
用途の比較
| 用途 | YUV | HSV |
|---|
| 動画圧縮 | H.264/MPEGでの帯域節約 | 非対応 |
| 色調整 | 操作が非直感的 | 色相/彩度の直接調整(Photoshopなど) |
| コンピュータビジョン | 肌色モデル(顔検出) | 色閾値による物体抽出 |
| モノクロ互換性 | Yチャンネルで対応 | 無し |
主要な差異まとめ
| 特徴 | YUV | HSV |
|---|
| 主な利点 | 圧縮効率、互換性 | 色操作の直感性、人間認識に近い |
| データ分離 | 明度(Y)と色差(UV)の分離 | 色相(H)、彩度(S)、明度(V)の分離 |
| 適用分野 | 動画処理 | 画像処理、デザイン |
| 人間の感度 | 明度に最適化 | 色覚次元を直接反映 |
コード例
YUVとRGBの変換(Python)
import cv2
import numpy as np
# RGBからYUV(OpenCVのYCrCbを使用)
rgb_data = cv2.imread("image.jpg")
yuv_data = cv2.cvtColor(rgb_data, cv2.COLOR_BGR2YCrCb)
# YUVからRGBに戻す
recovered_rgb = cv2.cvtColor(yuv_data, cv2.COLOR_YCrCb2BGR)
HSVの色閾値処理
import cv2
# 画像をHSVに変換
image = cv2.cvtColor(cv2.imread("image.jpg"), cv2.COLOR_BGR2HSV)
# 赤色範囲の定義(H: 0°〜10°と160°〜180°)
lower_red = np.array([0, 100, 100])
upper_red = np.array([10, 255, 255])
mask = cv2.inRange(image, lower_red, upper_red)
# 赤色領域の抽出
result = cv2.bitwise_and(image, image, mask=mask)
選択基準
- YUVを選択: 動画圧縮、リアルタイム伝送、モノクロ互換性が必要な場合
- HSVを選択: 色の直接調整や色閾値によるオブジェクト抽出が必要な場合