簡體   English   中英

如何在二進制圖像中找到線段的x,y的中間點?

[英]How can I find the middle points of x, y of a line segment in a binary image?

我在二進制圖像中有一些損壞的線段,我需要修復它們(使它們筆直且原始厚度)。 為了做到這一點,我必須找到段的中間點 ,所以當我檢查鄰域以找到線的粗細時,我將能夠找到像素停止為1並變為0的位置。

假設您的損壞線段是直的,您可以在MATLAB中使用regionprops來查找每個邊界框的中心。 因為如果一個段是直的,它總是邊界框的對角線,因此盒子的中心也是半圓的中心。

讓我們調用點A和B來減少歧義,A(Xa,Ya)和B(Xb,Yb)

設C為中間點。

C(Xc, Yc)
Xc = (Xa + Xb) / 2
Yc = (Ya + Yb) / 2

我們有四個有趣的數字,兩個用於X坐標,兩個用於Y坐標。

Xmin = floor(Xc)
Xmax = ceil(Xc)
Ymin = floor(Yc)
Ymax = ceil(Yc)

中點的X坐標是Xmin或Xmax,中點的Y坐標是Ymin或Ymax。

因此我們有四個潛在點: (Xmin, Ymin), (Xmin, Ymax), (Xmax, Ymin), (Xmax, Ymax)

所以,最后,我們必須決定哪個點離C最近。

從P(Xp,Yp)到C(Xc,Yc)的距離是:

sqrt(sqr(Xp - Xc) + sqr(Yp - Yc))

計算從四個點到C的四個距離,選擇最小值,這將是最好的中間點。

假設

A = [xa ya];
B = [xb yb];

然后

C = round( mean([A;B]) );

Matlab將數字round到它們最接近的整數,因此最小化了從分析中心( mean([A;B]) )到最近像素的(城市塊)距離。

如果你想保持子像素精度(這對於大多數計算來說實際上是可取的,直到需要從結果到像素索引的顯式映射),只需放棄該round並僅使用mean部分。

暫無
暫無

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

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