График поверх изображения отображается со смещением

Я пытаюсь нарисовать круг и прямую линию a=b поверх импортированного изображения. Сюжет появляется, но я столкнулся с двумя проблемами:

  • Изображение не центрировано - здесь предполагается, что круг находится в центре изображения.
  • Линия появляется с обратным наклоном

enter image description here

clear;close all;
I0 = imread('temp.png');
I1 = im2double(I0);
I = imresize(I1,[320 320]);
a=0:1:320;
b = a;

r=320/2;
xc=0; yc=0;
th = linspace( 0, 2*pi, 100);
x = r * cos(th) + xc;
y = r * sin(th) + yc;

figure,imshow(I)
hold on
plot(b,a,'linewidth',3)
hold on
plot(x,y,'white','linewidth',3)

Я могу исправить наклон линии, нарисовав вместо этого (b,-a,'linewidth',3), но линия не рисуется поверх изображения.

Любая помощь приветствуется. Да, это для задания, но это вовсе не окончательный ответ :)

3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
2
0
32
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
  1. Точка (0,0) не является центром изображения. Поскольку вы отображаете изображение I с imshow, оси будут иметь размер I, в вашем случае от 0 до 320. Поэтому вам нужно выбрать центр круга на основе этого. См. измененную строку с комментарием %1 в коде ниже.

  2. imshow устанавливает ось ij режим, используемую для изображений, которая инвертирует вертикальную ось. Для нормального построения линии вы можете установить режим xy. См. добавленную строку с комментарием %2 в коде.

clear;close all;
I0 = imread('temp.png');
I1 = im2double(I0);
I = imresize(I1,[320 420]);
a=0:1:320;
b = a;

r=320/2;
xc = size(I, 2)/2; yc = size(I, 1)/2;    %1
th = linspace( 0, 2*pi, 100);
x = r * cos(th) + xc;
y = r * sin(th) + yc;

figure,imshow(I)
hold on
axis xy                                  %2
plot(b,a,'r','linewidth',3)
hold on
plot(x,y,'white','linewidth',3)

Большое спасибо за подробную аннотацию. Изменение смещения круга действительно сделало его центрированным на изображении. Я не могу сделать то же самое с прямой линией, я думаю, мне придется сместить ее по оси x.

P.Y.C. 23.04.2022 17:43

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