public void ImageDecodingTest()
        {
            Bitmap originalImage;
            var fileStream = new FileStream(AppDomain.CurrentDomain.BaseDirectory + "/sandwich.bmp", FileMode.Open, FileAccess.Read);
            using (fileStream)
            {
                originalImage = new Bitmap(fileStream);
            }
            fileStream.Close();

            var reedSolomon = new ReedSolomon(32);
            var data = ImageProcessing.GetRawBytesFromRGBImage(originalImage);

            var originalData = new int[data.Length];
            Array.Copy(data, originalData, data.Length);

            var modifiedData = reedSolomon.EncodeRawBytesArray(data);

            var errorsCount = ErrorProvider.FillInPercentageOfErrors(modifiedData, 1);

            reedSolomon.SimplyDecodeRawBytesArray(modifiedData, data);

            var processedImage = ImageProcessing.GetRGBImageFromRawBytes(originalImage, data);

            var diffCount = 0;
            Bitmap diffImage;
            diffCount = ImageProcessing.Compare(processedImage, originalImage, out diffImage);

            var bytesDiffCount = GetDiffTable(originalData, data);

            Assert.IsTrue(bytesDiffCount.Count <= errorsCount);
            Assert.IsTrue(diffCount <= errorsCount);
        }
        private void ProcessImageSimpleEncoding()
        {
            var data            = ImageProcessing.GetRawBytesFromRGBImage(_originalImage);
            var correctionBytes = int.Parse(textBox1.Text);

            var reedSolomon  = new ReedSolomon(correctionBytes);
            var modifiedData = reedSolomon.EncodeRawBytesArray(data);

            textBox7.Text = SimulateTransmissionWithErrors(modifiedData).ToString();

            reedSolomon.SimplyDecodeRawBytesArray(modifiedData, data);

            _processedSimpleImage = ImageProcessing.GetRGBImageFromRawBytes(_originalImage, data);
        }
        public void LongDivideProperlyCorrectsErrorInAMessage4()
        {
            var reedSolomon = new ReedSolomon();
            var data = new int[223];

            for (var i = 0; i < 223; i++)
            {
                data[i] = ((i + 50) % 255) + 1;
            }

            var modifiedData = reedSolomon.EncodeRawBytesArray(data);

            modifiedData[0] = 1;
            modifiedData[15] = 16;

            var simpleDecoder = new SimpleRSDecoder(GenericGF.DATA_MATRIX_FIELD_256);

            var response = simpleDecoder.LongDecode(modifiedData, 32);

            Assert.IsTrue(response);

            for (var i = 0; i < 223; i++)
            {
                Assert.AreEqual(data[i], modifiedData[i]);
            }
        }
        public void ProperlyNotCorrectsErrorInAMessage5()
        {
            var reedSolomon = new ReedSolomon();
            var data = new int[223];

            for (var i = 0; i < 223; i++)
            {
                data[i] = ((i + 50) % 255) + 1;
            }

            var modifiedData = reedSolomon.EncodeRawBytesArray(data);

            modifiedData[0] = 0;
            modifiedData[170] = 170;

            var simpleDecoder = new SimpleRSDecoder(GenericGF.DATA_MATRIX_FIELD_256);

            var response = simpleDecoder.Decode(modifiedData, 32);

            Assert.IsFalse(response);
        }
        public void ProperlyFindsErrorInAMessage()
        {
            var reedSolomon = new ReedSolomon(32);
            var data = new int[223];

            for (var i = 0; i < 223; i++)
            {
                data[i] = i+10;
            }

            var modifiedData = reedSolomon.EncodeRawBytesArray(data);

            for (var i = 10; i < 30; i++)
            {
                modifiedData[i] = i + 5;
            }

            var simpleDecoder = new SimpleRSDecoder();

            var response = simpleDecoder.Decode(modifiedData, 32);

            Assert.IsFalse(response);
        }
        public void ProperlyDecodesNoErrorMessage()
        {
            var reedSolomon = new ReedSolomon(32);
            var data = new int[223];

            for (var i = 0; i < 223; i++)
            {
                data[i] = i+10;
            }

            var modifiedData = reedSolomon.EncodeRawBytesArray(data);

            var simpleDecoder = new SimpleRSDecoder();

            var response = simpleDecoder.Decode(modifiedData, 32);

            Assert.IsTrue(response);

            for (var i = 0; i < 223; i++)
            {
                Assert.AreEqual(data[i], modifiedData[i]);
            }
        }
        public void ProperlyCorrectsUpto16ErrorsInAMessageLoop()
        {
            var random = new Random(1);

            for (var j = 0; j < 17; j++)
            {
                var reedSolomon = new ReedSolomon();
                var data = new int[223];

                for (var i = 0; i < 223; i++)
                {
                    data[i] = random.Next(255);
                }

                var modifiedData = reedSolomon.EncodeRawBytesArray(data);
                var errorCount = 0;

                var startIndex = random.Next(0,255-16);
                for (var k = startIndex; k < startIndex + j; k++)
                {
                    var modifValue = random.Next(255);
                    while (modifValue == modifiedData[k])
                    {
                        modifValue = random.Next(255);
                    }
                    modifiedData[k] = modifValue;
                    errorCount++;
                }

                var simpleDecoder = new SimpleRSDecoder(GenericGF.DATA_MATRIX_FIELD_256);

                var response = simpleDecoder.Decode(modifiedData, 32);

                var bytesDiffCount = GetDiffTable(data, modifiedData, 223);

                Assert.IsTrue(bytesDiffCount.Count <= errorCount);

                for (var i = 0; i < 223; i++)
                {
                    Assert.AreEqual(data[i], modifiedData[i]);
                }
            }
        }
        public void ProperlyCorrectsErrorInAMessageLoop()
        {
            var random = new Random(1);

            for (var j = 0; j < 10;)
            {
                var reedSolomon = new ReedSolomon();
                var data = new int[223];

                for (var i = 0; i < 223; i++)
                {
                    data[i] = random.Next(1,255);
                }

                var modifiedData = reedSolomon.EncodeRawBytesArray(data);

                var modifIndex = random.Next(255);
                modifiedData[modifIndex] = random.Next(255);

                var simpleDecoder = new SimpleRSDecoder(GenericGF.DATA_MATRIX_FIELD_256);

                var response = simpleDecoder.Decode(modifiedData, 32);

                if (response)
                {
                    j++;
                    for (var i = 0; i < 223; i++)
                    {
                        Assert.AreEqual(data[i], modifiedData[i]);
                    }
                }
            }
        }
        public void ProperlyCorrectsErrorInAMessage3()
        {
            var reedSolomon = new ReedSolomon();
            var data = new int[223];

            for (var i = 0; i < 223; i++)
            {
                data[i] = i + 15;
            }

            var modifiedData = reedSolomon.EncodeRawBytesArray(data);

            modifiedData[12] += 182;

            var simpleDecoder = new SimpleRSDecoder(GenericGF.DATA_MATRIX_FIELD_256);

            var response = simpleDecoder.Decode(modifiedData, 32);

            Assert.IsTrue(response);

            for (var i = 0; i < 223; i++)
            {
                Assert.AreEqual(data[i], modifiedData[i]);
            }
        }
        public void ProperlyCorrects2ErrorsInAMessageLoop()
        {
            var random = new Random(1);

            for (var j = 0; j < 5; )
            {
                var reedSolomon = new ReedSolomon();
                var data = new int[223];

                for (var i = 0; i < 223; i++)
                {
                    data[i] = random.Next(1, 255);
                }

                var modifiedData = reedSolomon.EncodeRawBytesArray(data);

                var modifIndex = random.Next(255);
                var modifValue = random.Next(255);
                while (modifValue == modifiedData[modifIndex])
                {
                    modifValue = random.Next(255);
                }
                modifiedData[modifIndex] = modifValue;

                var modifIndex2 = random.Next(255);
                var modifValue2 = random.Next(255);
                while (modifIndex == modifIndex2)
                {
                    modifIndex2 = random.Next(255);
                }
                while (modifValue2 == modifiedData[modifIndex2])
                {
                    modifValue2 = random.Next(255);
                }
                modifiedData[modifIndex2] = modifValue2;

                var simpleDecoder = new SimpleRSDecoder(GenericGF.DATA_MATRIX_FIELD_256);

                var response = simpleDecoder.Decode(modifiedData, 32);

                var bytesDiffCount = GetDiffTable(data, modifiedData, 223);

                Assert.IsTrue(bytesDiffCount.Count <= 2);
                if (response)
                {
                    j++;
                    for (var i = 0; i < 223; i++)
                    {
                        Assert.AreEqual(data[i], modifiedData[i]);
                    }
                }
            }
        }
        private void ProcessImageTransmissionSimulation(Params parms, int iterator, int fileOrder)
        {
            var errorMeasureValue = parms.ErrorMeasureValue;
            var correctionBytesCount = parms.CorrectionBytesCount;
            var decoderType = parms.RsDecoderType;
            var errorProviderType = parms.RsErrorProviderType;
            var orderNo = parms.OrderNo;
            const int blockSize = 255;
            var tries = 0;

            object clonedImage = null;
            while (clonedImage == null && tries < 5)
            {
                try
                {
                    clonedImage = iterator % 2 == 0 ? _originalImage0.Clone() : _originalImage1.Clone();
                }
                catch (InvalidOperationException ioe)
                {
                    tries++;
                }
            }
            if (tries >= 5)
                return;

            var image = (Bitmap)clonedImage;
            var stopwatch = new Stopwatch();
            var reedSolomon = new ReedSolomon(correctionBytesCount);
            var data = ImageProcessing.GetRawBytesFromRGBImage(image);

            stopwatch.Reset();
            stopwatch.Start();
            var modifiedData = reedSolomon.EncodeRawBytesArray(data);
            stopwatch.Stop();

            var errorsCount = 0;
            switch (errorProviderType)
            {
                case ErrorProviderType.ErrorsTotalCount:
                    errorsCount = ErrorProvider.FillInErrors(modifiedData, errorMeasureValue);
                    break;
                case ErrorProviderType.PercentageOfErrors:
                    errorsCount = ErrorProvider.FillInPercentageOfErrors(modifiedData, errorMeasureValue);
                    break;
                case ErrorProviderType.SingleErrorsForEveryBlock:
                    errorsCount = ErrorProvider.FillInErrorsForEveryBlock(modifiedData, errorMeasureValue, blockSize);
                    break;
                case ErrorProviderType.ErrorsWithProbability:
                    errorsCount = ErrorProvider.FillInErrorsWithProbability(modifiedData, (double)errorMeasureValue / 100);
                    break;
                case ErrorProviderType.GroupErrorsForEveryBlock:
                    errorsCount = ErrorProvider.FillInGroupErrorsForEveryBlock(modifiedData, errorMeasureValue, blockSize);
                    break;
            }

            stopwatch.Start();
            if (decoderType.Equals(DecoderType.Extended))
            {
                reedSolomon.DecodeRawBytesArray(modifiedData, data);
            }
            else
            {
                reedSolomon.SimplyDecodeRawBytesArray(modifiedData, data);
            }
            stopwatch.Stop();

            var processedImage = ImageProcessing.GetRGBImageFromRawBytes(image, data);

            var diffCount = 0;
            try
            {
                Bitmap diffImage;
                diffCount = ImageProcessing.Compare(processedImage, image, out diffImage);
            }
            catch (InvalidOperationException ioe)
            {
                var singleResultException = new List<int>
                {
                    errorMeasureValue,
                    (int)errorProviderType,
                    correctionBytesCount,
                    (int)decoderType,
                    0,
                    0,
                    0,
                    orderNo,
                    fileOrder
                };

                _results.TryAdd(singleResultException);
                return;
            }

            var singleResult = new List<int>
            {
                errorMeasureValue,
                (int)errorProviderType,
                correctionBytesCount,
                (int)decoderType,
                errorsCount,
                (int)stopwatch.ElapsedMilliseconds,
                diffCount,
                orderNo,
                fileOrder
            };
            _results.TryAdd(singleResult);
        }
Exemplo n.º 12
0
        private void ProcessImageSimpleEncoding()
        {
            var data = ImageProcessing.GetRawBytesFromRGBImage(_originalImage);
            var correctionBytes = int.Parse(textBox1.Text);

            var reedSolomon = new ReedSolomon(correctionBytes);
            var modifiedData = reedSolomon.EncodeRawBytesArray(data);

            textBox7.Text = SimulateTransmissionWithErrors(modifiedData).ToString();

            reedSolomon.SimplyDecodeRawBytesArray(modifiedData, data);

            _processedSimpleImage = ImageProcessing.GetRGBImageFromRawBytes(_originalImage, data);
        }