//double L, u, v; public Quantize() { for (int i = 0; i < 160; i++) { LuvIndex[i] = new LUVClass(); } }
public void createMatrix() { int N = 159; similarityMatrix = new double[N, N]; Quantize q = new Quantize(); for (int index1 = 0; index1 < N; index1++) { for (int index2 = 0; index2 < N; index2++) { LUVClass luv1 = q.getLUVfromIndex(index1); LUVClass luv2 = q.getLUVfromIndex(index2); double distance = getEuclideanDistance(luv1, luv2); if (distance > tColor) { similarityMatrix[index1, index2] = 0; } else { similarityMatrix[index1, index2] = 1 - distance / tColor; } } } //return similarityMatrix; }
private LUVClass[,] getLuvMatrix(Bitmap img) { LUVClass[,] matrix = new LUVClass[img.Width, img.Height]; for (int i = 0; i < img.Width; i++) { for (int j = 0; j < img.Height; j++) { Color pixel = img.GetPixel(i, j); var myRgb = new Rgb { R = pixel.R, G = pixel.G, B = pixel.B }; var myLuv = myRgb.To <Luv>(); matrix[i, j] = new LUVClass(myLuv.L, myLuv.U, myLuv.V); } } return(matrix); }
private void initializeMaxDistance() { int N = 159; Quantize q = new Quantize(); double max = 0; for (int index1 = 0; index1 < N; index1++) { for (int index2 = 0; index2 < N; index2++) { LUVClass luv1 = q.getLUVfromIndex(index1); LUVClass luv2 = q.getLUVfromIndex(index2); double distance = getEuclideanDistance(luv1, luv2); if (distance > max) { max = distance; } } } dMax = max; tColor = p * dMax; }
private LUVClass[,] blurredMatrix(LUVClass[,] luv) { LUVClass[,] result = new LUVClass[width, height]; for (int i = 1; i < width - 1; i += 2) { for (int j = 1; j < height - 1; j += 2) { double aveL = 0.0; double aveU = 0.0; double aveV = 0.0; aveL += luv[i - 1, j - 1].L + luv[i, j - 1].L + luv[i + 1, j - 1].L + luv[i - 1, j].L + luv[i, j].L + luv[i + 1, j].L + luv[i - 1, j + 1].L + luv[i, j + 1].L + luv[i + 1, j + 1].L; aveU += luv[i - 1, j - 1].u + luv[i, j - 1].u + luv[i + 1, j - 1].u + luv[i - 1, j].u + luv[i, j].u + luv[i + 1, j].u + luv[i - 1, j + 1].u + luv[i, j + 1].u + luv[i + 1, j + 1].u; aveV += luv[i - 1, j - 1].v + luv[i, j - 1].v + luv[i + 1, j - 1].v + luv[i - 1, j].v + luv[i, j].v + luv[i + 1, j].v + luv[i - 1, j + 1].v + luv[i, j + 1].v + luv[i + 1, j + 1].v; aveL /= 9; aveU /= 9; aveV /= 9; LUVClass myLuv = new LUVClass(aveL, aveU, aveV); //Console.WriteLine("ij" + i + "," + j); result[i - 1, j - 1] = myLuv; result[i, j - 1] = myLuv; result[i + 1, j - 1] = myLuv; result[i - 1, j] = myLuv; result[i, j] = myLuv; result[i + 1, j] = myLuv; result[i - 1, j + 1] = myLuv; result[i, j + 1] = myLuv; result[i + 1, j + 1] = myLuv; } } if (width % 2 == 0) { int hei = height; if (height % 2 == 0) { hei -= 1; } for (int i = 0; i < hei; i++) { result[width - 1, i] = result[width - 2, i]; } } if (height % 2 == 0) { for (int j = 0; j < width; j++) { result[j, height - 1] = result[j, height - 2]; } if (width % 2 == 0) { result[width - 1, height - 1] = result[width - 1, height - 2]; } } //Console.WriteLine(result[125, 83]+ " "+ result[126, 83] + " " + result[127, 83]); //Console.WriteLine(result[125, 84] + " " + result[126, 84] + " " + result[127, 84]); return(result); }
private double getEuclideanDistance(LUVClass l1, LUVClass l2) { double val = Math.Sqrt(Math.Pow(l1.L - l2.L, 2) + Math.Pow(l1.u - l2.u, 2) + Math.Pow(l1.v - l2.v, 2)); return(val); }