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(); }
public void Save(string filePath, ScaleLevel scaleLevel) { if (filePath.Length == 1) { filePath = "0" + filePath; } this.SaveImage(filePath, scaleLevel); this.SaveMetadata(filePath, scaleLevel); }
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")); } }
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; }
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); } }