public NormalizedImage(MNistImage srcImage) { Debug.Assert(srcImage != null); Debug.Assert(srcImage.Label != null); Debug.AssertNotNull(srcImage.RawData); InitializeCanvas(srcImage.Width, srcImage.Height); Label = srcImage.Label; // каждый пиксел исходного изображения: // сужаем цветовой спектр до 0-2 и смещаем фон for (var y = 0; y < RawData.Length; y++) { for (var x = 0; x < RawData[y].Length; x++) { RawData[y][x] = srcImage.RawData[y][x] / 127.5 - 1.0; } } }
public static MNistImage[] GetImageSet(string labelsPath, string imagesPath) { Debug.Assert(labelsPath != null && imagesPath != null); var imagesBytes = File.ReadAllBytes(imagesPath); if (ConvertFromBigEndian(imagesBytes, 0) != Idx3MagicNumber) { throw new FormatException("Неверный формат файла изображений"); } var imagesCount = ConvertFromBigEndian(imagesBytes, sizeof(int)); var imageHeight = ConvertFromBigEndian(imagesBytes, sizeof(int) * 2); var imageWidth = ConvertFromBigEndian(imagesBytes, sizeof(int) * 3); var imageLength = imageWidth * imageHeight; if (imagesCount != (imagesBytes.Length - Idx3DataOffset) / imageLength) { throw new FormatException("Файл изображений поврежден"); } var labelsBytes = File.ReadAllBytes(labelsPath); if (ConvertFromBigEndian(labelsBytes, 0) != Idx1MagicNumber) { throw new FormatException("Неверный формат файла подписей"); } var labelsCount = ConvertFromBigEndian(labelsBytes, sizeof(int)); if (labelsCount != labelsBytes.Length - Idx1DataOffset) { throw new FormatException("Файл подписей поврежден"); } if (imagesCount != labelsCount) { throw new Exception("Количество изображений не совпадает с количеством подписей"); } // получаем все изображения var images = new MNistImage[imagesCount]; for (var i = 0; i < images.Length; i++) { var label = (int)labelsBytes[Idx1DataOffset + i]; Debug.Assert(label < 10, label.ToString()); var imageBytes = new byte[imageWidth][]; for (var r = 0; r < imageHeight; r++) { imageBytes[r] = new byte[imageHeight]; Buffer.BlockCopy(imagesBytes, Idx3DataOffset + i * imageLength + r * imageWidth, imageBytes[r], 0, imageWidth); } images[i] = new MNistImage(label, imageBytes); } return(images); }