2016-04-08 24 views
1

MATLAB kodunu Python'a manuel olarak dönüştürüyorum ve bir satırda takılıyorum.Python Kod Dönüştürme MATLAB - imclose() issue

MATLAB kodu:

cashew_BW = threshad(cashew_GRAY(:,:,1),T); 
cashew_BW = ~cashew_BW; 
cashew_BW = imclose(cashew_BW, true(5)); 
cashew_BW = ~cashew_BW 

Python kodunu dönüştürülen:

T = 112 
se = [[1,1,1,1,1]]*5 
cashew_BW = pymorph.threshad(cashew_GRAY, T, f2=None) 
cashew_BW = np.logical_not(cashew_BW) 
cashew_BW = 1*(cashew_BW) 
cashew_BW = pymorph.close(cashew_BW, se) 
cashew_BW = np.logical_not(cashew_BW) 
cashew_BW = 1*(cashew_BW) 

Hata:

Bunu düzeltmek nasıl
Traceback (most recent call last): 
    File "check1.py", line 22, in <module> 
    cashew_BW = pymorph.close(cashew_BW, se) 
    File "/home/keerthi/anaconda2/lib/python2.7/site-packages/pymorph-0.96-py2.7.egg/pymorph/mmorph.py", line 1303, in close 
    return erode(dilate(f,Bc),Bc) 
    File "/home/keerthi/anaconda2/lib/python2.7/site-packages/pymorph-0.96-py2.7.egg/pymorph/mmorph.py", line 1580, in dilate 
    x,v = mat2set(B) 
    File "/home/keerthi/anaconda2/lib/python2.7/site-packages/pymorph-0.96-py2.7.egg/pymorph/mmorph.py", line 4392, in mat2set 
    if len(A.shape) == 1: A = A[newaxis,:] 
AttributeError: 'list' object has no attribute 'shape' 

?

cevap

0

MATLAB'da matrislerin çalışma şekli numpy dizilerine benzer, ancak python listeleri farklıdır. MATLAB'den geliyor, bu belli değil, bu yüzden python listeleri hakkında biraz daha fazla okuma önerebilirim. Örneğin, satır

se = [[1,1,1,1,1]]*5 

[5,5,5,5,5] dönmek yerine bir piton listesiyle varsayılan davranış 5 kez listesini oluşturmaktır

[[1, 1, 1, 1, 1], 
[1, 1, 1, 1, 1], 
[1, 1, 1, 1, 1], 
[1, 1, 1, 1, 1], 
[1, 1, 1, 1, 1]] 

oluşturur olmayacaktır. Gördüğünüz hata, pymorph.close bir numpy array (a.shape şekil/boyut almak için) beklediğinden, se, bir python listesi (boyut almak için len(a)) geçiyorsunuz. Her zaman

se = 5*np.array([1,1,1,1,1]) 

[5,5,5,5,5] verecek ve se tipi numpy dizinin olduğu gibi pymorph.close hatayı kaçınmalıdır senin olayda, MATLAB ile tutarlı davranışı elde etmek diziler numpy dönüştürmek gerekir.

+0

Sadece np.array ([1,1,1,1,1]) 'i kontrol etmek için kullandım ve bir hatayı aldım: 'dizi için çok fazla sayıda indeks' –

+0

Hata alıyorum 'se' pymorph geçtikten sonra .close'? Dokümanlardan “3x3 çapraz” biçiminde olmalı, bu yüzden çalışıp çalışmadığını görmek için se = pymorph.secross (r = 1) gibi bir şey deneyebilirsiniz ... –