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