I определяется для создания GUI которым показывает изображение, и пользователь должен иметь возможность выполнять следующие действия:Настройки получить пиксели функции координат в MATLAB
1 - Выберите несколько точек с помощью мыши;
2 - Когда пользователь закончил, нажмите «RETURN» *;
3 - После наложения «RETURN», если пользователь хочет отредактировать одну из точек, он должен щелкнуть нужную точку и перетащить ее туда, где он хочет.
Я создал эту функцию:
function [x, y] = test(img)
[lin, col] = size(img);
fig = figure('WindowButtonDownFcn', {@func, lin, col}, 'KeyPressFcn', @keyfunc);
imshow(img, []);
% axs = axes('position', [1 col 1 lin]);
set(gca, 'Ydir', 'reverse');
x = [];
y = [];
uiwait(fig);
function func(src, callback, lin, col)
seltype = get(fig, 'SelectionType');
set(gca, 'Ydir', 'reverse');
if strcmp(seltype, 'normal')
set(fig, 'Pointer', 'circle');
cp = get(fig, 'CurrentPoint');
xinit = cp(1, 1);
yinit = cp(1, 2);
x = [x, xinit];
y = [y, yinit];
hl = line('XData', xinit, 'YData', yinit, 'color', 'b', 'Marker', '.');
set(fig, 'WindowButtonMotionFcn', {@moveMouse, lin, col});
set(fig, 'WindowButtonUpFcn', @mouseRelease);
end
function moveMouse(src, callback, lin, col)
cp = get(fig, 'CurrentPoint');
xdata = [xinit, cp(1, 1)];
ydata = [yinit, cp(1, 2)];
set(hl, 'XData', xdata);
set(hl, 'YData', ydata);
drawnow;
end
function mouseRelease(src, callback)
last_selection = get(fig, 'SelectionType');
if strcmp(last_selection, 'alt')
set(fig, 'Pointer', 'arrow');
set(fig, 'WindowButtonMotionFcn','');
set(fig, 'WindowButtonUpFcn','');
else
return;
end
end
end
function keyfunc(src, callback)
keypressed = get(fig, 'CurrentCharacter');
if keypressed == 13
uiresume(fig);
end
end
end
Q1 - Он может построить изображение, но система координат имеет свой нуль в верхнем левом краю рисунка. Как переместить его влево-вверху изображения?
Q2 - Как я могу реализовать номер позиции 3 (ЕСЛИ пользователь хочет отредактировать одну из точек, он/она должен щелкнуть нужную точку и перетащить ее туда, где он/она хочет)?
Спасибо всем заранее,
Благодарим за ответ. Еще один вопрос: могу ли я добавить функциональность «удалить»? Я добавил его, но он влияет только на результат (x, y векторы), но он не обновляет строку. – Gabs
@Gabs Да, вы можете использовать 'ind', найденный в' clickedLine', чтобы удалить определенный элемент. Затем вы захотите обновить сюжет 'xdata' и' ydata'. – Suever
Извините, но как именно я это делаю? – Gabs