2012-03-29 19 views
5

में कार्तीय को मैं तो अजगर 2 डी सरणियों/छवियों ध्रुवीय, इस प्रक्रिया को करने के लिए बदलने के लिए, और बाद में उन्हें कार्तीय करने के लिए वापस बदलने चाहते हैं।तेजी से ध्रुवीय को कार्तीय अजगर

enter image description here

संख्या और छवियों के लिए मंद काफी बड़ी है तो मैं जाँच गया था कि क्या openCV एक तेजी से है और: निम्नलिखित ImajeJ Polar Transformer प्लगइन से परिणाम (नमूना कोड के संकेंद्रित वृत्त पर इस्तेमाल किया) है ऐसा करने का सरल तरीका।

मैंने सीवी के बारे में पढ़ा। CartToPolar और PolarToCart लेकिन मैं इसका उपयोग करने में विफल रहा। मैं बेहतर LogPolar समझता हूं जहां इनपुट और आउटपुट सरणी हैं, और जहां आप केंद्र, इंटरपोलेशन और इनवर्जन सेट कर सकते हैं (यानी CV_WARP_INVERSE_MAP)। क्या एक समान फैशन में CartToPolar/PolarToCart का उपयोग करने का कोई तरीका है?

import numpy as np 
    import cv 

    #sample 2D array that featues concentric circles 
    circlesArr = np.ndarray((512,512),dtype=np.float32) 
    for i in range(10,600,10): cv.Circle(circlesArr,(256,256),i-10,np.random.randint(60,500),thickness=4) 

    #logpolar 
    lp = np.ndarray((512,512),dtype=np.float32) 
    cv.LogPolar(circlesArr,lp,(256,256),100,cv.CV_WARP_FILL_OUTLIERS) 

    #logpolar Inverse 
    lpinv = np.ndarray((512,512),dtype=np.float32) 
    cv.LogPolar(lp,lpinv,(256,256),100, cv.CV_WARP_INVERSE_MAP + cv.CV_WARP_FILL_OUTLIERS) 

    #display images 
    from scipy.misc import toimage 
    toimage(lp, mode="L").show() 
    toimage(lpinv, mode="L").show() 

यह एक टोमोग्राफी के लिए है (सीटी) कार्यप्रवाह जहां छल्ले कलाकृतियों आसान बाहर किए जा सकता है अगर वे लाइनों के रूप में दिखाई देते हैं।

उत्तर

2

सीवी स्रोत कोड LinearPolar का उल्लेख करता है। ऐसा प्रतीत नहीं होता है, लेकिन ऐसा लगता है कि LogPolar के समान है। क्या आपने कोशिश की है?

+0

बहुत बहुत धन्यवाद! वास्तव में 'लिनियरपोलर' जो करता है वह करता है। दुर्भाग्यवश 'आयात सीवी' का उपयोग करके यह उपलब्ध नहीं था, लेकिन मैंने 'ओपनसीवी आयात सीवी' और फिर 'cv.cvLinearPolar' और' काम करने की कोशिश की। अगले दिन मैं बड़े डेटासेट में इसका प्रदर्शन करने की कोशिश करूंगा। धन्यवाद! – Papado

+0

ठंडा। मुझे आश्चर्य है कि यह क्यों दिखाई नहीं दे रहा है? मैं एक बग रिपोर्ट दर्ज करने का प्रयास करूंगा। –

+0

http://code.opencv.org/issues/1729 –

2

यहाँ का एक उदाहरण है लॉग-ध्रुवीय SciPy का उपयोग कर कार्यान्वित बदलने:

https://github.com/stefanv/supreme/blob/master/supreme/transform/transform.py#L51

यह देखते हुए कि यह केवल एक परिवर्तन समन्वय है, यह OpenCV संस्करण की तुलना में आपकी समस्या के लिए अनुकूल करने के लिए आसान होना चाहिए।

+0

प्रिय स्टीफन, आपको प्रतिक्रिया के लिए बहुत बहुत धन्यवाद। मैं अगले दिन आपके कार्यान्वयन की जांच और बेंचमार्क करूँगा। बीटीडब्ल्यू, मैं सुप्रीम ब्राउज़िंग समाप्त हो गया और बहुत दिलचस्प लगता है। क्या आपने इसके बारे में कोई लेख प्रकाशित किया है? – Papado

+0

@Papado मैंने आपकी टिप्पणी कभी नहीं देखी, लेकिन हाँ - arXiv और एक शोध प्रबंध पर एक पेपर है। वैसे, लॉग ध्रुवीय परिवर्तन अब 'skimage.transform.warp'' का उपयोग करके, कोड की लगभग 5 पंक्तियों में विज्ञान-छवि के शीर्ष पर लागू किया जा सकता है। –

3

ओपनसीवी के नवीनतम संस्करण एक समारोह cv2.linearPolar का समर्थन करता है। यह एक और समाधान हो सकता है जिसमें ओपनसीवी:

def polar2cart(r, theta, center): 

    x = r * np.cos(theta) + center[0] 
    y = r * np.sin(theta) + center[1] 
    return x, y 

def img2polar(img, center, final_radius, initial_radius = None, phase_width = 3000): 

    if initial_radius is None: 
     initial_radius = 0 

    theta , R = np.meshgrid(np.linspace(0, 2*np.pi, phase_width), 
          np.arange(initial_radius, final_radius)) 

    Xcart, Ycart = polar2cart(R, theta, center) 

    Xcart = Xcart.astype(int) 
    Ycart = Ycart.astype(int) 

    if img.ndim ==3: 
     polar_img = img[Ycart,Xcart,:] 
     polar_img = np.reshape(polar_img,(final_radius-initial_radius,phase_width,3)) 
    else: 
     polar_img = img[Ycart,Xcart] 
     polar_img = np.reshape(polar_img,(final_radius-initial_radius,phase_width)) 

    return polar_img 
+0

हाय एलेसेंड्रो- मैंने इस समस्या को भी इस तरह हल करने की कोशिश की, और मैंने इसी तरह के कोड को लिखा, हालांकि मैंने मेशग्रीड के बजाय लूप का उपयोग किया (मैंने इसे पहले कभी नहीं देखा है); क्या आप जानते हैं कि यह कितना अच्छा प्रदर्शन करता है? मेरा वीजीए छवि के लिए 1 एस के आदेश पर था - बहुत लंबा। – cjm2671

+0

ठीक है, मैंने आपके कोड का परीक्षण किया है और यह मेरे पुनरावर्तक समाधान की तुलना में बहुत तेज है- साथ ही मैंने कुछ नया सीखा- बहुत बहुत धन्यवाद! – cjm2671

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