/// <summary> /// load the set of rectangular filters /// </summary> /// <param name="filename"></param> /// <param name="rectangularFilter"></param> public static RectangularFilter LoadFilterSet(string filename) { RectangularFilter rectangularFilter = null; FileStream fstream = new FileStream(filename, FileMode.Open, FileAccess.Read); BinaryFormatter fmt = new BinaryFormatter(); rectangularFilter = (RectangularFilter)fmt.Deserialize(fstream); fstream.Close(); return(rectangularFilter); }
/// <summary> /// Calculate the LBP distance /// </summary> /// <param name="frontUIData"></param> public void LBPDistance(DataExchange frontUIData) { ParseConfig(frontUIData); List <Image> listFilteredImage = new List <Image>(); int nEl = frontUIData.ElementCount; ExchangeElement exEl = null; Image filteredImage = null; LBPFilter lbpFilter = new LBPFilter(1, 8, true, true); int i, j; for (i = 0; i < nEl; i++) { exEl = frontUIData.GetElement(i); filteredImage = GetData(exEl, lbpFilter); listFilteredImage.Add(filteredImage); } SparseFilterExample example; LBPIntegralHistogrom lbpHist1 = new LBPIntegralHistogrom(); LBPIntegralHistogrom lbpHist2 = new LBPIntegralHistogrom(); StrongClassifier strongClassifier = LoadClassifier(_classifierFileName); RectangularFilter rectangularFilters = LoadFilterSet(_rectangularFileName); List <int> listRectangularIndices = GetFilterIndex(strongClassifier); float[] score = new float[2]; double[] expScore = new double[2]; double[,] distanceMatrix = new double[nEl, nEl]; for (i = 0; i < nEl; i++) { lbpHist1.Create(listFilteredImage[i], lbpFilter.m_nFilterRange + 1); for (j = 0; j < i; j++) { lbpHist2.Create(listFilteredImage[j], lbpFilter.m_nFilterRange + 1); example = CreateFilterResponses(lbpHist1, lbpHist2, rectangularFilters, listRectangularIndices); score[0] = score[1] = 0; score = strongClassifier.Vote(example, score, _stage); expScore[0] = Math.Exp(Convert.ToDouble(score[0])); expScore[1] = Math.Exp(Convert.ToDouble(score[1])); distanceMatrix[i, j] = expScore[0] / (expScore[0] + expScore[1]) + 0.05; distanceMatrix[j, i] = distanceMatrix[i, j]; } } frontUIData.DistanceMatrix = distanceMatrix; }
/// <summary> /// Get the filter responses based on the LBP integral histogram /// </summary> private SparseFilterExample CreateFilterResponses(LBPIntegralHistogrom iHist1, LBPIntegralHistogrom iHist2, RectangularFilter rectangularFilters, List <int> listFilterIndices) { SparseFilterExample example = new SparseFilterExample(); System.Drawing.Rectangle rectangle; float[] hist1; float[] hist2; foreach (int indexFilters in listFilterIndices) { rectangle = rectangularFilters.m_listRectangles[indexFilters]; hist1 = LBPIntegralHistogrom.Histogram(iHist1, rectangle); hist2 = LBPIntegralHistogrom.Histogram(iHist2, rectangle); example.Add(indexFilters, ArrayUtils.ChiSquare(hist1, hist2)); } return(example); }