コード例 #1
0
        private void proccessButton_Click(object sender, RoutedEventArgs e)
        {
            resultsGrid.Visibility = System.Windows.Visibility.Visible;



            ImageProcessing process = new ImageProcessing();

            byte[] processedImageBytes;
            byte[] grayscale = process.setGrayscale(originalImageBytes);

            ArrayData inputData = new ArrayData(grayscale, originalImage.PixelWidth, originalImage.PixelHeight);

            timer.Start();
            var outputData = process.houghTransform(inputData, 360, 360, 20);

            processedImageBytes = outputData.dataArray;
            timer.Stop();
            timeElapsed1.Content = "Time: " + timer.ElapsedMilliseconds + " ms";
            blurImage1.Source    = ImageConvertor.ByteArrayToImage(processedImageBytes, outputData.width, outputData.height, 1);
        }
コード例 #2
0
ファイル: MainWindow.xaml.cs プロジェクト: ivlukin/seminars
        private void proccessButton_Click(object sender, RoutedEventArgs e)
        {
            resultsGrid.Visibility = System.Windows.Visibility.Visible;



            ImageProcessing process = new ImageProcessing();
            byte[] processedImageBytes;
            byte[] grayscale = process.setGrayscale(originalImageBytes);

            ArrayData inputData = new ArrayData(grayscale, originalImage.PixelWidth, originalImage.PixelHeight);

            timer.Start();
            var outputData = process.houghTransform(inputData, 360, 360, 20);
            processedImageBytes = outputData.dataArray;
            timer.Stop();
            timeElapsed1.Content = "Time: " + timer.ElapsedMilliseconds + " ms";
            blurImage1.Source = ImageConvertor.ByteArrayToImage(processedImageBytes, outputData.width, outputData.height, 1);



        }
コード例 #3
0
        public ArrayData houghTransform(ArrayData originalImage, int thetaAxisSize, int rAxisSize, int minContrast)
        {
            int width         = originalImage.width;
            int height        = originalImage.height;
            int maxRadius     = (int)Math.Ceiling(hypotenuse(width, height));
            int halfRAxisSize = rAxisSize >> 1;
            var outputImage   = new ArrayData(thetaAxisSize, rAxisSize);

            // x output ranges from 0 to pi
            // y output ranges from -maxRadius to maxRadius
            double[] sinTable = new double[thetaAxisSize];
            double[] cosTable = new double[thetaAxisSize];
            for (int theta = thetaAxisSize - 1; theta >= 0; theta--)
            {
                double thetaRadians = theta * Math.PI / thetaAxisSize;
                sinTable[theta] = Math.Sin(thetaRadians);
                cosTable[theta] = Math.Cos(thetaRadians);
            }

            for (int y = height - 1; y >= 0; y--)
            {
                for (int x = width - 1; x >= 0; x--)
                {
                    if (originalImage.contrast(x, y, minContrast))
                    {
                        for (int theta = thetaAxisSize - 1; theta >= 0; theta--)
                        {
                            double r       = cosTable[theta] * x + sinTable[theta] * y;
                            int    rScaled = (int)Math.Round(r * halfRAxisSize / maxRadius) + halfRAxisSize;
                            outputImage.accumulate(theta, rScaled, 1);
                        }
                    }
                }
            }
            return(outputImage);
        }
コード例 #4
0
ファイル: ImageProcessing.cs プロジェクト: ivlukin/seminars
        public ArrayData houghTransform(ArrayData originalImage, int thetaAxisSize, int rAxisSize, int minContrast)
        {
            int width = originalImage.width;
            int height = originalImage.height;            
            int maxRadius = (int)Math.Ceiling(hypotenuse(width, height));
            int halfRAxisSize = rAxisSize >> 1;
            var outputImage = new ArrayData(thetaAxisSize, rAxisSize);
            // x output ranges from 0 to pi
            // y output ranges from -maxRadius to maxRadius
            double[] sinTable = new double[thetaAxisSize];
            double[] cosTable = new double[thetaAxisSize];
            for (int theta = thetaAxisSize - 1; theta >= 0; theta--)
            {
              double thetaRadians = theta * Math.PI / thetaAxisSize;
              sinTable[theta] = Math.Sin(thetaRadians);
              cosTable[theta] = Math.Cos(thetaRadians);
            }
 
            for (int y = height - 1; y >= 0; y--)
            {
              for (int x = width - 1; x >= 0; x--)
              {
                  if (originalImage.contrast(x, y, minContrast))
                {
                  for (int theta = thetaAxisSize - 1; theta >= 0; theta--)
                  {
                    double r = cosTable[theta] * x + sinTable[theta] * y;
                    int rScaled = (int)Math.Round(r * halfRAxisSize / maxRadius) + halfRAxisSize;
                    outputImage.accumulate(theta, rScaled, 1);
                  }
                }
              }
            }
            return outputImage;
          }