Domanda

Ho alcune tabelle di ricerca a colori che sembrano .Esiste una guida che posso utilizzare per programmare un filtro dell'immagine utilizzando la tabella di ricerca colore in Nokia Imaging SDK.Sto passando a Nokia Imaging SDK perché mi è stato detto che è più ottimizzato e preciso.

Attualmente il codice sembra questo.

public WriteableBitmap Process()
    {
        int width = inputimage.PixelWidth;
        int height = inputimage.PixelHeight;

        int[] pixelArray = this.inputimage.Pixels;

        for (int i = 0; i < width; i++)
        {           

            for (int j = 0; j < height; j++)
            {
                // Extract color components
                var c = inputimage.GetPixel(i,j);
                var b = c.B;
                var g = c.G;
                var r = c.R;
                var a = c.A;

                int blockBlue = b / 4;
                int blockGreen = g / 4;
                int blockRed = r / 4;

                int right = blockBlue % 8;
                int down = blockBlue / 8;

                int px = right * 64 + blockRed;
                int py = down * 64 + blockGreen;


                Color clr = LookUpTable.GetPixel(px, py);

                // Set result color
                inputimage.SetPixel(i, j, clr);                    
            }
        }

        return wBmp;
    }
.

È stato utile?

Soluzione

Le classi di base personalizzateFasi o personalizzate Personalizzato ti permetteranno di tradurre questo ciclo quasi direttamente.

Non sono sicuro se riceverai prestazioni o accuratezza migliori per questo RGB Lut da solo, come è già piuttosto semplice. Le cose principali che vedo sono il getpixel / setpixel che dovresti davvero passare agli accessi ad array diretta. Evitare anche la classe di colori. Idealmente letto e scrivi valori di UINT a 32 bit, maschera e spostano le parti.

Il secondo miglioramento sarebbe se è possibile vincolare la funzione memorizzata nel LUT.

Se può essere espresso come singolo rosso, verde e blu LUTS, è possibile utilizzare la classe CurvesFilter nell'immagine SDK. Anche senza SDK questo accelererà le cose come quelle tabelle possono vivere più vicino alla CPU nella cache L1 o L2.

Modifica: la versione finale di Nokia Imaging SDK 1.2 (da rilasciare presto) ha alcuni miglioramenti di precisione che potrebbero essere rilevanti anche, a BTW.

Modifica 2: dovresti essere in grado di accedere a pixel con qualcosa come il seguente. (Non ho testato completamente i cast. C # è pignolo su firmato-ness.)

// in for loop..

var uintColor = (uint)wb.Pixels[i];
var a = (byte)((uintColor >> 24) & 255);
var r = (byte)((uintColor >> 16) & 255);
var g = (byte)((uintColor >> 8) & 255);
var b = (byte)((uintColor) & 255);

// ..do something..

wb.Pixels[i] = (int)(b | (g << 8) | (r << 16) | (a << 24));
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top