2016-09-23 105 views
0

我试图用HoughCircles得到胎记。EmguCV(OpenCV)试图找到胎记(痣)

我的结果至今: enter image description here

我的代码:

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);       
} 

有什么东西在那里,我能为取得更好的成绩?

回答

0

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

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

其基本上用于找到圆圈蛮力方法。您将所有轮廓像素都以给定的半径围绕它绘制一个圆。 您可以对半径范围进行此操作。图像中的圆圈将产生以下效果: 对于正确的半径,要找到的圆的周长上该半径的所有圆将与该圆的中心相交。

如果图像中没有“好”圆圈,则此方法无法工作,因为您的中心不会有多个交叉点。

你的痣几乎没有圈子。有几个地方它可能工作正常,但其中大多数不会给你好或任何结果(你已经注意到)

我建议你使用某种类型的斑点检测算法(连接组件标签,标签,blob搜索等)网络充满了信息。

基本思想: 分离从由分割皮肤摩尔 查找一群组经连接的像素该组的 计算特征的(形心,周长,面积,...)