/// <summary> /// serialize a templace class in a file /// </summary> /// <param name="filename">the path of the file</param> /// <param name="tc">the template class to serialize</param> public static void SerializeTemplateClass(string filename, TemplateClass tc) { Stream stream = File.Open(filename, FileMode.Create); BinaryFormatter bFormatter = new BinaryFormatter(); bFormatter.Serialize(stream, tc); stream.Close(); }
/// <summary> /// compare a template and all the templates in a templateClass /// </summary> /// <param name="tc">the template class</param> /// <param name="sample">the template to test</param> /// <returns>a template description of the template found</returns> internal static FoundTemplateDesc CompareTemplates(TemplateClass tc, Template sample) { //int maxInterCorrelationShift = (int)(templateSize * maxRotateAngle / Math.PI); //maxInterCorrelationShift = Math.Min(templateSize, maxInterCorrelationShift+13); double rate = 0; double angle = 0; Complex interCorr = default(Complex); Template foundTemplate = null; foreach (var template in tc.templates) { // if (Math.Abs(sample.autoCorrDescriptor1 - template.autoCorrDescriptor1) > maxACFDescriptorDeviation) continue; if (Math.Abs(sample.autoCorrDescriptor2 - template.autoCorrDescriptor2) > maxACFDescriptorDeviation) continue; if (Math.Abs(sample.autoCorrDescriptor3 - template.autoCorrDescriptor3) > maxACFDescriptorDeviation) continue; if (Math.Abs(sample.autoCorrDescriptor4 - template.autoCorrDescriptor4) > maxACFDescriptorDeviation) continue; // double r = 0; if (checkACF) { r = template.autoCorr.NormDot(sample.autoCorr).Norm; if (r < minACF) continue; } if (checkICF) { interCorr = template.contour.InterCorrelation(sample.contour).FindMaxNorm(); r = interCorr.Norm / (template.contourNorma * sample.contourNorma); if (r < minICF) continue; if (Math.Abs(interCorr.Angle) > maxRotateAngle) continue; } if (template.preferredAngleNoMore90 && Math.Abs(interCorr.Angle) >= Math.PI / 2) continue;//unsuitable angle //find max rate if (r >= rate) { rate = r; foundTemplate = template; angle = interCorr.Angle; } } //ignore antipatterns if (foundTemplate != null && foundTemplate.name == antiPatternName) foundTemplate = null; // if (foundTemplate != null) return new FoundTemplateDesc() { template = foundTemplate, rate = rate, sample = sample, angle = angle, name = tc.name }; else return null; }