8

मैं आटा परिवर्तन का उपयोग कर सर्कल का पता लगाने की कोशिश कर रहा हूं।हाफ ट्रांसफॉर्म का उपयोग सर्किल का पता लगाने

enter image description here

मेरे वर्तमान कोड के साथ मैं नीचे

enter image description here

एक पता लगा सकते हैं लेकिन मैं चक्र मैं पता चला है अंदर ब्लैक होल लगाना चाहते हैं। हालांकि houghcircle विधि के बदलते पैरामीटर मेरी मदद नहीं की है। वास्तव में यह उन मंडलियों को मिला जो अस्तित्व में नहीं हैं।

enter image description here

इसके अलावा, मैं फसल चक्र मैंने पाया की कोशिश की और एक अन्य hough इस नए हिस्सा यह भी मेरी मदद नहीं की थी पर परिणत कर दिया है।

यहाँ मेरी कोड है

#include <stdio.h> 
#include <iostream> 
#include "opencv2/core/core.hpp" 
#include "opencv2/features2d/features2d.hpp" 
#include "opencv2/highgui/highgui.hpp" 
#include "opencv2/calib3d/calib3d.hpp" 
#include "opencv2/nonfree/nonfree.hpp" 
#include "opencv2/imgproc/imgproc.hpp" 
#include "opencv2/opencv.hpp" // needs imgproc, imgcodecs & highgui 
using namespace cv; 
using namespace std; 

int main(int argc, char** argv) 
{ 
    Mat src, circleroi; 

    /// Read the image 
    src = imread("/Users/Rodrane/Documents/XCODE/test/mkedenemeleri/alev/delikli/gainfull.jpg", 2); 


    /// Convert it to gray 
// cvtColor(src, src_gray, CV_BGR2GRAY); 
     /// Reduce the noise so we avoid false circle detection 
    GaussianBlur(src, src, Size(3, 3), 2, 2); 
    // adaptiveThreshold(src,src,255,CV_ADAPTIVE_THRESH_MEAN_C,CV_THRESH_BINARY,9,14); 
    vector<Vec3f> circles,circlessmall; 
// Canny(src, src, 50 , 70, 3); 
     /// Apply the Hough Transform to find the circles 
    HoughCircles(src, circles, CV_HOUGH_GRADIENT, 1, src.rows/8, 200, 100, 0, 0); 

    /// Draw the circles detected 
    for(size_t i = 0; i < circles.size(); i++) 
    { 
     Point center(cvRound(circles[i][0]), cvRound(circles[i][4])); 
     int radius = cvRound(circles[i][5]); 
     // circle center 
    circle(src, center, 3, Scalar(0,255,0), -1, 8, 0); 
     // circle outline 
     circle(src, center, radius, Scalar(0,255,0), 3, 8, 0); 

     circleroi = src(Rect(center.x - radius, // ROI x-offset, left coordinate 
             center.y - radius, // ROI y-offset, top coordinate 
             2*radius,   // ROI width 
             2*radius)); 



    //  imshow("Hough Circle Transform Demo", circleroi); 


} 

    resize(src, src, Size(src.cols/2, src.rows/2)); 
// threshold(circleroi, circleroi, 50, 255,CV_THRESH_BINARY); 

    // cout<<circleroi<<endl; 
    imshow("asd",src); 

    // imwrite("/Users/Rodrane/Documents/XCODE/test/mkedenemeleri/alev/cikti/deliksiz.jpg",circleroi); 


    waitKey(0); 
    return 0; 
} 

अद्यतन: hough चालाक अंदर मैं मैन्युअल रूप से मौसम यह चक्र पाता है या नहीं यह देखने के लिए चालाक इस्तेमाल किया कर रहा हूँ का उपयोग करता है के बाद से।

यहां कैनी (src, src, 100, 200,3) के साथ कैनी परिणाम; enter image description here

आप

+0

क्या आपने इसे थ्रेसहोल्डिंग के बिना आजमाया था? HoughCircles आंतरिक रूप से canny का उपयोग करता है ... – Micka

+0

छवि पर कोई सीमा नहीं है। रोशनी के लिए केवल गॉसियन धुंध लेकिन मैंने इसे भी अक्षम कर दिया है। –

+0

क्या आप छवि को छेद के साथ पोस्ट कर सकते हैं लेकिन ब्लैक सर्कल के बिना, कृपया। मैं पहली दो छवियों में कोई काला छेद नहीं देख सकता। – kkuilla

उत्तर

1

आप HoughCircles मापदंडों minDist = src.rows/8 है, जो काफी बड़ी है में से एक स्थापित कर रहे हैं धन्यवाद। docs व्याख्या करते हैं:

minDist - पता लगाया हलकों के केंद्रों के बीच न्यूनतम दूरी। यदि पैरामीटर बहुत छोटा है, तो एक सच्चे के अलावा कई पड़ोसी मंडल का गलत पता लगाया जा सकता है। यदि यह बहुत बड़ा है, तो कुछ मंडलियों को याद किया जा सकता है।

विधि दोनों चक्र है कि यह मिल रहा है और चक्र जो आप चाहते हैं, क्योंकि वे (src.rows/8 भीतर करने के लिए) लगभग एक ही केन्द्र है, बस अलग अलग आकार नहीं लौट सकते। यदि आप बड़े सर्कल को बाहर करने के लिए maxRadius को 30 के मान पर सेट करते हैं, तो क्या आपको वांछित छोटा सर्कल मिलता है?

+0

हाय, मैंने HoughCircles (src, मंडल, CV_HOUGH_GRADIENT, 1, src की कोशिश की है।पंक्तियां/16 (32,64), 200, 100, 0, 30); और सर्कल में से कोई भी वास्तव में –

+0

हम्म नहीं मिला है, शायद 'param2' बहुत बड़ा है। वहां छोटे मूल्यों की कोशिश करने लायक है। यदि यह काम नहीं करता है, तो आप 'कैनी (src, edges, 100, 200)' से आउटपुट 'किनारों' को प्रदर्शित कर सकते हैं और सुनिश्चित कर सकते हैं कि यह पहले स्थान पर आंतरिक सर्कल के किनारे को ढूंढ रहा है। –

+0

हाय, मुझे अपने प्रश्न को कैनी परिणामों के साथ अपडेट करने दें। –

संबंधित मुद्दे