2009-02-02 119 views
3

我試圖從位圖圖像中的某個區域生成矢量圖形,雖然我的當前算法適用於大多數情況,但它有一些問題,而且速度很慢。向量化圖像

所以我想知道你們是否知道如何有效地做到這一點的任何簡單的算法或代碼示例。

我的情況很簡單。我有一個位圖圖像,有幾個平坦的統一區域。我希望將這些區域轉換成可以稍後用作矢量圖形重新創建它們的點集。我永遠不會有重疊的形狀,形狀總是被封閉的,並且它們總是一種顏色(所有像素都是相同的RGB值),因此確定輪廓很容易,但是有效率更難。

編輯:我按下提交按鈕太快......

理想情況下,我想一個解決方案使用.NET的,但僞代碼也應該很好地工作。也許你們都知道一些關於圖像處理的好資源?

再次編輯:那我以後是一種算法或庫,會給我描述每個區域的圖像,而不是矢量圖像本身點或向量的列表。

回答

4

由於您的對象是不同的,您可以運行連接組件標籤的算法。 wikipedia article只是一個好的開始,但我不知道他們爲什麼專注於多通道算法,一次通行就足夠簡單。在發現連接的組件時,您必須維護一些數據結構來表示輪廓。如果你的物體被認爲是簡單的(例如,與軸線成直角的矩形或圓形),那麼表示可能非常簡單。如果它們是一般的形狀,那麼你需要一些更復雜的曲線表示。 (請像「U」或「O」形記刁鑽的對象。)

+0

有趣的文章,一個!我的物體可以有任何形狀,但我認爲這會有所幫助。謝謝! – 2009-02-03 07:34:03

3

我在這方面沒有經驗,所以我可能會來形容最糟糕的算法可以使用,並希望其他人誰否則可能通過這個問題我的回答會很激怒,他們今天會給你一些更好的算法。

我會做一個洪水填充算法來找出每個斑的邊緣,使多邊形與每個斑的每個邊緣點的向量。這將爲您提供與圍繞blob像素一樣多的多邊形。

隨後,我會擡頭多邊形簡化程序,將採取,例如,一大堆的趴在同一行的載體,並刪除所有的中間點。

洪水填充不完全必要的任何 - 只搜索從當前像素相鄰像素(有8個鄰居),並使用右手邊下面來填充多邊形點。

它應該是相對較快的,雖然多邊形將非常複雜,除非你得到一個非常好的簡化例程。

- 亞當

+0

這或多或少地是我現在所做的。它的工作,只是不是100%的時間:-) – 2009-02-03 07:31:39

1

只是爲了逗一點點,想框外,我想這使用運動檢測非常succesfull。我有一個白色的圖片,裏面有3個圓圈。

使用此網絡攝像頭的運動檢測程序(http://www.codeproject.com/KB/audio-video/Motion_Detection.aspx)源我得到了所有3圈的地區,可以映射起來容易。 我只是將圖片兩次送入運動檢測程序,其中一張圖片向右移動一點。 根據你使用的檢測算法,你可以有不同的細節級別(如下面的示例圖片所示):

所有的榮譽都歸於運動檢測程序的作者:Andrew Kirillov。

alt text

alt text

0

您可能也有興趣this遺傳算法。

0

This paper比較了幾種流行的技術。我不會稱這些算法簡單,但治療是徹底的。