Aris Malidis
Aris Malidis

Reputation: 11

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

I have some damaged line segments in a binary image and I need to fix them (make them straight and at their original thick). In order to do that I have to find the middle points of the segment, so when I check the neighborhood to find the thickness of the lines I'll be able to find where the pixel stops being 1 and becomes 0.

Upvotes: 1

Views: 2303

Answers (3)

Rody Oldenhuis
Rody Oldenhuis

Reputation: 38032

Suppose

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

then

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

Matlab's round rounds numbers towards their nearest integer, so this minimizes the (city-block) distance from the analytical center (mean([A;B])) to the nearest pixel.

If you want to keep sub-pixel precision (which is actually advisable for most calculations until an explicit map from a result to pixel indices is required), just drop the round and use only the mean part.

Upvotes: 1

Lajos Arpad
Lajos Arpad

Reputation: 76544

Let's call the points A and B to reduce ambiguity, A(Xa, Ya) and B(Xb, Yb)

Let C be the middle point.

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

We have four interesting numbers, two for the X coordinates and two for the Y coordinates.

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

The X coordinate of your middle point is either Xmin or Xmax, the Y coordinate of your middle point is either Ymin or Ymax.

So we have four potential points: (Xmin, Ymin), (Xmin, Ymax), (Xmax, Ymin), (Xmax, Ymax).

So, finally, we must decide which point is nearest to C.

Distance from P(Xp, Yp) to C(Xc, Yc) is:

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

Calculate the four distance from the four points to C, choose the minimum and that will be the best possible middle point.

Upvotes: 1

DXM
DXM

Reputation: 1249

Assuming your damaged line segments are straight, you can use regionprops in MATLAB to find the center of each bounding box. Because if a segment is straight, its is always the diagonal line of the bounding box, thus the center of the box is also the center of the semgent.

Upvotes: 2

Related Questions