Каковы диапазоны координат в цветовом пространстве CIELAB?
У меня есть следующий кусок кода:
public List GetNormalizedPixels(Bitmap image)
{
System.Drawing.Imaging.BitmapData data = image.LockBits(
new Rectangle(0, 0, image.Width, image.Height),
System.Drawing.Imaging.ImageLockMode.ReadOnly,
image.PixelFormat);
int pixelSize = Image.GetPixelFormatSize(image.PixelFormat) / 8;
var result = new List();
unsafe
{
for (int y = 0; y < data.Height; ++y)
{
byte* row = (byte*)data.Scan0 + (y * data.Stride);
for (int x = 0; x < data.Width; ++x)
{
Color c = Color.FromArgb(
row[x * pixelSize + 3],
row[x * pixelSize + 2],
row[x * pixelSize + 1],
row[x * pixelSize]);
// (*)
result.Add(Tuple.Create(
1.0 * c.R / 255,
1.0 * c.G / 255,
1.0 * c.B / 255);
}
}
}
image.UnlockBits(data);
return result;
}
Ключевой фрагмент (*) таков:
result.Add(Tuple.Create(
1.0 * c.R / 255,
1.0 * c.G / 255,
1.0 * c.B / 255);
который добавляет пиксель с его масштабированными компонентами[0, 1]
для дальнейшего использования в задачах классификации с различными классификаторами. Некоторые из них требуют, чтобы атрибуты были нормализованы, как это, другие неТ забота - отсюда и эта функция.
Тем не менее, что я должен делать, когда яхотел бы классифицировать пиксели в другом цветовом пространстве, чемRGB
, лайкL*a*b*
? Пока значения всех координат вRGB
цветовое пространство попадает в диапазон[0,256)
вL*a*b*
цветовое пространствоa*
а такжеb*
Говорят, что неограничен.
Поэтому при изменении фрагмента (*) на :(
Lab lab = c.ToLab();
result.Add(Tuple.Create(
1.0 * lab.L / 100,
1.0 * lab.A / ?,
1.0 * lab.B / ?);
ToLab
является методом расширения, реализованным с использованием соответствующих алгоритмовВот)
что я должен поставить для вопросительных знаков?