程式碼片段實現色偏檢測,核心邏輯:將 BGR 影像轉 Lab 空間,計算 a/b 通道平均值與方差,推導偏色因子 K。關鍵疑問:labData[i * widthStep + j * nChannels + 1] 中的 +1、+2 代表什麼?
| 通道索引 | Lab 分量 | 色彩含義 | 數值範圍 (OpenCV 8-bit) |
|---|---|---|---|
| 0 | L | 亮度 | 0~255 |
| 1 | a | 紅→綠(正紅、負綠) | 0~255 (實際 -128~127) |
| 2 | b | 黃→藍(正黃、負藍) | 0~255 (實際 -128~127) |
// 一維陣列存取二維影像
// i: 行 (0~height-1), j: 列 (0~width-1)
// widthStep: 每行位元組數 (含 padding 對齊)
// nChannels: 通道數 (3)
uchar* ptr = labData + i * labFrame->widthStep + j * labFrame->nChannels;
// ptr[0] = L, ptr[1] = a, ptr[2] = b
da += ptr[1]; // 累加 a 通道
db += ptr[2]; // 累加 b 通道
cvCvtColor(BGR2Lab) 轉換色彩空間da, dbD = sqrt(da² + db²),代表整體偏色強度Ma, Mb(中心矩),評估色彩分布集中度K = D / sqrt(Ma + Mb)(或類似公式),K 越大偏色越嚴重Mat 查找表 (LUT) 加速 Lab 轉換記住:OpenCV 多通道影像在記憶體中為交錯存放 (L,a,b,L,a,b...),+1、+2正是存取 a、b 通道的關鍵偏移量。