Matlab рисует линию на изображении, используя уравнение линии - PullRequest
0 голосов
/ 03 декабря 2018

С учетом двух координатных точек A и B и градиента «уклоны».Теперь я хочу нарисовать линию (с linspace - функцией) на изображении, которое работало для линий с градиентом ~ 1.Линия остановилась на границе изображения (из-за xlims и ylims).

imshow(I)
xlims = xlim(gca);
ylims = ylim(gca);

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

Image here

Какие-либо решения, как я могу нарисовать линию, используя уравнение ay = mx + c, которое останавливается на границе изображения независимо от градиента?

РЕДАКТИРОВАТЬ:

img = uint8(zeros(382, 382));

pointA = [181.4594, 129.7092];
pointB = [185.3411, 251.6005];

imshow(img)
hold on
plot(pointA(1), pointA(2), 'ro')
plot(pointB(1), pointB(2), 'bo')
hold off

% From y = mx + x
slope = 31.4015;
intercept = -5.5684e+03;


xlims = xlim(gca);
ylims = ylim(gca);

y = xlims*slope + intercept;


Xline = linspace(xlims(1), xlims(2), 382);
Xline_pole1 = linspace(xlims(1), pointA(1), 382/2);
Xline_pole2 = linspace(xlims(2), pointB(1), 382/2);
Yline = Xline*slope + intercept;
Yline_pole1 = Xline_pole1*slope + intercept;
Yline_pole2 = Xline_pole2*slope + intercept;

hold on
plot( Xline_pole1, Yline_pole1, 'Color', 'b', 'LineWidth', 3 );
hold off


% Check how many coordinates are within image frame
for zz=1:length(Xline_pole1)
    hold on
    plot(Xline_pole1(zz),Yline_pole1(zz), 'm+');
end

1 Ответ

0 голосов
/ 03 декабря 2018

Простой обходной путь: просто сбросьте свои пределы после того, как вы построили свои линии

imshow(I) 
xlims = xlim(gca);
ylims = ylim(gca);
% plot your lines
xlim(xlims)
ylim(ylims)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...