MATLAB 显示多个图像

MATLAB Display Multiple Images

您好,我正在设计一个图形用户界面,用户可以在其中按下一个按钮来 select 图像,然后将它们显示在我创建的轴上。

我知道如何在特定轴上显示一张图像,但我怎么能 select 并显示多张图像?

谢谢

如果文件位于同一文件夹中,您可以使用:

[filename, pathname, filterindex] = uigetfile( {file_types_to_display}, 'Window_Title', 'MultiSelect', 'on');

这将生成一个包含 selected 文件名和路径的单元格。然后,您可以使用 strcat 或类似工具生成文件的完整路径,然后使用 load 将它们添加到工作区。

uigetfile 不适用于多个文件夹中的文件。

另一种选择是进行某种递归搜索,以根据文件扩展名或名称列出文件夹中的所有文件,然后继续加载所需的文件。这样您将拥有文件夹和子文件夹中的所有文件,因此您可以使用多个文件夹中的图像。在 MATLAB Exchange 中搜索递归文件搜索代码。

编辑 1: 要使用 uigetfile 显示 selected 图像,您需要将代码放入 select 并在 guide 生成的按钮回调下方显示图像。

function pushbutton1_Callback(hObject, eventdata, handles)
%multi-file selection
[filename, pathname, ~] = uigetfile({  '*.jpg'}, 'Pick 3 files',...
'MultiSelect', 'on');

%generation of strings containing the full path to the selected images.
img1 = strcat(pathname, filename{1});
img2 = strcat(pathname, filename{2});
img3 = strcat(pathname, filename{3});

%assign an axes handle to preced imshow and use imshow to display the images
% in individual axes.
axes(handles.axes1);
imshow(img1);
axes(handles.axes2);
imshow(img2);
axes(handles.axes3);
imshow(img3);

上面的代码允许您 select 文件夹中的任意数量的图像,但是它只显示生成的单元格中的前 3 张图像 'filename'。为了能够 select 任意数量的图像,然后滚动浏览它们,您还需要两个用于前进和后退的按钮回调..

function pushbutton1_Callback(hObject, eventdata, handles)
%assign global variable so the other pushbuttons can access the values
global k num_imgs pathname filename

%uigetfile in multiselect mode to select multiple files
[filename, pathname, ~] = uigetfile({'*.jpg'},...
    'Pick 3 files',...
    'MultiSelect', 'on');
%initialisation for which image to display after selection is made.
k = 1;
%dicern the number of images that where selected
num_imgs = length(filename);
%create string of full path to first image in selection and display
%the image
img1 = strcat(pathname, filename{k});
axes(handles.axes1);
imshow(img1);

function pushbutton2_Callback(hObject, eventdata, handles)
global k num_imgs pathname filename
%using global values of k create if statement to stop scrolling beyond the
%number of available images.
if k > num_imgs
    %if the index value of the image to be displayed is greater than the
    %number available default to the last image in the list
    k = num_imgs;
else
    %iterate upwards with each click of pushbutton2 to display the next
    %image in the series.
    k = k + 1;
    img1 = strcat(pathname, filename{k});
    axes(handles.axes1);
    imshow(img1);
end

function pushbutton3_Callback(hObject, eventdata, handles)
global k num_imgs pathname filename
if k < 1
    %if the index value of the image to be displayed is less than 1
    %default to the first image in the list
    k = 1;
else
    k = k - 1;
    img1 = strcat(pathname, filename{k});
    axes(handles.axes1);
    imshow(img1);
end

EDIT2:@user3755632 我不确定我是否理解。 filename 是一个字符串,您可以将字符串输入 imshow 以显示图像,只要该字符串包含文件名和路径(如果它位于工作目录之外)。您不使用 uigetfile 来 select 图像吗? (由于缺乏声誉,无法对问题发表评论)