2013-04-03 6 views
7

मेरे पास एक छवि है और इसमें कुछ आकार हैं। मैंने आटा लाइनों का उपयोग करने के साथ लाइनों का पता लगाया। मैं कैसे पता लगा सकता हूं कि कौन सी रेखाएं समानांतर हैं?पायथन ओपनसीवी समांतर रेखाओं का पता लगाता है

+0

, आप जो houghspace उत्पादन छवि प्रदान करता है houghlines की scipy संस्करण का उपयोग कर सकते हैं: यहाँ देखें] (http://scikit-image.org/docs/dev/auto_examples/plot_line_hough_transform.html)। फिर आप स्वतंत्र धुरी (थेटा या 'एक्स') और आश्रित अक्ष (rho या 'y') को फ्लिप कर सकते हैं जैसे कि थेटा अब निर्भर अक्ष है। इस हौ स्पेस छवि को थ्रेसहोल्ड करने के बाद (सबसे अधिक संभावना वाले रेखाओं के अनुरूप (rho, theta) के सबसे तीव्र धब्बे प्राप्त करने के लिए), आप डेटा पर एक क्षैतिज रेखा फिट कर सकते हैं: theta = constant (y = mx + b कोई ढलान नहीं)। आपके समाधान के लिए – chase

उत्तर

13

कार्तीय निर्देशांक में एक लाइन का समीकरण:

y = कश्मीर * x + b

दो लाइनें y = k1 * x + बी 1, y = k2 * x + b2 हैं समानांतर, अगर k1 = k2।

तो आपको प्रत्येक ज्ञात रेखा के लिए गुणांक की गणना करने की आवश्यकता है।

आदेश में के लिए विशिष्ट रूप एक लाइन आप दो अंक कि लाइन के हैं के निर्देशांक जानने की जरूरत के समीकरण की पहचान।

HoughLines (С ++) के साथ पाया लाइनों होने के बाद:

vector<Vec2f> lines; 
HoughLines(dst, lines, 1, CV_PI/180, 100, 0, 0); 

आप वेक्टर लाइनों, जो ध्रुवीय निर्देशांक में पता चला लाइनों के मापदंडों (आर, थीटा) संग्रहीत करता है। आप उन्हें कार्तीय निर्देशांक में स्थानांतरित करने की आवश्यकता: C++

यहाँ उदाहरण:

for(size_t i = 0; i < lines.size(); i++) 
{ 
    float rho = lines[i][0], theta = lines[i][1]; 
    Point pt1, pt2; 
    double a = cos(theta), b = sin(theta); 
    double x0 = a*rho, y0 = b*rho; 
    pt1.x = cvRound(x0 + 1000*(-b)); //the first point 
    pt1.y = cvRound(y0 + 1000*(a)); //the first point 
    pt2.x = cvRound(x0 - 1000*(-b)); //the second point 
    pt2.y = cvRound(y0 - 1000*(a)); //the second point 
} 

के बाद एक लाइन के इन दो अंक मिले होने आप अपने समीकरण गणना कर सकते हैं।

+0

thx बहुत कुछ। – vtokmak

+3

क्या यह पर्याप्त जांच है कि पहचान लाइनों के लिए समानता समान हैं या नहीं? क्या हम कह सकते हैं कि थेटा मान समानांतर रेखाओं के बराबर हैं? – vtokmak

+0

मुझे लगता है कि थेटा मानों की जांच पर्याप्त जांच होनी चाहिए। –

1

हौफलाइन अपने परिणाम ध्रुवीय निर्देशांक में लौटाते हैं। तो बस कोण के लिए दूसरा मान देखें। इस, अजगर में किया जाता है के रूप में टैग में कहा गया है एक्स में बदलने का कोई ज़रूरत नहीं करने के लिए, वाई

def findparallel(lines): 

lines1 = [] 
for i in range(len(lines)): 
    for j in range(len(lines)): 
     if (i == j):continue 
     if (abs(lines[i][1] - lines[j][1]) == 0):   
      #You've found a parallel line! 
      lines1.append((i,j)) 


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