簡體   English   中英

填充凸形的有效方法

[英]Efficient way to fill a convex shape

假設我有一個封閉的形狀,如下圖所示,我有邊緣像素。 填充形狀的最有效方法是什么,即在形狀內部打開像素,如果:

1)我有所有的邊緣像素

2)我有大部分邊緣像素而不是所有邊緣像素(如圖所示)。

在此輸入圖像描述

構造凸包並添加缺少的像素。 然后使用掃描線算法填充多邊形。

這一切都取決於具體情況。

如果手動創建幀緩沖區(基本上使用字節數組或類似的東西),則必須遍歷要更改的所有像素。 因此,例如,從行的最左邊開始:

  • 在行上找到形狀的開始
  • 向右跳一個並打開像素,直到在行(或行尾)上找到第二個形狀結束
  • 繼續下一行

這當然只有你有所有邊緣像素才有效。 看看Marching Squares ,可以提供一些幫助。

請更具體一點。 “填充形狀的最有效方法”取決於您的底層渲染庫,如果它是光柵圖形等等......

編輯注意,如果你可以生成邊緣像素,算法要快得多,那么就不需要尋找邊緣的開始了。

標准的泛洪填充算法在凸形狀上非常有效,並且可以處理形狀比預期的凸起更小的情況。 不幸的是,它需要不間斷的輪廓。

  1. 如果“內部”這個詞,邊界的斷裂破壞了意義。
  2. 像人類視網膜這樣的神經網絡在進行這種處理時非常有效。
  3. 在計算機上,您需要花時間來定義“內部”的含義。 差距有多大? 邊界有多么扭曲?
  4. 模擬一個在“內部”周圍彈跳的較大的圓形蟲 - 太大而不能通過間隙但小於邊界的最小曲率半徑????

在你可以填充內部的東西之前,你需要確定確切的邊界,在這種情況下,這將構成識別圓。

之后,您可以在圓圈周圍查看每個像素的框,如果它實際上在其中。 因為您必須對圓內的每個像素執行某些操作,並且圓中像素的數量與邊界正方形的像素數呈線性關系(假設邊界正方形的邊具有某個常數的長度'半徑*常數'),應該接近最佳狀態。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM