基于SciKi的图像聚类

2024-04-24 19:08:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有几个不同大小的产品图片,我正在运行一个聚类算法在sci工具包学习组相似的图片在一起。图片大小不一,但一般都在500x500左右,我把它们缩小到250x250

def read_img(path, mode='L', size_one=(250, 250)):
    return misc.imresize(misc.imread(path, mode=mode), size_one)

一旦我得到了向量,我就把它的白色边框去掉,然后把向量展平。你知道吗

问题是,一些视觉上非常相似的图像具有不同的质量(由于调整大小之前的大小)。它们不会被当作单独的星团。你知道吗

例如,这两个图像虽然非常相似,但质量稍有不同,不会聚集在一起。你知道吗

enter image description here

enter image description here

  • 我试着在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

Tags: imgreturnifmodedefchecknpout
1条回答
网友
1楼 · 发布于 2024-04-24 19:08:59

聚类的主要原因是发现不同的聚类,这是因为聚类是基于原始像素,而不是基于像素的特征。像素有很多变化,即使在视觉上,事情看起来很相似。所以我认为你有两种方法:

  1. 减少像素的变化。有几种方法可以做到这一点:在将图像传递给聚类算法之前,对每个图像(使用相对较小的内核,可能是3x3或5x5)稍微模糊。或者,或者另外,您可以将图像转换为HSV颜色空间,并仅使用H通道进行聚类。你知道吗
  2. 基于图像特征而不是像素的聚类。您可以尝试使用scikit图像中的BRIEF或ORB功能:http://scikit-image.org/docs/dev/api/skimage.feature.html

希望这样的事情能有所帮助-我很想听听进展如何。你知道吗

相关问题 更多 >