Quelles sont les gammes de coordonnées dans l'espace couleur CIELAB?

J'ai le morceau de code suivant:

public List<Tuple<double, double, double>> 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<Tuple<double, double, double>>();

    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;
}

La clé de fragment (*) est-ce:

result.Add(Tuple.Create(
    1.0 * c.R / 255,
    1.0 * c.G / 255,
    1.0 * c.B / 255);

qui ajoute un pixel avec ses composants de mise à l'échelle pour la gamme [0, 1] encore être utilisé dans la classification des tâches avec différents classificateurs. Certains d'entre eux exigent les attributs pour être normalisée comme cela, d'autres ne se soucient pas d'où cette fonction.

Cependant, que dois-je faire lorsque je voudrais classer les pixels d'une couleur différente de l'espace que RGB, comme L*a*b*? Tandis que les valeurs de toutes les coordonnées dans RGB l'espace de couleurs de l'automne dans la gamme [0,256) dans L*a*b* espace de couleurs a* et b* sont dit être sans bornes.

Donc, lors de la modification du fragment ( * ):

Lab lab = c.ToLab();

result.Add(Tuple.Create(
    1.0 * lab.L / 100,
    1.0 * lab.A / ?,
    1.0 * lab.B / ?);

(ToLab est une extension de la méthode, mise en œuvre en utilisant des algorithmes de ici)

que dois-je mettre pour les points d'interrogation?

Question intéressante. L'esprit que la réponse dépend de la rgb choix et le blanc de référence. L'approche par force brute proposée par BartoszKP dépend de ces facteurs, et peut-être besoin d'être re-fini selon la plate-forme.

OriginalL'auteur BartoszKP | 2013-09-30