любая идея о компоненте xy и оси xy

Моя проблема, когда я делаю снимок с камеры, подключенной к моему ноутбуку, ось Y инвертируется, поэтому результат становится неправильным "http://s4.postimg.org/xcat1kmvh/sdsf.png"... я решаю эту проблему, используя этот код " set(gca,'YDir','normal') %starts at внизу рисунка "... но проблема в том, что фото инвертируются вот так " http://s16.postimg.org/ekguxl35x/sdsfss.png "... как я могу исправить эту проблему... я просто хочу получить компонент XY любого сустава на картинке...

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

imagesc(getsnapshot(handles.video));

set(gca,'YDir','normal') % начинается снизу рисунка

[x1,y1]=ginput(1)
[x2,y2]=ginput(1)
c=sqrt((x1-x2)^2+(y1-y2)^2)

 d=c/40.8;

person roger1    schedule 19.06.2013    source источник


Ответы (2)


Вы можете инвертировать изображение перед его построением, чтобы при изменении оси Y изображение оказывалось в нужной вам ориентации. Вот пример

I = imread('peppers.png'); % sample image included in matlab
subplot(2,2,1)
imagesc(I)
subplot(2,2,2)
I2 = flipdim(I,1);
imagesc(I2)
set(gca,'YDir','normal')

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

В вашем коде getsnapshot(handles.video)) возвращает матрицу, и вы можете инвертировать эту матрицу. Что-то вроде этого:

frame = getsnapshot(handles.video));
frame2 = flipdim(frame,1);
imagesc(frame2)
person Molly    schedule 19.06.2013
comment
я не могу реализовать вашу идею, потому что я не сохраняю снимок, который я сделал ... я просто делаю снимок, идентифицирую 2 точки на дереве, которые появляются в ссылке, которую я помещаю s4.postimg.org/xcat1kmvh/sdsf.png. ... затем у меня будет коэффициент масштабирования для преобразования пикселей в см ... затем я записываю видео и конвертирую его в кадры, и, наконец, я выполняю оцифровку каждого кадра ... - person roger1; 19.06.2013
comment
Вам не нужно сохранять изображение, просто сохраните его в переменной перед отображением. Я обновил свой ответ. - person Molly; 19.06.2013
comment
дайте мне эту ошибку ››› Ошибка: Файл: MAFSA.m Строка: 346 Столбец: 35 Несбалансированная или неожиданная скобка или скобка. ›› Ошибка MAFSA при использовании flipdim (строка 21) Требуется два аргумента. Ошибка в MAFSA›snapshot_Callback (строка 347) frame2 = flipdim(frame); - person roger1; 19.06.2013
comment
опечатка. Попробуйте: frame2 = flipdim(frame,1); - person Molly; 19.06.2013
comment
это работает ... я хочу поблагодарить вас за вашу помощь мне ... большое спасибо ... но это сделано для снимка ... как я могу сделать это для кадров ... это мой код для оцифровки ... readerobj= VideoReader(get(handles.recall_the_video,'string')); vidFrames = читать (readerobj); numFrames = получить (readerobj, 'количество кадров'); N = str2double(get(handles.points,'строка')); х=[]; у=[]; п=1; для k = 1: numFrames mov(k).cdata = vidFrames(:,:,:,k); imshow(mov(k).cdata); для j=1:N [a,b]=ginput(1); х(п)=а; у(п)=б; n=n+1; конец конец - person roger1; 19.06.2013
comment
Трудно понять, что там происходит, но я думаю, что вы можете присвоить mov(k).cdata переменной, а затем использовать flipdim, чтобы инвертировать ее перед отображением. Подумайте о том, чтобы принять ответы, если они работают на вас! - person Molly; 19.06.2013
comment
эй, ребята, вы проверили команды axis xy и axis ij? - person anandr; 20.06.2013

Или вы можете обмануть, используя:

set(gca, 'YTicklabel', {'450' '400' '350' '300' '250' '200' '150' '100' '50'})
person m_power    schedule 19.06.2013
comment
@ roger1, вы можете поиграть с количеством элементов в массиве ячеек. - person m_power; 19.06.2013