matlab - найти ближайшие точки к моей линии и создать с ними новую линию

У меня есть изображение, показанное ниже (изображение 1), и я хочу найти ближайшие пиксели рядом с моей линией. На изображении 2, как вы можете видеть, красные кресты — это белые пиксели на моем изображении, а зеленые — это точки на моей линии. Линия отображается синим цветом. Итак, я хочу найти, какой красный пиксель ближе к зеленому пикселю. И после этого я хочу создать новую линию, которая проходит через ближайшие точки.

изображение 1изображение 2

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

Я написал код ниже, но он находит 100 случайных точек на моей линии (та, что с голубыми кружками), которые не являются ближайшими, например, в положении A2.

LineCoord - это ячейка с массивами, скажем, 100x2 каждый: (x1, y1) - начальные точки моей линии, (x2, y2) - конечные точки.

image3

x1 = lineCoord{1}(1,1);
x2 = lineCoord{1}(end,1);

y1 = lineCoord{1}(1,2);
y2 = lineCoord{1}(end,2);

n = 100;

x0 = linspace(x1,x2,n);
x0 = round(x0);     

y0 = linspace(y1,y2,n);         
y0 = round(y0);

for i=1:length(x0)
plot(x0(i),y0(i),'o','LineWidth',1.5,'Color','c');
end

person Stayros Paspalakis    schedule 12.05.2019    source источник
comment
Это не для вашей конкретной проблемы, но, возможно, вы найдете вдохновение в этом ответе.   -  person Hoki    schedule 13.05.2019
comment
Я не совсем уверен, что вам нужно. Найти непрерывную дискретную линию? Это найти 100 ближайших пикселей? Это что-то другое? Я спрашиваю, потому что в вашем описании указано, что вы хотите найти ближайшие точки, но вы реализовали нечто, не связанное с красными пикселями. Я бы предположил, исходя из вашего описания, что вы хотите собрать все красные пиксели, найти их расстояние до линии, а затем выбрать 100 ближайших. Но это не обязательно ведет к непрерывной дискретной линии.   -  person Cris Luengo    schedule 14.05.2019
comment
1/2 @CrisLuengo Ты прав, я немного напортачил. Отверстие perpuse состоит в том, чтобы создать новую линию над моей исходной линией (синяя линия). Эта новая линия должна проходить через точки на изображении (красные точки), которые находятся на наименьшем расстоянии от моей исходной линии. Так понятно?   -  person Stayros Paspalakis    schedule 14.05.2019
comment
2/2 Итак, я подумал, что сначала я должен найти ближайшие точки к моей линии, а затем создать новую линию через них.   -  person Stayros Paspalakis    schedule 14.05.2019
comment
но тогда ваша результирующая линия не будет прямой линией, если она должна проходить через все эти точки. Это действительно то, что вы хотите?   -  person Hoki    schedule 14.05.2019
comment
Привет, я нашел решение для моей предыдущей проблемы. Но теперь у меня новая проблема: mathworks.com/ matlabcentral/answers/ Вы можете мне помочь?   -  person Stayros Paspalakis    schedule 19.05.2019