2016-09-23 21 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搜索等)網絡充滿了信息。

基本思想: 分離從由分割皮膚摩爾 查找一羣組經連接的像素該組的 計算特徵的(形心,周長,面積,...)