scipy 中使用 Kmeans 的 UnboundLocalError
UnboundLocalError using Kmeans in scipy
我想在 Python 中学习更多关于图像处理的知识,并且作为这个过程的一部分,我正在做我正在阅读的一本书中的一些练习。在一个练习中,我尝试对图像中的平均像素颜色进行 kmeans 聚类。下面的代码几乎是示例中的逐字记录,但我不断收到错误消息(堆栈如下)。
文件 "C:/Users/xxx/gitStuff/version-control/image/data/practiceCh6.py",第 31 行,位于
质心,方差 = kmeans(特征,3)
文件 "C:\Users\xxx\AppData\Local\Continuum\Anaconda\Lib\site-packages\scipy\cluster\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()
如有任何可能错误的建议,我们将不胜感激。
我不熟悉图像处理,但是通过在您的代码中添加一个简单的打印语句,您会看到数组中的值为 '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
Returns:
[[ 186.93768311 159.18690491 157.92678833]
[ nan nan nan]
[ nan nan nan]
...,
[ nan nan nan]
[ nan nan nan]
[ nan nan nan]]
你不能 运行 nan 的 K 均值,我会回去检查你是如何分配 R、G、B 的。
我想在 Python 中学习更多关于图像处理的知识,并且作为这个过程的一部分,我正在做我正在阅读的一本书中的一些练习。在一个练习中,我尝试对图像中的平均像素颜色进行 kmeans 聚类。下面的代码几乎是示例中的逐字记录,但我不断收到错误消息(堆栈如下)。
文件 "C:/Users/xxx/gitStuff/version-control/image/data/practiceCh6.py",第 31 行,位于 质心,方差 = kmeans(特征,3)
文件 "C:\Users\xxx\AppData\Local\Continuum\Anaconda\Lib\site-packages\scipy\cluster\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()
如有任何可能错误的建议,我们将不胜感激。
我不熟悉图像处理,但是通过在您的代码中添加一个简单的打印语句,您会看到数组中的值为 '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
Returns:
[[ 186.93768311 159.18690491 157.92678833]
[ nan nan nan]
[ nan nan nan]
...,
[ nan nan nan]
[ nan nan nan]
[ nan nan nan]]
你不能 运行 nan 的 K 均值,我会回去检查你是如何分配 R、G、B 的。