MATLAB: Показать изображение в оригинальном размере - PullRequest
7 голосов
/ 15 сентября 2009

Можем ли мы показать изображение в оригинальном размере в MATLAB?

Прямо сейчас, когда мы показываем, он точно соответствует размеру окна изображения. Однако я хочу показать изображение в оригинальном размере. Когда изображение имеет больший размер, в окне изображения должна появиться полоса прокрутки. Это позволит пользователю просматривать изображение в оригинальном размере.

Есть идеи, как этого добиться? Возможно ли это?

Ответы [ 6 ]

8 голосов
/ 15 сентября 2009

Я считаю, что вам нужна утилита IMTOOL (которая является частью Toolbox Tool * ). Это графический интерфейс пользователя MATLAB, который позволяет просматривать изображения в оригинальном размере (увеличение 100%) с помощью горизонтальных и вертикальных ползунков.

EDIT:

Приведенное выше решение отобразит ваше изображение в новом окне рисунка (графический интерфейс IMTOOL). Если вы не хотите, чтобы изображение появлялось в новом окне, а вместо этого хотите настроить его размер в собственном окне, это будет более сложным. Чтобы отрегулировать размер изображения, которое, как я полагаю, вы отображаете на наборе осей с помощью команды IMAGE , вам необходимо настроить количество свойств осей для осей содержащий изображение. Ниже перечислены свойства, которые вы, вероятно, в конечном итоге измените:

  • 'Units': Например, можно установить 'inches', 'centimeters' или 'pixels'.
  • 'Position': управляет расположением осей в окне рисунка в единицах, управляемых свойством 'Units'.
  • 'DataAspectRatio'/'PlotBoxAspectRatio': Они управляют относительным масштабированием осей и окружающего графического окна.
  • 'XLim'/'YLim': минимальные и максимальные значения осей.

После того как размер и масштаб изображения будут отображаться так, как вы хотите, части изображения могут находиться за пределами области окна рисунка. К сожалению, горизонтальные и вертикальные ползунки не будут автоматически добавлены . Вам нужно будет создать эти элементы управления ползунком самостоятельно, используя функцию UICONTROL . Вам нужно будет написать функции обратного вызова для элементов управления ползунком, чтобы они перемещали оси в окне.

Если вы решите пойти по вышеуказанному пути, вот несколько ссылок на учебные пособия по графическому интерфейсу, которые могут вам помочь: учебник по слайдеру на blinkdagger , пост в блоге Дуга Халла и видео от Дуга по основам GUIDE .

2 голосов
/ 15 сентября 2009

Слайдер Matlab имеет проблему, заключающуюся в том, что он вызывает обратный вызов только для MouseUp, а не для MouseMove, поэтому реализация чистого matlab всегда будет выглядеть странно.

Лучший путь - перейти на Java в Matlab. Таким образом, вам не нужно заново реализовывать всю логику прокрутки. Вы можете поместить компонент Java Swing GUI в окно Matlab, это совсем не сложно.

В частности, вы должны использовать Swing JScrollPane Class. С помощью функции Matlab javacomponent() вы можете поместить ее в окно Matlab.

В Интернете существует множество примеров того, как получить изображение в области прокрутки, просто найдите JScrollPane image. Вы можете использовать классы Java внутри matlab с обычным синтаксисом Matlab (не нужно ключевое слово new, ecc.)

1 голос
/ 14 апреля 2018

Забавно, здесь никто еще не упомянул truesize:

truesize(fig) регулирует размер дисплея таким образом, чтобы каждый пиксель изображения покрывал один пиксель экрана. Если вы не укажете фигуру, truesize регулирует размер отображения текущей фигуры.

1 голос
/ 14 апреля 2018

Этот код на форуме ответов MATLAB создает окно, в котором изображение показывается в собственном разрешении (100%), а также дает окно «навигации», показывающее, куда просматриваемый участок изображения (в главном окне) помещается в все изображение.

% Create a scroll panel with a Magnification Box and an Overview tool.
hFig = figure('Toolbar','none',...
              'Menubar','none');
hIm = imshow('saturn.png');
hSP = imscrollpanel(hFig,hIm); % Handle to scroll panel.
set(hSP,'Units','normalized',...
        'Position',[0 .1 1 .9])

% Add a Magnification Box and an Overview tool.
hMagBox = immagbox(hFig,hIm);
pos = get(hMagBox,'Position');
set(hMagBox,'Position',[0 0 pos(3) pos(4)])
imoverview(hIm)

( Ссылка на сообщение на форуме )

1 голос
/ 19 февраля 2012

попробовать: рисунок, imshow (your_image), изображение оси Это меняет ось изображения на оригинальный размер

0 голосов
/ 14 апреля 2018

Чтобы отобразить изображение в оригинальном размере (1: 1), нужно позаботиться о трех вещах:

  • Размер фигуры и единиц.
  • Размеры осей и единицы измерения.
  • Соотношение сторон данных осей.

После того, как все это установлено в соответствии с размером изображения, даже с помощью функции image() MATLAB, можно генерировать изображение 1: 1.

Вот пример кода:

%% Load Data

mI = imread('7572939538_04e373d8f4_z.jpg');

numRows = size(mI, 1);
numCols = size(mI, 2);


%% Setings

horMargin = 30;
verMargin = 60; %<! Title requires more


%% Display Image

vFigPos = [100, 100, numCols + (2 * horMargin), numRows + (2 * verMargin)]; %<! [Left, Bottom, Width, Height]
vAxesPos = [horMargin, verMargin, numCols, numRows];

hFigure = figure('Position', vFigPos, 'Units', 'pixels');
hAxes   = axes('Units', 'pixels', 'Position', vAxesPos);
hImageObj = image(hAxes, mI);
set(hAxes, 'DataAspectRatio', [1, 1, 1]);
set(get(hAxes, 'Title'), 'String', {['Landscape by Roman Vanur']}, ...
    'Fontsize', fontSizeTitle);
set(hAxes, 'XTick', []);
set(hAxes, 'YTick', []);

Результат (на основе изображения - Пейзаж Романа Ванура ):

Landscape by Roman Vanur

Полный код в моем Переполнении стека Q1427602 Github Repository .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...