/// <summary> /// Intialization Base Distinct color & Number of CLuster & 3D RGP /// </summary> /// <param name="Distinct">Distinct color</param> /// <param name="NO_Claster">Number of CLuster</param> /// <param name="Grid">3D RGP Color Values</param> public MedianCutHelper(ref List <RGBPixel> Distinct, int NO_Claster, RGBPixel[, ,] Grid) : base(NO_Claster, Distinct, Grid) { CubesList = new List <MedianCutHelper>(); MedianCutHelper a = new MedianCutHelper(li); CubesList.Add(a); RedLowBound = GreenLowBound = BlueLowBound = 0; RedHighBound = GreenHighBound = BlueHighBound = 0; }
/// <summary> /// [1] sort List of color in this Box And Split it /// [2]save tow box & his color /// </summary> /// <param name="Index">0 refer red , 1 refer Green ,2 refer to Blue </param> /// <param name="firstMedianCutCube">out element Like ref</param> /// <param name="secondMedianCutCube">out element Like ref</param> private void SplitAtMedian(Byte Index, out MedianCutHelper firstMedianCutCube, out MedianCutHelper secondMedianCutCube) { List <RGBPixel> colors = null; if (Index == 0) //Red { colors = colorList.OrderBy(RGBPixel => RGBPixel.red).ToList(); // NlogN } else if (Index == 1) //Green { colors = colorList.OrderBy(RGBPixel => RGBPixel.green).ToList(); // NlogN } else //blue { colors = colorList.OrderBy(RGBPixel => RGBPixel.blue).ToList();// NlogN } int medianIndex = colorList.Count / 2; firstMedianCutCube = new MedianCutHelper(colors.GetRange(0, medianIndex)); // O(N/2) secondMedianCutCube = new MedianCutHelper(colors.GetRange(medianIndex, colors.Count - medianIndex)); }