Matlab - как рисовать масштабированные фигуры на изображении

У меня есть изображение с 4 точками на нем, я хочу, чтобы эти точки точно (или очень близко) совпадали с координатами X, Y на фигуре, которую я хотел бы нарисовать поверх этого изображения. Изображение в настоящее время имеет размер 600x600 пикселей, но это можно настроить.

Мой масштаб фигуры идет от

AXIS([388020 388090 5776940 5777010])

Как я могу выровнять свое изображение, чтобы оно соответствовало этому? Значит, Matlab рисует поверх него?

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

%входит в CSV-файл %для каждой строки выводит изображение, которое включает 3 круга и предполагаемое %точка

d = размер (с поправкой на данные) длина = d (1)

для я = [1:1]

%# read and display image
img = imread('hciLab_N.png');
figure('Visible', 'off'),imagesc([388020 388090], [5776940 5777010], img);    

%# make sure the image doesn't disappear if we plot something else
hold on

%axis([388020 388090 5776940 5777010]);

%location estimation
yCoord = dataAdjusted(i,2)
xCoord = dataAdjusted(i,3)

%first  circle y, x, radius
c1Y = dataAdjusted(i,4);
c1X = dataAdjusted(i,5);
c1R = dataAdjusted(i,6);

%second circle y, x, radius
c2Y = dataAdjusted(i,7);
c2X = dataAdjusted(i,8);
c2R = dataAdjusted(i,9);

%third  circle y, x, radius
c3Y = dataAdjusted(i,10);
c3X = dataAdjusted(i,11);
c3R = dataAdjusted(i,12);


%draw location
%rectangle('Position',[xCoord-.5,yCoord-.5,2*.5,2*.5],'Curvature',[1,1], 'EdgeColor', 'r')
[locX, locY] = makeCircle(xCoord, yCoord, .5);
scatter(locX, locY, .2,'b')

%draw circles
%rectangle('Position',[c1X-c1R,c1Y-c1R,2*c1R,2*c1R],'Curvature',[1,1])
%rectangle('Position',[c2X-c2R,c2Y-c2R,2*c2R,2*c2R],'Curvature',[1,1])
%rectangle('Position',[c3X-c3R,c3Y-c3R,2*c3R,2*c3R],'Curvature',[1,1])
[c1X, c1y] = makeCircle(c1X, c1Y, c1R);
scatter(c1X, c1y, .2,'k')
[c2X, c2y] = makeCircle(c2X, c2Y, c2R);
scatter(c2X, c2y, .2,'k')
[c3X, c3y] = makeCircle(c3X, c3Y, c2R);
scatter(c3X, c3y, .2,'k')


% 80 5776978.148    388054.1747
%rectangle('Position',[388054.1747-1,5776978.148-1,2*1,2*1],'Curvature',[1,1], 'EdgeColor', 'g')
[r1X, r1y] = makeCircle(388054.1747, 5776978.148, 1);
scatter(r1X, r1y,.2,'g')


% 87 5776988.825    388043.9639
%rectangle('Position',[388043.9639-1,5776988.825-1,2*1,2*1],'Curvature',[1,1], 'EdgeColor', 'g')
[r2X, r2y] = makeCircle(388043.9639, 5776988.825, 1);
scatter(r2X, r2y,.2,'g')


% 88 5776970.712    388054.2578
%rectangle('Position',[388054.2578-1,5776970.712-1,2*1,2*1],'Curvature',[1,1], 'EdgeColor', 'g')
[r3X, r3y] = makeCircle(388054.2578,5776970.712, 1);
scatter(r3X, r3y,.2,'g')


% 89 5776975.889    388039.8496
%rectangle('Position',[388039.8496-1,5776975.889-1,2*1,2*1],'Curvature',[1,1], 'EdgeColor', 'g')
[r4X, r4y] = makeCircle(388039.8496,5776975.889, 1);
scatter(r4X, r4y,.2,'g')


%title(['Localization of duty cycle ' this_name ]);
saveas(gcf, ['TrilaterationNumber_Adjusted_WithRouters_Scaled' num2str(i)], 'png');

конец


person Michael    schedule 21.06.2011    source источник


Ответы (1)


Вы можете вызывать как image(), так и imagesc() с ограничениями x,y, которые затем используются в качестве пределов осей:

data = makeImage();
image([x0 x1],[y0 y1],data);
axis('xy');

или, если вам просто нужны масштабированные данные:

data = makeData();
imagesc([x0 x1], [y0 y1], data);
axis('xy');
colorbar;

Возможно, вам придется выдать «удерживать все» после того, как вы разместили изображение, прежде чем рисовать что-либо еще.

person Alex    schedule 22.06.2011
comment
Спасибо, теперь я могу рисовать на изображении - и я изменил свой код в исходном вопросе на то, что он есть сейчас. Однако у меня есть одна проблема: функция imagesc() инвертирует мою ось Y... Изображение отображается правильно, но все мои вызовы scatter() уменьшают ось Y, а ось X увеличивают. У вас есть какие-либо прокомментируйте, как сделать так, чтобы оси x и y увеличивались? - person Michael; 22.06.2011