2010-07-13 81 views
0

我沒有太多的經驗做圖像分析,所以我認爲我會問比較開明的人:)什麼是分析圖像顏色(Java)的最佳方式?

基本上就是我想要做的是分析圖像並找出什麼是最常見的顏色有(這些會顯然是平均值)。

有沒有人知道有效的方法來做到這一點?如果可能,我想避免使用任何第三方庫,但至少會考慮一切。

就像我說的,我沒有太多的圖像分析經驗,所以如果我不能正確理解你的答案,請耐心等待我!

我試過谷歌,但似乎沒有任何類似於我之後的東西。也許我的Google-Fu今天不夠好。

我真的很感謝你們可以給的任何指針!

感謝, 湯姆

+0

@Justian:不在這些部分:P – Beardy 2010-07-13 16:36:35

+0

有趣的oO。你住在哪裏?編輯:啊。英國。疑難雜症。有時我最終會寫Color而不是Color,因爲這就是我被培養的方式。歐洲的血統 - 不是英國。涼!抱歉抱負時間:P – 2010-07-13 16:43:17

回答

1

考慮一個 「彩色立方體」 與RGB,而不是XYZ。將立方體拆分成子立方體,但使它們全部重疊。確保他們都是相同的大小。一個容易記憶/計算的立方體模式應該是從所有方向0-127,64-191,128-255,總共27個立方體。對於每個立方體,找出圖像中的哪些顏色落入其中。

隨着您將立方體變得越來越小,結果會變得越來越少,並開始在最流行的顏色範圍上趨於一致。一旦你有了這種收斂,取平均值來得到「實際顏色」。

這是對儘可能多的細節,我可以去與我的老闆附近徘徊cubefarm :-)

+0

我認爲這似乎是迄今爲止最好的方式。我在另一個網站上閱讀了這個方法(爲了一個稍微不同的目的),我認爲這個吸引力的一部分是它聽起來很酷:P 我仍然想嘗試幾種不同的方法,看看哪個最好結果,但無論如何,我會先試試你的:) – Beardy 2010-07-13 16:48:18

2

你如何能夠做到這一點粗略的想法:
你可以使用java.awt.image.PixelGrabber搶來自圖像的二維RGB數組,每個像素一個像素。

已填充此陣列時,你可以通過和不過你想要的那種(聽起來這將是內存密集型),並進行簡單的功能命令他們,指望他們等

然後你可以查看java.awt.Color,並使用Color(int, int, int)構造函數創建具有這些顏色的框(作爲可視佔位符),並在其下面顯示出現的出現次數。

要獲取顏色的十六進制值,你可以使用一個字符串,像這樣:

String rgb = Integer.toHexString(color.getRGB()); 
    rgb = rgb.substring(2, rgb.length()); 

(子是必要的,否則你會得到8個字符)

希望這對讓你正確的軌道!

資源:Color ClassImage Class

1

我知道你想避免第三方庫,但做看一看OpenCV的。他們有一些好的東西w.r.t圖像處理和分析。也許這可以爲你工作。

相關問題