2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 изменение верхних пределов zoom (-) в matlab figure
Сообщение03.09.2018, 14:55 


07/10/15

2400
Пользователь matlab знают, что в графическом окне figure имеется инструмент zoom (значки лупы с плюсом и минусом).
Переходя в режим zoom(+) и щелкая мышью на выбранном участке изображения происходит его увеличение, в режиме zoom(-), наоборот - масштаб уменьшается, но появляются невидимые ранее участки изображения. В режиме zoom(-) есть верхний предел, равный размерам просматриваемой картинки. Это не позволяет уменьшать масштаб, если изображение развёрнуто полностью, и скрытых участков нет.
Это вполне разумно, так как уменьшение масштаба носит целью увидеть скрытые за границами участки, а если таковых нет, то в операции нет никакого смысла.
Однако, иногда, из за этого возникают затруднения. Так, например, если изменить изображение не путём стандартного вывода, через функции plot, imshow и т.д., а путём присвоения нового значения графическому примитуву
Используется синтаксис Matlab M
>>figure.Children(2).Children(end).CData=NewImage;
 

(это позволяет избежать перерисовки всего содержимого figure, что важно при большом количестве элементов изображения),
то верхние пределы zoom (-) остаются прежними. Из за этого не удаётся полностью развернуть новое изображение с помощью zoom (-), если оно больше прежнего, что весьма неудобно. Хотя другими путями это сделать всё таки можно, например, через изменение свойств XLim, YLim объекта Axes. Вылетевшие за границы обзора участки нового изображения можно так же увидеть, сдвигая его инструментом Pan (такая стилизованная рука, сжимающаяся при нажатии мыши).
Всё же хотелось бы иметь возможность делать это и с помощью zoom. Но я ни как не могу найти, какие свойства Axes для этого нужно изменить.

Может быть кто то знает ответ?

 Профиль  
                  
 
 Re: изменение верхних пределов zoom (-) в matlab figure
Сообщение04.09.2018, 03:10 
Заслуженный участник


12/07/07
4529
У меня (старая) версия Matlab — R2013: доступ к свойствам при помощи функций set и get (в новых версиях можно переделать).
Используется синтаксис Matlab M
Im=imread('delme.jpg');          
h = imshow(Im);
NewIm=imrotate(Im,45,'bicubic');
set(gca, 'XLimMode', 'auto'); set(gca, 'YLimMode', 'auto');
set(h, 'CData', NewIm);
В результате будет выведена вся картинка, повёрнутая на 45 градусов.
Вложение:
DEmo_1.PNG
DEmo_1.PNG [ 25.83 Кб | Просмотров: 621 ]
zoom (+) позволит отобразить в увеличенном виде часть картинки
Вложение:
DEmo_2.PNG
DEmo_2.PNG [ 33.89 Кб | Просмотров: 621 ]
Затем zoom (-) позволит вернуться к исходному виду.

 Профиль  
                  
 
 Re: изменение верхних пределов zoom (-) в matlab figure
Сообщение04.09.2018, 10:05 


07/10/15

2400
Всё верно, тогда сразу разворачивается на всю. У меня тоже получилось.
Но это с помощью команды
Используется синтаксис Matlab M
set(gca, 'XLimMode', 'auto'); set(gca, 'YLimMode', 'auto');
 

Придётся создавать на панели инструментов кнопку, чтобы разворачивала изображение при необходимости.

Получается, если менять XLim, YLim с омощью инструмента zoom - всё работает нормально. Но если изменить их программно, например так
Используется синтаксис Matlab M
 hh.Children(2).XLim=[0.2 0.7];
 hh.Children(2).YLim=[0.3 0.5];
 


то снова получается как я описывал. Заданные новые значения XLim, YLim воспринимаются как максимально возможные и развернуть изображение, просто двойным щелчком в режиме zoom не получается.
Я пробовал, сначала, задав XLimMode, YLimMode 'auto' вывести всё изображение, а потом изменить XLim, YLim на нужные, в надежде, что matlab запомнит истинные размеры и zoom после этого заработает. Но увы - чуда не произошло.

Попробую разобраться, в чём тут может быть дело

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group