public static YCbCrPixel Convert(RgbPixel rgb) { var yChannel = 0.299 * rgb.R + 0.587 * rgb.G + 0.114 * rgb.B; var cbChannel = -0.168935 * rgb.R - 0.331665 * rgb.G + 0.50059 * rgb.B; var crChannel = 0.499813 * rgb.R - 0.418531 * rgb.G - 0.081282 * rgb.B; var yCbCr = new YCbCrPixel(yChannel, cbChannel, crChannel); return(yCbCr); }
public void DecodeImage(IDownSampler downSampler, QuantizeMethod quantizeMethod, int quantizeParameter) { GetQuantizeds(quantizeMethod, quantizeParameter, out var quantizedY, out var quantizedCb, out var quantizedCr); var iQuantizedY = new double[256, 256]; var iQuantizedCb = new double[128, 128]; var iQuantizedCr = new double[128, 128]; if (quantizeMethod == QuantizeMethod.ZigZag) { iQuantizedY = quantizedY.GetIQuantizeUsingZigZagMethod(quantizeParameter); iQuantizedCb = quantizedCb.GetIQuantizeUsingZigZagMethod(quantizeParameter); iQuantizedCr = quantizedCr.GetIQuantizeUsingZigZagMethod(quantizeParameter); } if (quantizeMethod == QuantizeMethod.Method2) { iQuantizedY = quantizedY.GetIQuantizeUsingMethod2(quantizeParameter); iQuantizedCb = quantizedCb.GetIQuantizeUsingMethod2(quantizeParameter); iQuantizedCr = quantizedCr.GetIQuantizeUsingMethod2(quantizeParameter); } if (quantizeMethod == QuantizeMethod.JpegQuality) { iQuantizedY = quantizedY.GetIQuantizeUsingJpegQualityMethod(quantizeParameter); iQuantizedCb = quantizedCb.GetIQuantizeUsingJpegQualityMethod(quantizeParameter); iQuantizedCr = quantizedCr.GetIQuantizeUsingJpegQualityMethod(quantizeParameter); } var iDctY = dct.GetIDiscreteCosineTransform(iQuantizedY); var iDctCb = dct.GetIDiscreteCosineTransform(iQuantizedCb); var iDctCr = dct.GetIDiscreteCosineTransform(iQuantizedCr); var upSampledCb = downSampler.GetUpSampledMatrix(iDctCb); var upSampledCr = downSampler.GetUpSampledMatrix(iDctCr); var yCbCrPixels = new YCbCrPixel[256, 256]; for (int i = 0; i < 256; i++) { for (int j = 0; j < 256; j++) { yCbCrPixels[i, j] = new YCbCrPixel { Y = (byte)iDctY[i, j], Cb = (byte)upSampledCb[i, j], Cr = (byte)upSampledCr[i, j] }; } } ReconstructedImage = GetBitmapFromYCbCrPixels(yCbCrPixels); }
private YCbCrPixel[,] GetYCbCrPixelsFromImage(Bitmap image) { var pixels = new YCbCrPixel[256, 256]; for (int i = 0; i < 256; i++) { for (int j = 0; j < 256; j++) { pixels[i, j] = pixelMapper.GetYCbCrPixelFromRgb(image.GetPixel(i, j)); } } return(pixels); }
public static YCbCrPixel[,] Convert(RgbPixel[,] matrix) { var height = matrix.GetLength(0); var width = matrix.GetLength(1); var convertedMatrix = new YCbCrPixel[height, width]; for (var i = 0; i < height; i++) { for (var j = 0; j < width; j++) { convertedMatrix[i, j] = RgbToYCbCrConverter.Convert(matrix[i, j]); } } return(convertedMatrix); }
public Color GetRgbFromYCbCrPixel(YCbCrPixel yCbCrPixel) { //var red = yCbCrPixel.Y + 0.000 * (yCbCrPixel.Cb - 128) + 1.371 * (yCbCrPixel.Cr - 128); //var green = yCbCrPixel.Y - 0.336 * (yCbCrPixel.Cb - 128) - 0.698 * (yCbCrPixel.Cr - 128); //var blue = yCbCrPixel.Y + 1.732 * (yCbCrPixel.Cb - 128) + 0.000 * (yCbCrPixel.Cr - 128); var red = yCbCrPixel.Y + 1.402 * (yCbCrPixel.Cr - 128); var green = yCbCrPixel.Y - 0.344136 * (yCbCrPixel.Cb - 128) - 0.714136 * (yCbCrPixel.Cr - 128); var blue = yCbCrPixel.Y + 1.772 * (yCbCrPixel.Cb - 128); var normalizedRed = Normalize(red, 0, 255); var normalizedGreen = Normalize(green, 0, 255); var normalizedBlue = Normalize(blue, 0, 255); return(Color.FromArgb(normalizedRed, normalizedGreen, normalizedBlue)); }