2013-11-25 81 views
1

我想創建一個圖像轉換程序。它應該從一個圖像中移動像素區域,並根據某些標準(如顏色和形狀)將它們轉換爲另一個圖像。如何按像素組重新排列圖像

要做到這一點,我需要能夠分析圖像,將其拆分成組,並轉移這些組。

  • 第一個問題已經從確定像素組開始。他們不應該隨機選擇或完美的多邊形/形狀。有誰知道可以區分不同紋理/環境/邊界的算法嗎?
  • 接下來,我需要對區域進行輕微調整,以使它們適合新圖像。然後這些區域將被移動。這不會像第一個問題那麼難。

表現並不重要;首先我必須讓程序工作。它可能需要一個小時才能預先加載轉換或任何;)

任何人都可以給我一些建議從哪裏開始或我可以使用哪些技術/ API?我對大多數編程語言都很滿意,最好是C#,VB,JavaScript,PHP,Java等。平臺也不重要。

我知道,這很複雜,但我盡我所能去解釋它。有任何想法嗎?

回答

1

你的第一個任務,根據顏色/紋理/等分組。被稱爲segmentation。有很多方法和算法可以做到這一點,沒有一個比其他所有方法都好,因爲很多圖像處理中的最佳算法取決於您的圖像以及您的特定功能/藝術目標。

一般的想法是定義像素之間的多個距離,例如一個距離將僅基於像素的位置,另一個取決於其顏色的差異,更高級的度量可以考慮鄰域來做相關的事情形狀,輪廓方向或紋理。然後,將這些距離(例如加權總和)組合起來,以獲得兩個像素相似程度的「巧妙」度量。之後,根據某些閾值(比如最終組的大小),或多或少窮盡地計算所有距離並將相似像素組合在一起。

如果您不想研究和實現所有這些,最好使用現有的圖像處理庫。我建議看看OpenCV和「分段」關鍵字。你會得到k-means,分水嶺和meanshift算法的實現,這些算法可能對達到你的效果感興趣。

OpenCV是C++,但它也具有Java和Python綁定,我認爲,也可能是其他。

對於第二項任務,您需要混合移動像素和混合像素,但這更簡單,您可以「手動」操作,或者查看morphing算法。

快速搜索顯示this blog post與源代碼使用OpenCV變形兩個圖像。您還有幾種語言的現成庫,請看relatedquestions

你甚至可以直接調用命令行實用程序:xmorph,但似乎不便攜或imagemagick(請參閱this腳本),這是更現代的,但不是沒有實現真正的變形算法AFAIK。