2017-01-25 77 views
0

我有幾種不同尺寸的產品圖像,我在sci-kit中運行聚類算法,學習將相似圖像分組在一起。這些圖像的大小有所不同,但一般在500×500,我縮小下來到250x250的使用Sci-Kit對調整大小的圖像進行聚類

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 AffinityPropagation和K均值聚類學習的參數,但它仍然沒有幫助。
  • 有這兩個向量之間的較大差異,以及

我可以從集羣預角度來看做些什麼來改善呢?我剛剛開始使用這個,任何反饋都會非常有幫助。

在此先感謝

編輯:這裏是我如何修剪邊界,更好的方法將是非常歡迎也。

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 
+0

聚類是一個非凸優化問題,因此只能保證收斂到一些局部最優解。也許聚類在這裏只是錯誤的方法。考慮像感知哈希和合作的替代方案。 – sascha

+0

謝謝,讓我試試看。 – browskie

回答

0

的主要原因您的聚類尋找不同的集羣是,你對原始像素做集羣,而不是從像素特性。即使在視覺上,像素也有很多變化,事情看起來很相似。所以我認爲你有兩種方法:

  1. 使你的像素少變量。有幾種方法可以做到這一點:在將圖像傳遞給聚類算法之前,將每個圖像(相對較小的內核,可能是3x3或5x5)略微模糊。或者,或者另外,您可以將圖像轉換爲HSV色彩空間,並僅使用H通道進行聚類。
  2. 基於圖像特徵而不是像素的聚類。您可以嘗試scikit-image中的BRIEF或ORB功能:http://scikit-image.org/docs/dev/api/skimage.feature.html

希望這樣的事情可以幫助 - 希望聽到它如何去。

+0

謝謝,我會試試看,並回到這篇文章。 – browskie