public FastHessian(float thresh, int octaves, int init_sample, IntegralImage img) { this.thresh = thresh; this.octaves = octaves; this.init_sample = init_sample; this.img = img; }
/// <summary> /// Получение интегрального изображения из массива температур /// </summary> public static IntegralImage FromArray(float[,] tArray, float max, float min) { IntegralImage pic = new IntegralImage(tArray.GetLength(0), tArray.GetLength(1)); float rowsum = 0; for (int x = 0; x < tArray.GetLength(0); x++) { float temp = tArray[x, 0]; temp = (float)((temp - min)); rowsum += temp; pic[0, x] = rowsum; } for (int y = 1; y < tArray.GetLength(1); y++) { rowsum = 0; for (int x = 0; x < tArray.GetLength(0); x++) { float temp = tArray[x, y]; temp = (float)((temp - min)); rowsum += temp; pic[y, x] = rowsum + pic[y - 1, x]; } } return pic; }
private float thresh; //значение порога отсечения #endregion Fields #region Constructors public FastHessian(float thresh, int octaves, int init_sample, IntegralImage img) { this.thresh = thresh; this.octaves = octaves; this.init_sample = init_sample; this.img = img; }
/// <summary> /// Получение интегрального изображения из bitmap /// </summary> public unsafe static IntegralImage FromImage(Bitmap image) { IntegralImage pic = new IntegralImage(image.Width, image.Height); float rowsum = 0; for (int x = 0; x < image.Width; x++) { Color c = image.GetPixel(x, 0); rowsum += (cR * c.R + cG * c.G + cB * c.B) / 255f; pic[0, x] = rowsum; } for (int y = 1; y < image.Height; y++) { rowsum = 0; for (int x = 0; x < image.Width; x++) { Color c = image.GetPixel(x, y); rowsum += (cR * c.R + cG * c.G + cB * c.B) / 255f; pic[y, x] = rowsum + pic[y - 1, x]; } } return(pic); }
/// <summary> /// Получение интегрального изображения из массива температур /// </summary> public static IntegralImage FromArray(float[,] tArray, float max, float min) { IntegralImage pic = new IntegralImage(tArray.GetLength(0), tArray.GetLength(1)); float rowsum = 0; for (int x = 0; x < tArray.GetLength(0); x++) { float temp = tArray[x, 0]; temp = (float)((temp - min)); rowsum += temp; pic[0, x] = rowsum; } for (int y = 1; y < tArray.GetLength(1); y++) { rowsum = 0; for (int x = 0; x < tArray.GetLength(0); x++) { float temp = tArray[x, y]; temp = (float)((temp - min)); rowsum += temp; pic[y, x] = rowsum + pic[y - 1, x]; } } return(pic); }
/// <summary> /// Строит вектор дескриптора для каждой ключевой точки указанного массива /// </summary> public void DescribeInterestPoints(List <InterestPoint> ipts, IntegralImage img) { if (ipts.Count == 0) { return; } this.img = img; Parallel.ForEach(ipts, ip => { //Определить размер дескриптора ip.descriptorLength = 64; //Определить ориентацию GetOrientation(ip); //Вычислить дескриптор GetDescriptor(ip); }); }
/// <summary> /// Определение ориентации ключевых точек и поиск дескрипторов /// </summary> public static void DecribeInterestPoints(List <InterestPoint> ipts, IntegralImage img) { SURFDescriptor des = new SURFDescriptor(); des.DescribeInterestPoints(ipts, img); }
//Получить ключевые точки public static List <InterestPoint> getIpoints(float thresh, int octaves, int init_sample, IntegralImage img) { FastHessian fh = new FastHessian(thresh, octaves, init_sample, img); return(fh.getIpoints()); }
//Получить ключевые точки public static List<InterestPoint> getIpoints(float thresh, int octaves, int init_sample, IntegralImage img) { FastHessian fh = new FastHessian(thresh, octaves, init_sample, img); return fh.getIpoints(); }
/// <summary> /// Строит вектор дескриптора для каждой ключевой точки указанного массива /// </summary> public void DescribeInterestPoints(List<InterestPoint> ipts, IntegralImage img) { if (ipts.Count == 0) return; this.img = img; Parallel.ForEach(ipts, ip => { //Определить размер дескриптора ip.descriptorLength = 64; //Определить ориентацию GetOrientation(ip); //Вычислить дескриптор GetDescriptor(ip); }); }
/// <summary> /// Определение ориентации ключевых точек и поиск дескрипторов /// </summary> public static void DecribeInterestPoints(List<InterestPoint> ipts, IntegralImage img) { SURFDescriptor des = new SURFDescriptor(); des.DescribeInterestPoints(ipts, img); }
/// <summary> /// Получение интегрального изображения из bitmap /// </summary> public static unsafe IntegralImage FromImage(Bitmap image) { IntegralImage pic = new IntegralImage(image.Width, image.Height); float rowsum = 0; for (int x = 0; x < image.Width; x++) { Color c = image.GetPixel(x, 0); rowsum += (cR * c.R + cG * c.G + cB * c.B) / 255f; pic[0, x] = rowsum; } for (int y = 1; y < image.Height; y++) { rowsum = 0; for (int x = 0; x < image.Width; x++) { Color c = image.GetPixel(x, y); rowsum += (cR * c.R + cG * c.G + cB * c.B) / 255f; pic[y, x] = rowsum + pic[y - 1, x]; } } return pic; }