Как я могу найти средние точки x, y отрезка в двоичном изображении?

У меня есть несколько поврежденных отрезков в двоичном изображении, и мне нужно их исправить (сделать их прямыми и с оригинальной толщиной). Для этого мне нужно найти средние точки сегмента, поэтому, когда я проверю окрестность, чтобы найти толщину линий, я смогу найти, где пиксель перестает быть 1 и становится 0.

3 ответа

Предполагая, что ваши поврежденные отрезки прямых являются прямыми, вы можете использовать regionprops в MATLAB, чтобы найти центр каждой ограничительной рамки. Поскольку, если отрезок прямой, это всегда диагональная линия ограничивающего прямоугольника, поэтому центр прямоугольника также является центром полугендера.

Предполагать

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

затем

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

Matlab-х round округляет числа до ближайшего целого числа, так что это минимизирует расстояние (сити-блок) от аналитического центра (mean([A;B])) до ближайшего пикселя.

Если вы хотите сохранить субпиксельную точность (которая на самом деле рекомендуется для большинства вычислений до тех пор, пока не потребуется явное сопоставление результатов с индексами пикселей), просто отбросьте round и использовать только mean часть.

Давайте назовем точки 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, выберите минимум, и это будет наилучшая возможная средняя точка.

Другие вопросы по тегам