![](/img/trans.png)
[英]how can I find a shortest line (2 end points will be fine) from a group of points which is intersect with another given line segment
[英]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.