Esempio n. 1
0
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="image">Source image</param>
        /// <param name="transform">Transform that converts RGB to grayscale</param>
        public unsafe GrayscaleImage(RGBImage image, float[] transform)
        {
            float t0 = transform[0];
            float t1 = transform[1];
            float t2 = transform[2];

            _handler = new FloatArrayHandler(image.Rows, image.Columns, 1);
            fixed(byte *src = image.RawArray)
            {
                fixed(float *dst = _handler.RawArray)
                {
                    byte * srcPtr = src;
                    float *dstPtr = dst;
                    int    length = Rows * Columns;

                    while (length-- > 0)
                    {
                        int R = *srcPtr++;
                        int G = *srcPtr++;
                        int B = *srcPtr++;

                        *dstPtr++ = t0 * R + t1 * G + t2 * B;
                    }
                }
            }

            ID = image.ID;
        }
Esempio n. 2
0
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="rgb">Source image</param>
        /// <param name="converter">Converter to use</param>
        public unsafe ColorImage(RGBImage rgb, ColorSpaceConverter converter)
        {
            _handler = new FloatArrayHandler(rgb.Rows, rgb.Columns, 3);

            fixed(byte *src = rgb.RawArray)
            {
                fixed(float *dst = _handler.RawArray)
                {
                    byte * srcPtr = src;
                    float *dstPtr = dst;
                    int    length = Rows * Columns;

                    while (length-- > 0)
                    {
                        float i1 = *srcPtr++;
                        float i2 = *srcPtr++;
                        float i3 = *srcPtr++;
                        float o1, o2, o3;
                        o1 = o2 = o3 = 0;
                        converter(i1, i2, i3, ref o1, ref o2, ref o3);
                        *dstPtr++ = o1;
                        *dstPtr++ = o2;
                        *dstPtr++ = o3;
                    }
                }
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="image">Source image</param>
        public unsafe GrayscaleImage(RGBImage image)
        {
            _handler = new FloatArrayHandler(image.Rows, image.Columns, 1);
            fixed(byte *src = image.RawArray)
            {
                fixed(float *dst = _handler.RawArray)
                {
                    byte * srcPtr = src;
                    float *dstPtr = dst;
                    int    length = Rows * Columns;

                    while (length-- > 0)
                    {
                        int R = *srcPtr++;
                        int G = *srcPtr++;
                        int B = *srcPtr++;

                        float min      = Math.Min(R, Math.Min(G, B));
                        float max      = Math.Max(R, Math.Max(G, B));
                        float val      = (min + max) / 2;
                        *     dstPtr++ = val / 255;
                    }
                }
            }

            ID = image.ID;
        }
Esempio n. 4
0
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="values">Values to use for populating this image</param>
        public unsafe GrayscaleImage(float[,] values)
        {
            int rows    = values.GetLength(0);
            int columns = values.GetLength(1);

            float[, ,] data = new float[rows, columns, 1];
            fixed(float *src = values, dst = data)
            {
                int    length = rows * columns;
                float *srcPtr = src;
                float *dstPtr = dst;

                while (length-- > 0)
                {
                    *dstPtr++ = *srcPtr++;
                }
            }

            _handler = new FloatArrayHandler(data, false);
        }
Esempio n. 5
0
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="bitmap">Source image</param>
        /// <param name="converter">Converter to use</param>
        public unsafe ColorImage(BitmapSource bitmap, ColorSpaceConverter converter)
        {
            float o1, o2, o3;
            int   rows    = bitmap.PixelHeight;
            int   columns = bitmap.PixelWidth;

            _handler = new FloatArrayHandler(rows, columns, 3);

            FormatConvertedBitmap bmp = new FormatConvertedBitmap();

            bmp.BeginInit();
            bmp.Source            = bitmap;
            bmp.DestinationFormat = PixelFormats.Rgb24;
            bmp.EndInit();
            byte[] pixels = new byte[rows * columns * 3];
            bmp.CopyPixels(pixels, columns * 3, 0);
            fixed(byte *src = pixels)
            {
                fixed(float *dst = _handler.RawArray)
                {
                    byte * srcPtr = src;
                    float *dstPtr = dst;
                    int    length = rows * columns;

                    while (length-- > 0)
                    {
                        float i1 = *srcPtr++;
                        float i2 = *srcPtr++;
                        float i3 = *srcPtr++;
                        o1 = o2 = o3 = 0;
                        converter(i1, i2, i3, ref o1, ref o2, ref o3);
                        *dstPtr++ = o1;
                        *dstPtr++ = o2;
                        *dstPtr++ = o3;
                    }
                }
            }

            pixels = null;
        }
Esempio n. 6
0
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="bitmap">Source image</param>
        /// <param name="converter">Converter to use</param>
        public unsafe ColorImage(System.Drawing.Bitmap bitmap, ColorSpaceConverter converter)
        {
            int    r, c;
            float  o1, o2, o3;
            byte * srcPtr, srcScan;
            float *dstPtr;
            int    rows    = bitmap.Height;
            int    columns = bitmap.Width;

            _handler = new FloatArrayHandler(rows, columns, 3);

            System.Drawing.Imaging.BitmapData srcBuf = bitmap.LockBits(new System.Drawing.Rectangle(0, 0, bitmap.Width, bitmap.Height), System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format24bppRgb);

            srcPtr = (byte *)srcBuf.Scan0;
            int srcStride = srcBuf.Stride;

            fixed(float *dstBuf = _handler.RawArray)
            {
                dstPtr = dstBuf;
                for (r = 0; r < rows; r++, srcPtr += srcStride)
                {
                    for (c = 0, srcScan = srcPtr; c < columns; c++)
                    {
                        float i3 = *srcScan++;
                        float i2 = *srcScan++;
                        float i1 = *srcScan++;
                        o1 = o2 = o3 = 0;
                        converter(i1, i2, i3, ref o1, ref o2, ref o3);
                        *dstPtr++ = o1;
                        *dstPtr++ = o2;
                        *dstPtr++ = o3;
                    }
                }
            }

            bitmap.UnlockBits(srcBuf);
        }
Esempio n. 7
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="rows">Number of rows</param>
 /// <param name="columns">Number of columns</param>
 public GrayscaleImage(int rows, int columns)
 {
     _handler = new FloatArrayHandler(rows, columns, 1);
 }
Esempio n. 8
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="data">The raw image data</param>
 public FilterBankImage(float[, ,] data)
 {
     _handler = new FloatArrayHandler(data, false);
 }
Esempio n. 9
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="rows">The number of rows in the image</param>
 /// <param name="columns">The number of columns in the image</param>
 /// <param name="filters">The number of filters (i.e. channels) in the image</param>
 public FilterBankImage(int rows, int columns, int filters)
 {
     _handler = new FloatArrayHandler(rows, columns, filters);
 }
Esempio n. 10
0
 /// <summary>
 /// Constructor.
 /// </summary>
 public FilterBankImage()
 {
     _handler = new FloatArrayHandler();
 }