【问题标题】:EmguCV(OpenCV) trying to find a birthmarks (mole)EmguCV(OpenCV)试图找到胎记(痣)
【发布时间】:2016-09-23 14:01:46
【问题描述】:

我正在尝试使用 HoughCircles 获取胎记。

到目前为止我的结果:

我的代码:

Mat imgDest = new Mat(imagePath, LoadImageType.Color);
CvtColor(imgDest, imgDest, ColorConversion.Bgr2Gray);
MedianBlur(imgDest, imgDest, 7);
//nice try but not so good... :(
//CvInvoke.Threshold(imgDest, imgDest, 120, 255, ThresholdType.Binary);
//CvInvoke.Canny(imgDest, imgDest, 40, 200);

var circles = CvInvoke.HoughCircles(imgDest, HoughType.Gradient, 1, imgDest.Rows/8, 60, 18);
foreach(var circle in circles)
{
   CvInvoke.Circle(imgDest, new Point((int)circle.Center.X, (int)circle.Center.Y), (int)circle.Radius, new MCvScalar(255, 255, 0), 2);
   imgDest.Save(imageName);                        
}

我可以做些什么来获得更好的结果?

【问题讨论】:

    标签: c# opencv image-processing emgucv


    【解决方案1】:

    请阅读 Hough 变换如何适用于圆。然后你就会明白它不适合这个任务。

    https://en.wikipedia.org/wiki/Circle_Hough_Transform

    它基本上是一种寻找圆圈的蛮力方法。您获取每个轮廓像素并在其周围绘制一个具有给定半径的圆圈。 您对一系列半径执行此操作。图像中的圆圈将具有以下效果: 对于正确的半径,您要查找的圆周上该半径的所有圆都将在该圆的中心相交。

    如果您的图像中没有“好”圆圈,则此方法无法使用,因为您不会在其中心有很多交叉点。

    你的痣几乎不是圆形的。有一些可能工作正常,但大多数不会给你带来好的结果或任何结果(正如你所注意到的)

    我建议你使用某种 blob 检测算法(连接组件标记、标记、blob 搜索等),网络上充满了信息。

    基本思路: 通过分割将痣与皮肤分开 找到一组连接的像素 计算该组的特征(质心、周长、面积……)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-13
      • 1970-01-01
      • 1970-01-01
      • 2012-09-17
      • 1970-01-01
      • 1970-01-01
      • 2018-06-21
      • 2011-02-20
      相关资源
      最近更新 更多