2010-09-23 27 views
1

使用mysql以主色搜索照片非常簡單。如何用獅身人面像實現顏色搜索?

SELECT * FROM colors 
WHERE ABS(dominant_r - :r) < :threshold 
AND  ABS(dominant_g - :g) < :threshold 
AND  ABS(dominant_b - :b) < :threshold 

我不知道,如果是無論如何可以存儲:假設R,G,照片的最主色的B值已經存儲在數據庫中,這可以通過例如像實現獅身人面像中的顏色並使用獅身人面像搜索引擎執行查詢?

謝謝!

回答

1

我已經完成了獅身人面像的顏色搜索。它在那裏http://code.google.com/p/hppg/。怎麼運行的? 非常簡單,對於每種顏色我都會在數據庫中存儲它的主色。數據庫表,女巫用於獅身人面像索引,有一個名爲「顏色」欄目,它的內容填充方式如下:

/** 
    * This part was changed based on formula 
    * 
    * It fits here better than algorithm 
    * 
    * http://en.wikipedia.org/wiki/Tag_cloud 
    * 15400 is number of maximum matches based on indexed thumbnail size 120x130 px. 
    * */ 

    $max = 15400; 
    $min = 25; 
    $rmax = 50; 
    $rmin = 1; 

    $colorIndex = array(); 
    foreach ($colorsMaximumImage as $color) 
    { 
     $colorIndexString = trim(str_repeat(' pld'.$color['pallete_id'],round((($rmin*($color['count']-25))/($max-$min))*100))); 
     if ($colorIndexString != '') 
     $colorIndex[] = $colorIndexString; 
    } 

我這裏使用的標註配方,以避免非常大的指標。計數是自定義托盤項目匹配的次數。它工作得很好,活動網站的一些例子可以在項目主頁找到。這樣我們可以同時用顏色和關鍵字搜索:)。目前我仍在嘗試獲得最好的結果...

+0

我的方法是用imagemagick生成一個直方圖,並提取10個最常見的和10個最主要的顏色,並將它們存儲在mysql中。所以我不得不爲索尼的每張照片編制10行索引 - 這種方法索引變得非常龐大。你可以在http://photo.clipdealer.com/media/499332上看到它,點擊信息框中的「顏色計」。無論如何感謝您的回答,我給它一個'是',因爲它對我很有幫助。非常感謝! – aurora 2010-12-26 11:34:28

+0

還有一件事。自0.9.9以來的Sphinx支持選擇類似過濾。所以它完全適合您的需求。 – Remdex 2010-12-28 09:21:44

+0

我正在處理類似問題的解決方案。雖然這兩種方法都有幫助,但我想知道是否有人想出了一種方法來存儲每條記錄上的所有顏色信息(如Remdex所做的那樣),而無需使用預定義的調色板。我是否認爲Remdex的解決方案只允許通過精確匹配進行搜索? – 2011-02-03 20:29:54