2013-03-13 2 views
0

Я хочу добавить текст в изображение с помощью Scilab; сначала я хотел использовать SIVP imshow, но, оказывается, эта функция не возвращает дескриптор. ShowImage IPD на другой же возвращает ручку, так что я мог бы просто сделать:Scilab, добавьте текст к картинке

sceneImgFigure = ShowColorImage(sceneImg,"Scene"); 

for k=1:size(inspectedScene) 
    uicontrol(sceneImgFigure, ... 
       "style", "text", ... 
       "string", mtlb_num2str(inspectedScene(k).alocated_label), ... 
       "position", [inspectionModel(k).centroid(1) inspectionModel(k).centroid(2) 20 20], ... 
       "fontsize",15, ... 
       "BackgroundColor",[0.9,0.9,0.9]); 
end 

Но использование UIControl я использую графические координаты, а не координаты изображения, которые приводят в тексте отображается в неправильном месте. Кроме того, ShowImage обрезает изображение. Вот что я получаю:

enter image description here

Я не могу найти соответствующий ответ на помощь Scilab, так что я вроде застрял здесь. Существует way, чтобы делать то, что я хочу в Matlab, но код, кажется, невозможно перевести на Scilab (без текста и функции getframe в Scilab, для начала ...).

Любая идея?

ответ

0

Вот что я сделал, чтобы решить эту проблему (только в случае, если это может быть, когда-нибудь кому-нибудь пригодится):

ShowColorImage(sceneImg,"Scene"); 
for i=1:size(inspectedScene) 
    xstring(inspectedScene(i).centroid(1)-5, ... 
      size(classDispImg,1)-inspectedScene(i).centroid(2)-5, ... 
      mtlb_num2str(inspectedScene(i).alocated_label)); 
    e = gce(); 
    e.font_size = 1; 
    e.font_foreground = color(0,0,0); 
end 

Что дает:

enter image description here

Я получил часть решения из списка рассылки пользователей Scilab. Как сказал xenoclast, я решил, что мне нужно масштабировать координату по y, используя высоту изображения.

1

Я использую xstring, чтобы разместить аннотации на сюжеты в соответствии с системой координат участка. В зависимости от формата вашего базового изображения вы можете использовать imageplot (из SIVP, я думаю), чтобы нарисовать изображение, в котором я считаю, что пиксельные пиксели изображения отображают координаты.

xstring(inspectionModel(k).centroid(1), inspectionModel(k).centroid(2), mtlb_num2str(inspectedScene(k).alocated_label)) 

Если вы не можете использовать imgplot вы, возможно, придется вручную масштабировать все координаты. Это не так плохо, как кажется - если вы знаете размер своего изображения, вы можете разработать масштабные коэффициенты для вашей системы координат. Я сделал что-то вроде этого, чтобы я мог поставить оси на imageplot при выполнении спектрограмм с помощью набора инструментов вейвлета.