Нарисуйте линию угла над изображением - Matlab - PullRequest
0 голосов
/ 14 ноября 2018

Почему линия угла, которую я рисую, неверна. вместо 45 градусов я получаю 315?

Сценарий:

clc;
clear;
url='http://clipart-library.com/images/Bcgrakezi.png';
I = imread(url);
imshow(I);
hold on;

[y1,x1,z1] = size(I);
cy=y1/2;
cx=x1/2;

sz = 50;
scatter(cx,cy,sz,'d')

lineLength = 250;
angle = 45;
xAngleLine(1) = cx;
yAngleLine(1) = cy;
xAngleLine(2) = xAngleLine(1) + lineLength * cosd(angle);
yAngleLine(2) = yAngleLine(1) + lineLength * sind(angle);
plot(xAngleLine, yAngleLine,'g','LineWidth',5);

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

imshow поворачивает ось Y вверх дном.Вы можете увидеть это с помощью:

get(gca,'YDir')

, что будет означать либо 'normal' (тики по оси Y увеличиваются вверх), либо 'reverse' (тики по оси Y увеличиваются вниз).В вашем случае вы увидите 'reverse'.

Вы также можете набрать

axis on

, чтобы увидеть отметки и значения.

0 голосов
/ 14 ноября 2018

При отображении изображений, например, с помощью imshow или image, MATLAB инвертирует ось y.Таким образом, первая строка данных изображения (самый низкий индекс строки) появляется в верхней части графика.Поэтому, чтобы учесть это, вам нужно перевернуть знак в строке кода от второй до последней к отрицательному:

yAngleLine(2) = yAngleLine(1) - lineLength * sind(angle);
...