захват значения индекса из указателя при нажатии на изображение в MATLAB

Как я могу найти индекс точки при нажатии и добавить его в конец массива, списка или вектора?

h=figure;
image(result);
locx = [];
locy = [];
while (ishandle(h))
    pos = get(0, 'PointerLocation');
    locx(end + 1) = pos(1);
    locy(end + 1) = pos(2);
    pause(1);
end

Хотя я нажал только на две точки, чтобы увидеть их x, y и индекс, многие местоположения x были сохранены в массиве locx. Пожалуйста, предложите решение и исправления:

locx =

  Columns 1 through 16

         635        1116         231         758         771         591         596          46         116         116         116        1362         852         498        1920        1663

  Columns 17 through 32

         733         795         795        1920        1895        1806        1061         700         123        1102        1097        1615           1         226         233         233

  Columns 33 through 43

         191         854         836        1920        1920        1920        1920        1920        1905        1189        1912

введите здесь описание изображения

введите здесь описание изображения


person Mona Jalal    schedule 20.02.2017    source источник


Ответы (1)


Вместо этого я бы предложил использовать функцию ginput:

h = figure;
image(result);
[locx, locy] = ginput(2);

Это даст вам точки внутри осей, которые нужно будет преобразовать в индексы изображения, округлив их:

locx = round(locx);
locy = round(locy);
person gnovice    schedule 20.02.2017
comment
как бы вы написали это в цикле while, как указано выше, а также условие для захвата только тех точек, на которые вы нажимаете, а не точки, на которые вы наводите курсор? спасибо - person Mona Jalal; 21.02.2017
comment
Кроме того, я полный новичок, я не уверен, как сделать округление, чтобы соответствовать фактическим точкам, как показано на изображениях. - person Mona Jalal; 21.02.2017
comment
@MonaJalal: это то, что он делает, без необходимости цикла while. Он будет захватывать точки только тогда, когда вы щелкаете мышью, и функция ginput не вернется, пока вы не выберете 2 точки. - person gnovice; 21.02.2017
comment
Я получаю эту ошибку. Прервано удалением фигуры. Ошибка при использовании ginput (строка 81). Прервано удалением фигуры. - person Mona Jalal; 21.02.2017
comment
также, как я могу изменить это, пока я не закрою окно, а не нажму на 5 точек? [locx, locy] = ginput(5); - person Mona Jalal; 21.02.2017
comment
@MonaJalal: Если вы хотите, чтобы окно закрывалось после выбора произвольного количества точек, сделайте следующее: [locx, locy] = ginput(); close(h); После выбора нужных точек нажмите клавишу Return, и окно закроется. - person gnovice; 21.02.2017
comment
Большое спасибо! Совсем как то, что я искал. Удивительно! - person Mona Jalal; 21.02.2017