2016-04-08 10 views
1

私は手動でMATLABコードをPythonに変換していますが、私は1行で立ち往生しています。MATLABからPythonへのコード変換 - imclose()issue

MATLABコード:

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

のPythonコードを変換:

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) 

エラー:

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' 

私はこれを修正するにはどうすればよいですか?

答えて

0

行列はMATLABでの作業方法はnumpy配列に似ていますが、Pythonのリストは異なります。 MATLABから来て、それは明らかではないので、私は少しPythonのリストを読むことをお勧めします。例えば、ライン

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

[5,5,5,5,5]を返す代わりに

[[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]] 

を作成しませんPythonのリストとデフォルトの動作では、5回のリストを作成することです。 pymorph.closenumpy arraya.shapeの形状/サイズになる)が必要な場合、se、Pythonリスト(サイズを取得するためにlen(a))を渡しているために表示されるエラーです。あなたは常にMATLABと一貫した動作を得るためにnumpyの配列に変換する必要があり、あなたのケースでは、

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

[5,5,5,5,5]を与えるだろうし、それ自体がタイプnumpyの配列であるとしてpymorph.closeにエラーを回避する必要があります。

+0

私がチェックする([1,1,1,1,1])だけnp.arrayを使用して、私はエラーだ:私はエラーがpymorph 'に' se'を通過した後であると仮定しarray' –

+0

ため 'あまりにも多くのインデックスを.close'?ドキュメントから '{3x3十字}'の形式でなければならないので、 'se = pymorph.secross(r = 1)'のようなものを試してみてください... –

関連する問題