Pregunta

Tengo algunas tablas de búsqueda de colores que se parecen a este .¿Hay una guía que pueda usar para programar un filtro de imagen con la tabla de búsqueda de colores en Nokia Imaging SDK.Estoy cambiando a Nokia Imaging SDK porque me han dicho que es más optimizado y preciso.

Actualmente el código se ve así.

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

¿Fue útil?

Solución

Las clases de base de CustomFilterBase o CustomeFectBaseBase le permitirán traducir este bucle casi directamente.

No estoy seguro de si obtendrás un mejor rendimiento o precisión solo para este RGB Lut, ya que ya es bastante simple. Las cosas principales que veo son el getpixel / setpixel que realmente debe cambiar a los accesos de matriz directa. También evitar la clase de color. Idealmente, lea y escriba los valores de Uint de 32 bits, máscara y cambian las piezas.

La segunda mejora sería si puede restringir la función almacenada en la LUT.

Si se puede expresar como LUTs rojos, verdes y azules individuales, puede usar la clase Curvesfilter en el SDK de Imaging. Incluso sin el SDK, esto acelerará las cosas, ya que esas tablas pueden vivir más cerca de la CPU en el caché L1 o L2.

Editar: La versión final de Nokia Imaging SDK 1.2 (pronto para ser lanzada) tiene algunas mejoras de precisión que también pueden ser relevantes, por cierto.

Editar 2: Debe poder acceder a los píxeles con algo como lo siguiente. (No he probado los moldes completamente. C # es exigente acerca de Firmed-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));

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top