Exemplo n.º 1
0
    private void CreateScaleSpace()
    {
      IList<ScaleLevel> scaleLevels = new List<ScaleLevel>();
      if (_dataInitializer.DataExists())
      {
        scaleLevels = _dataInitializer.ReadData(_filterBuilder);
      }

      if (scaleLevels.Count == 0)
      {
        Parallel.For(
          0,
          (int)(((FinalT - InitialT) / Step) + 1),
          (i, state) =>
            {
              IFilter filter = _filterBuilder.Build(InitialT + (i * Step));
              var scaleLevel = new ScaleLevel(filter, this._originalImage.GetDeepCopy());
              scaleLevel.ApplyTransform().FindBlobs();
              _scaleSpace[i] = scaleLevel;
            });
      }
      else
      {
        int number = (int)(((FinalT - InitialT) / Step) + 1);
        _scaleSpace = scaleLevels.Take(number).ToArray();
        Parallel.ForEach(_scaleSpace, (level) => level.FindBlobs());
        _initialized = true;
      }
      _scaleSpace = _scaleSpace.OrderBy(p => p.Sigma).ToArray();
    }
Exemplo n.º 2
0
    public void Save(string filePath, ScaleLevel scaleLevel)
    {
      if (filePath.Length == 1)
      {
        filePath = "0" + filePath;
      }

      this.SaveImage(filePath, scaleLevel);
      this.SaveMetadata(filePath, scaleLevel);
    }
Exemplo n.º 3
0
    private void SaveImage(string filePath, ScaleLevel scaleLevel)
    {
      using (var image = new Bitmap(_path))
      {
        var rect = new Rectangle(0, 0, image.Width, image.Height);
        BitmapData bitmapData = image.LockBits(rect, ImageLockMode.ReadWrite, image.PixelFormat);
        IntPtr startPtr = bitmapData.Scan0;

        int imageSize = Math.Abs(bitmapData.Stride) * image.Height;

        byte[] bytes = scaleLevel.Image.ToByteArray();

        Marshal.Copy(bytes, 0, startPtr, imageSize);
        image.UnlockBits(bitmapData);

        image.Save(Path.Combine("LoG", filePath + ".jpg"));
      }
    }
Exemplo n.º 4
0
    public IList<ScaleLevel> ReadData(IFilterBuilder filterBuilder)
    {
      var result = new List<ScaleLevel>();
      foreach (var path in Directory.EnumerateFiles(FolderName))
      {
        var fileInfo = new FileInfo(path);
        if (Extension.Equals(fileInfo.Extension, StringComparison.OrdinalIgnoreCase))
        {
          using (var stream = fileInfo.OpenRead())
          {
            var deserilizer = new BinaryFormatter();
            var metadata = (ScaleMetadata)deserilizer.Deserialize(stream);
            var scaleLevel = new ScaleLevel(filterBuilder.Build(metadata.T), metadata.Image);
            result.Add(scaleLevel);
          }
        }
      }

      return result;
    }
Exemplo n.º 5
0
 private void SaveMetadata(string filePath, ScaleLevel scaleLevel)
 {
   using (var file = new FileStream(Path.Combine("Log", filePath + Extension), FileMode.Create, FileAccess.Write, FileShare.None))
   {
     var serializer = new BinaryFormatter();
     var obj = new ScaleMetadata { Image = scaleLevel.Image, T = scaleLevel.T };
     serializer.Serialize(file, obj);
   }
 }