public Bitmap GetBinaryImage(Bitmap bitmap) { var initialBytes = FilterHelper.BitmapToArray(bitmap); var otsuThreshold = OtsuThreshold(initialBytes); var iterationProgress = (double)100 / (bitmap.Width * bitmap.Height); double progress = 0; for (var i = 0; i < initialBytes.GetLength(0); i++) { for (var j = 0; j < initialBytes.GetLength(1); j++) { if (initialBytes[i, j] < otsuThreshold) { initialBytes[i, j] = 0; } else { initialBytes[i, j] = 255; } progress += iterationProgress; ProgressBarHelper.UpdateProgresssBar(progress, _progressDelegate); } } return(FilterHelper.ArrayToBitmap(initialBytes)); }
public Bitmap GetBinaryImage(Bitmap bitmap) { var result = new Bitmap(bitmap.Width, bitmap.Height); var bytes = FilterHelper.BitmapToArray(bitmap); var iterationProgress = (double)50 / (bitmap.Width * bitmap.Height); var innerIterationProgress = (double)50 / (bitmap.Width * bitmap.Height); double progress = 0; for (var i = 0; i < bitmap.Width; i++) { for (var j = 0; j < bitmap.Height; j++) { var pixel = bytes[i, j]; var pixelIntensity = SurroundedValue(i, j, bytes); progress += innerIterationProgress; ProgressBarHelper.UpdateProgresssBar(progress, _progressDelegate); result.SetPixel(i, j, pixel > pixelIntensity - 5 ? Color.White : Color.Black); progress += iterationProgress; ProgressBarHelper.UpdateProgresssBar(progress, _progressDelegate); } } return(result); }
public Bitmap GetFilteredImage(Bitmap bitmap) { var result = new Bitmap(bitmap); var iterationProgress = (double)100 / (bitmap.Width * bitmap.Height); double progress = 0; var bytes = FilterHelper.BitmapToArray(bitmap); for (int i = _size; i < bitmap.Width - _size; i++) { for (int j = _size; j < bitmap.Height - _size; j++) { var res = new List <int>(); var redList = new List <int>(); var greenList = new List <int>(); var blueList = new List <int>(); for (int ii = -_size; ii < _size + 1; ii++) { for (int jj = -_size; jj < _size + 1; jj++) { if (_colored) { var pixelColored = bitmap.GetPixel(i + ii, j + jj); redList.Add(pixelColored.R); greenList.Add(pixelColored.G); blueList.Add(pixelColored.B); } else { res.Add(bytes[i + ii, j + jj]); } } } if (_colored) { redList.Sort(); greenList.Sort(); blueList.Sort(); var red = redList[_size]; var green = greenList[_size]; var blue = blueList[_size]; var color = Color.FromArgb(bitmap.GetPixel(i, j).A, FilterHelper.SetColor(red), FilterHelper.SetColor(green), FilterHelper.SetColor(blue)); result.SetPixel(i, j, color); } else { res.Sort(); result.SetPixel(i, j, Color.FromArgb(res[_size], res[_size], res[_size])); } progress += iterationProgress; ProgressBarHelper.UpdateProgresssBar(progress, _progressDelegate); } } return(result); }
public Bitmap GetFilteredImage(Bitmap bitmap) { if (_size % 2 == 0) { _size++; } var gausList = new List <double>(); var u = -1; for (int i = 0; i <= _size / 2 + 1; i++) { u += i; } for (int i = 0; i <= u; i++) { gausList.Add(1 / (Math.Sqrt(Math.PI * 2 * u)) * Math.Exp(-((double)(i * i)) / (2 * u))); } var matrix = new double[_size, _size]; int k = 1; int c = _size / 2; matrix[c, c] = gausList[0]; for (int i = 1; i <= c; i++) { for (int j = 0; j <= i; j++) { matrix[c + i, c + j] = gausList[k]; matrix[c + i, c - j] = gausList[k]; matrix[c - i, c + j] = gausList[k]; matrix[c - i, c - j] = gausList[k]; matrix[c + j, c + i] = gausList[k]; matrix[c - j, c + i] = gausList[k]; matrix[c + j, c - i] = gausList[k]; matrix[c - j, c - i] = gausList[k]; k++; } } double sum = 0; for (int i = 0; i < _size; i++) { for (int j = 0; j < _size; j++) { sum += matrix[i, j]; } } var dst = new Bitmap(bitmap); int xLength = matrix.GetLength(0) / 2; int yLength = matrix.GetLength(1) / 2; var iterationProgress = (double)100 / (bitmap.Width * bitmap.Height); double progress = 0; var bytes = FilterHelper.BitmapToArray(bitmap); for (int i = xLength; i < bitmap.Width - xLength; i++) { for (int j = yLength; j < bitmap.Height - yLength; j++) { int res = 0; int red = 0, green = 0, blue = 0; for (int ii = -xLength; ii < xLength + 1; ii++) { for (int jj = -yLength; jj < yLength + 1; jj++) { if (_colored) { var pixelColored = bitmap.GetPixel(i + ii, j + jj); red += (int)(pixelColored.R * matrix[ii + xLength, jj + yLength]); green += (int)(pixelColored.G * matrix[ii + xLength, jj + yLength]); blue += (int)(pixelColored.B * matrix[ii + xLength, jj + yLength]); } else { byte pixel = bytes[i + ii, j + jj]; res += (int)(pixel * matrix[ii + xLength, jj + yLength]); } } } if (_colored) { red = (int)(red / sum); green = (int)(green / sum); blue = (int)(blue / sum); var color = Color.FromArgb(bitmap.GetPixel(i, j).A, FilterHelper.SetColor(red), FilterHelper.SetColor(green), FilterHelper.SetColor(blue)); dst.SetPixel(i, j, color); } else { res = (int)(res / sum); dst.SetPixel(i, j, Color.FromArgb(res, res, res)); } progress += iterationProgress; ProgressBarHelper.UpdateProgresssBar(progress, _progressDelegate); } } return(dst); }