実現したいこと
surfで画像の特徴量を抽出して、画像名、分類名などとあわせて解析に利用したいです。
使用しているのはpython3.6、OSはwindowsです。
またpython、teratailともに初心者なので至らない点があれば教えていただけると幸いです。
##現状
現状のコードは以下の通りです。
今のコードでは画像の特徴量のみがnparrayに保存されているのでどの特徴量がどの画像に該当するの分からない状態です。
python
1import mahotas as mh 2import numpy as np 3from glob import glob 4from mahotas.features import surf 5from sklearn.cluster import KMeans 6 7picture_category_num = 2 8feature_dimension = 256 9 10# image surf 11images = glob('./data/*.jpg') 12alldescriptors = [] 13for im in images: 14 print(im) 15 im = mh.imread(im, as_grey=True) 16 im = im.astype(np.uint8) 17 alldescriptors.append(surf.surf(im, descriptor_only=True)) 18 19for i in range(len(alldescriptors)): 20 print(i, len(alldescriptors[i])) 21 22# image surf -> basic feature 23concatenated = np.concatenate(alldescriptors) 24km = KMeans(feature_dimension) 25km.fit(concatenated) 26 27# image surf and basic feature -> features 28features = [] 29for d in alldescriptors: 30 if d.size > 0: 31 c = km.predict(d) 32 features.append(np.array([np.sum(c == ci) for ci in range(feature_dimension)])) 33features = np.array(features) 34np.save('features.npy', featrues)
##試したこと
globで取得したファイル名(images) を(画像ファイル数)×1のnparrayに保存→featuresをそこに追加して保存という手法を考えたのですが、surfの場合特徴量0の画像を除外して保存するためファイル名と次元数があわなくなってしまいうまくいきません。
画像数がかなり多いため手動で特徴量0の画像を除外することは避けたいです。
特徴量0としてそのままnparrayに保存するか、特徴量0の画像のファイル名を除外するかしたいのですが方法が分からないのでご教授いただければと思います。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。