2015-06-15 2 views
0

Я пытаюсь узнать больше об обработке изображений в Python и, как часть процесса, делаю некоторые упражнения в книге, которую я читаю. В одном упражнении я пытаюсь сделать kmeans кластеризацию среднего пиксельного цвета в изображении. Нижеприведенный код довольно дословно из примера, но я продолжаю получать ошибку (складывается следующим образом).UnboundLocalError, используя Kmeans в scipy

файл "C: /Users/xxx/gitStuff/version-control/image/data/practiceCh6.py", строка 31, в центроидах, дисперсия = kmeans (особенности, 3)

Файл «C : \ Users \ ххх \ AppData \ Local \ Continuum \ Anaconda \ Lib \ сайт-пакеты \ SciPy \ кластер \ vq.py», строка 524, в kmeans результат = best_book, best_dist

UnboundLocalError: локальная переменная«best_book ', на которые ссылаются до присвоения

Код ниже:

from PIL import Image 
from scipy.cluster.vq import kmeans,vq 
from scipy.misc import imresize 
from numpy import * 


steps = 50 
im = array(Image.open('frontside.jpg')) 

dx = im.shape[0] 
dy = im.shape[1] 

#compute color features for each region 
features =[] 
for x in range(steps): 
    for y in range(steps): 
     R = mean(im[x*dx:(x+1)*dx,y*dy:(y+1)*dy,0]) 
     G = mean(im[x*dx:(x+1)*dx,y*dy:(y+1)*dy,1]) 
     B = mean(im[x*dx:(x+1)*dx,y*dy:(y+1)*dy,2]) 
     features.append([R,G,B]) 

features = array(features,'f') #make into array 

#cluster 
centroids,variance = kmeans(features,3) 
code,distance = vq(features,centroids) 

#create image with clulster labels 
codeim = code.reshape(steps,steps) 
codeim = imresize(codeim,im.shape[:2],interp='nearest') 

figure() 
imshow(codeim) 
show() 

Любые советы о том, что может быть неправильным, будут высоко оценены.

ответ

0

Я не знаком с обработкой изображений, но, добавив в свой код простую инструкцию печати, вы увидите, что значения в вашем массиве - «nan».

for x in range(steps): 
    for y in range(steps): 
     R = mean(im[x*dx:(x+1)*dx,y*dy:(y+1)*dy,0]) 
     G = mean(im[x*dx:(x+1)*dx,y*dy:(y+1)*dy,1]) 
     B = mean(im[x*dx:(x+1)*dx,y*dy:(y+1)*dy,2]) 
     features.append([R,G,B]) 

features = array(features,'f') #make into array 
print features 

Возвращает:

[[ 186.93768311 159.18690491 157.92678833] 
[   nan   nan   nan] 
[   nan   nan   nan] 
..., 
[   nan   nan   nan] 
[   nan   nan   nan] 
[   nan   nan   nan]] 

Вы не можете запустить K-средства на Нэн, я бы вернуться и проверить, как вы присваиваете R, G, B.

+0

Спасибо, Кевин. Оказалось, что я пропустил разделение dx и xy по шагам, которые разрешили проблему. Плохое внимание к деталям с моей стороны. – chemnteach

Смежные вопросы