我希望您的建议是为什么代码可能会变得无法响应以及如何解决它.
我正在使用Accord.NET来比较图像.我的项目的第一阶段是比较两个图像,一个观察图像和一个模型图像,并确定它们有多相似;第二种方法是将观察到的图像与我的整个数据库进行比较,以根据模型的分类方式确定观察到的图像最有可能是什么.现在我专注于第一个.我最初尝试使用ExhaustiveTemplateMatching.ProcessImage()但它不符合我的需要.现在,我正在使用SURF.这是我的代码:
public class ProcessImage { public static void Similarity(System.IO.Stream model,System.IO.Stream observed,out float similPercent) { Bitmap bitModel = new Bitmap(model); Bitmap bitObserved = new Bitmap(observed); // For method Difference,see http://www.aforgenet.com/framework/docs/html/673023f7-799a-2ef6-7933-31ef09974dde.htm // Inspiration for this process: https://www.youtube.com/watch?v=YHT46f2244E // Greyscale class http://www.aforgenet.com/framework/docs/html/d7196dc6-8176-4344-a505-e7ade35c1741.htm // Convert model and observed to greyscale Grayscale filter = new Grayscale(0.2125,0.7154,0.0721); // apply the filter to the model Bitmap greyModel = filter.Apply(bitModel); // Apply the filter to the observed image Bitmap greyObserved = filter.Apply(bitObserved); int modelPoints = 0,matchingPoints = 0; /* * This doesn't work. Images can have different sizes // For an example,https://thecsharper.com/?p=94 // Match var tm = new ExhaustiveTemplateMatching(similarityThreshold); // Process the images var results = tm.ProcessImage(greyModel,greyObserved); */ using (SpeededUpRobustFeaturesDetector detector = new SpeededUpRobustFeaturesDetector()) { List<SpeededUpRobustFeaturePoint> surfModel = detector.ProcessImage(greyModel); modelPoints = surfModel.Count(); List<SpeededUpRobustFeaturePoint> surfObserved = detector.ProcessImage(greyObserved); KNearestNeighborMatching matcher = new KNearestNeighborMatching(5); var results = matcher.Match(surfModel,surfObserved); matchingPoints = results.Length; } // Determine if they represent the same points // Obtain the pairs of associated points,we determine the homography matching all these pairs // Compare the results,0 indicates no match so return false if (matchingPoints <= 0) { similPercent = 0.0f; } similPercent = (matchingPoints * 100) / modelPoints; } }
到目前为止,我得到了点列表,但是当匹配代码时似乎没有响应.
我在用户发布位图后从ASP.NET网页调用上面的代码.这是代码,如果它可能有所帮助:
public ActionResult Compare(int id) { ViewData["SampleID"] = id; return View(); } [HttpPost] public ActionResult Compare(int id,HttpPostedFileBase uploadFile) { Sample model = _db.Sample_Read(id); System.IO.Stream modelStream = null; float result = 0; _db.Sample_Stream(model.FileId,out modelStream); ImgProc.ProcessImage.Similarity(modelStream,uploadFile.InputStream,out result); ViewData["SampleID"] = id; ViewData["match"] = result; return View(); }
解决方法
问题是我的电脑.经过一段时间处理后,计算结束.
谢谢,