給定一個影像矩陣,我想在給定圓的邊界內找到所有點/像素的像素點坐標,中心為 (x,y),其中 x 和 y 是整數,半徑為 r,其中 r 也是整數。考慮到邊框是 1 像素厚。我需要找到這個外邊緣。我遇到了麻煩,因為我只有整數可以使用。我試過曼哈頓距離,但它給了我一個旋轉了 45 度的正方形。我真的不知道如何前進
uj5u.com熱心網友回復:
我看到你的最后一個問題,看來你需要擴大圈子。
請注意,圓周像素的簡單繪制可能會產生小的空白空間。繪制半徑為 1,2,...,n 的圓的示例:

但是你可以完成像 Bresenham 那樣的整數圓繪制演算法。
逐一增加r值。在第一個八分圓中使用 Bresenham 演算法生成像素坐標序列。如果尚未填充像素(從另一個單元格中心),則繪制像素,并檢查下像素是否已填充 - 如果未填充,則繪制它以洗掉空白空間。對 7 個對稱像素及其相鄰像素執行相同操作(第二個八分圓的底部等)
uj5u.com熱心網友回復:
您可以使用cos來獲取 x 分量,并sin獲取 y 分量
center = [5,5]
r = 12
steps = 500
rads_of_circle = numpy.linspace(-2*numpy.pi,2*numpy.pi,steps)
xs = center[0] numpy.cos(rads_of_circle) * r
ys = center[1] numpy.sin(rads_of_circle) * r
border_points = zip(xs,ys)
這會給你浮動... ....round()如果你只想要整數就使用
uj5u.com熱心網友回復:
假設中心是原點(如果不是,你可以很容易地翻譯),你所追求的是由定義的區域的輪廓
x2 y2 - r2 ≤ 0.
對于給定的 x,這是驗證約束的最大 y。換句話說,
x2 y2 - r2 ≤ 0 < x2 (y 1)2 - r2 = x2 y2 - r2 2y 1.
現在如果你增加 x,
(x 1)2 y2 - r2 = x2 y2 - r2 2x 1 ≤ 0 < (x 1)2 (y 1)2 = x2 y2 - r2 2x 2y 2
可能會變為假,您需要通過遞減它來調整 y。
這就是圓增量演算法的本質。您保持 x2 y2 - r2 更新并逐個單元進行 x、y 調整。這僅涉及整數算術。事實上,只有加法、減法和比較!由于坐標每次最多變化 1,因此曲線將是連續的。
我沒有提到一點復雜性,這意味著八種不同的情況:x 和 y 可能需要遞增或遞減,x 可以比 y 變化得更快,或者相反。這些對應于八個主要八分圓中的平面分解。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/370702.html
