【发布时间】:2017-01-25 22:50:21
【问题描述】:
我有几张不同尺寸的产品图片,我正在 sci-kit 中运行一个聚类算法来学习将相似的图片分组在一起。图片大小不一,但一般在 500x500 左右,我将它们缩小到 250x250
def read_img(path, mode='L', size_one=(250, 250)):
return misc.imresize(misc.imread(path, mode=mode), size_one)
获得矢量后,我会从中删除白色边框并将矢量展平。
问题是一些视觉上非常相似的图像具有不同的质量(由于调整大小之前的大小)。它们不会作为单独的集群被拾取。
例如,这两张图片虽然非常相似,但质量略有不同,并且不会聚集在一起。
- 我尝试在 sci-kit learn 中使用 AffinityPropagation 和 Kmeans 集群的参数,但仍然没有帮助。
- 这两个向量之间也存在很大差异
从预集群的角度来看,我可以做些什么来改进这一点?我才刚刚开始,任何反馈都会非常有帮助。
提前致谢
编辑:这是我修剪边界的方式,也非常欢迎更好的方法。
def trim_img_border(img):
shape = img.shape
temp_rows = []
for row in img:
if check_row(row):
temp_rows.append(row)
temp_rows_T = np.transpose(np.array(temp_rows))
out = []
for row in temp_rows_T:
if check_row(row):
out.append(row)
return round_img(misc.imresize(np.transpose(np.array(out)), shape))
def check_row(row):
srow = sorted(list(set(row)))
if srow == [255] or srow == [254, 255] or srow == [253, 254, 255]:
return False
return True
【问题讨论】:
-
聚类是一个非凸优化问题,因此只能保证收敛到一些局部最优解。也许集群在这里只是错误的方法。考虑使用感知散列等替代方案。
-
谢谢,我试试看。
标签: python image scipy scikit-learn