2012-06-17 14 views
6

Biraz sorun var vs Ben bir resmin kontur alırken, bu rakam olsun konturları çıkarabilirim, fakat yolu çıkarır çıkarmaz, eğri üzerinde 2 süreksiz alan olduğu için görüntüden geçen bu garip sekansları bırakır. Orada kesintili çizgiler kesmek için bir yoldur yoksa kodu ayıklanması Benim yolum nasıl matplotlab, SciPy içinde süreksiz eğrileri bağlamak yapmak veya

import matplotlib.pyplot as plt 
import numpy as np 

def contourPath(img, width, height): 
    x   = np.arange(0,width) 
    y   = np.arange(height,0,-1) 
    X, Y  = np.meshgrid(x,y) 
    plot  = plt.contour(X,Y,img, [0]) 
    pathList = plot.collections[0].get_paths() 
    x, y  = [], [] 
    for i in range(0, len(pathList)): 
     iterPath = pathList[i].iter_segments() 
     for point in iterPath: 
      pt = np.rint(point[0]) 
      x.append(pt[0]) 
      y.append(pt[1]) 
    X   = np.hstack(x) 
    Y   = np.hstack(y) 
    return np.dstack((X,Y))[0] 

zaman İşte sanırım user545424 için

için teşekkür ederiz yanlışsa olup olmadığını merak. Matplotlib kontur fonksiyonu düzgün çalışıyor, çünkü bu küçük olaya neden olan görüntü üzerinde iki süreksiz nokta var.

O kesen scypi tarafından neden olduğunu öğrenirler, ancak kütüphaneler

Neyse, ben yolunu bulma ve sorunu maskelemek mümkün olduğuna inanıyoruz kontur noktaları nasıl etkileşimde bulunduklarına dair başka bir sorun ortaya çıkarmaktadır onu enterpolasyon. Ama ben yolu gezdirmekten kaçınmayı severim, çünkü bilgisayarımda salemans problemi sorun değil.

Herhangi bir öneriniz var mı?

enter image description here

+0

varsa

acaba? – user545424

+1

Düzenlemenizde hala sorun olup olmadığını net değil. Ve bu arada, bu bir retina mı? – heltonbiker

+0

Biliyorum, ancak yolu reddetmek bir yol nesnesinin amacını yener. Oh iyi, sanırım çözüldüğü gibi gönderilebilir. Kutuya dönüştürülürken, indeksi almak ve görüntüyü enterpolasyon yapmak için kullanıcı argsort() işlevi daha basittir. – user1462442

cevap

3

Ben kendi soruyu yanıtlarken sanırım. Bu garip sekreterler, listenin sonunu belirleyen scipy'den kaynaklanıyor. Varsayılan davranış, scipy konumdan bağımsız olarak 2 sıralı noktaları bağlayacağına inanıyorum. Köşeler düzgün çalışıyor, çünkü bu görüntünün dış çizgisini kesinlikle aldı ve eğriyi çevreledi. Sekantın üst yarım dairenin ortasına bağlı olmasının nedeni. Bu, son yolun bittiği yerdir.

Kutup dönüştürmek ve yolu geri çevirmek, basit ama tam olarak iyi değil, ama iyi. başkası görüntüyü gönderebilir miyim daha iyi bir çözüm

def cart2polar(x,y, origin=None, size=np.array([200,200])): 
     ny, nx= size[0], size[1] 
     print size.shape 
     if origin is None: 
      origin_x, origin_y = nx//2, ny//2 
     else: 
      origin_x, origin_y = origin[0], origin[1] 
     x -= origin_x 
     y -= origin_y 
     r = np.sqrt(x**2 + y**2) 
     theta = np.arctan2(y, x) 
     return r, theta 

    def main(): 
     index = np.argsort(theta) 
     r, theta = r[index[:]], theta[index[:]] 
     f = interpolate.interp1d(theta,r) 
     theta = np.linspace(round(theta.min()+.00005,),theta.max(), 200) 
     r = f(theta) 
     x,y = polar2cart(r, theta) 

    def polar2cart(r, theta, origin=None, size=np.array([200,200])): 
     ny, nx= size[0], size[1] 
     if origin is None: 
      origin_x, origin_y = nx//2, ny//2 
     else: 
      origin_x, origin_y = origin[0], origin[1] 
     x += origin_x 
     y += origin_y 

     return x, y