matlab显示文件夹下的多副图像
来源:互联网 发布:实时人口迁徙大数据 编辑:程序博客网 时间:2024/05/01 11:45
最近在写深度学习算法方案的时候,需要在方案书附录中对imagenet数据集可视化,但imagenet数据集中的图像大小并不完全相同,经过一番努力,显示效果才达到导师的要求,故这里把我实现过程中的小问题记录下来,方便以后参考。
在写机器学习方面的paper时,通常需要可视化数据集。比如人脸数据集,通常每一个子文件夹下包含了一类人脸图像(这些人脸图像的大小可以各不相同、文件的命名可以没有任何规律),可视化图像的行数表示人脸图像的类别数,列数表示每一类人脸图像个数。可能大家首先想到的是matlab中的subplot函数,该函数虽然能够将多幅图像显示成M×N的格式,但相邻图像之间的间隔比较大,不符合论文的一般要求。为了解决这个问题,我写了下面的一段matlab函数,其基本思想是先定义待显示图像的属性,比如单幅图像尺寸归一化后的大小、图像的行数和列数、相邻图像的间隔,然后获取当前路径下的所有子文件夹名称,最后依次读取各个子文件夹下的图像,尺寸归一化后填充到初始化矩阵中。整个程序如下,
clc,clear;%图像参数设置height_per_img = 100; width_per_img = 100;img_num_y = 8; img_num_x = 10;distance = 5;%参数设置完成final_img = zeros(height_per_img*img_num_y+distance*(img_num_y-1), width_per_img*img_num_x+distance*(img_num_x-1), 3);final_img = uint8(final_img);p = genpath('C:\Users\HP\Desktop\图像重组');% 获得文件夹data下所有子文件的路径,这些路径存在字符串p中,以';'分割 length_p = size(p,2);%字符串p的长度 path = {};%建立一个单元数组,数组的每个单元中包含一个目录 temp = []; for i = 1:length_p %寻找分割符';',一旦找到,则将路径temp写入path数组中 if p(i) ~= ';' temp = [temp p(i)]; else temp = [temp '\']; %在路径的最后加入 '\' path = [path ; temp]; temp = []; end end %至此获得data文件夹及其所有子文件夹(及子文件夹的子文件夹)的路径,存于数组path中。 %下面是逐一文件夹中读取图像 file_num = size(path,1);% 子文件夹的个数 for i = 1:file_num file_path = path{i}; % 图像文件夹路径 img_path_list = dir(strcat(file_path,'*.jpg')); img_num = length(img_path_list); %该文件夹中图像数量 if img_num > 0 for j = 1:img_num image_name = img_path_list(j).name;% 图像名 image = imread(strcat(file_path,image_name)); %image是要处理的图像 fprintf('%d %d %s\n',i,j,strcat(file_path,image_name));% 显示正在处理的路径和图像名 image=imresize(image,[height_per_img, width_per_img]);%将图像放缩到[100,100] line_index =ceil(j/img_num_x); %求解行号 column_index = mod(j, img_num_x); %求解列号 if(column_index==0) column_index=img_num_x; end %最后一列的情况特殊处理 final_img( (line_index-1)*(height_per_img+distance)+1 : (line_index-1)*(height_per_img+distance)+height_per_img, ... (column_index-1)*(width_per_img+distance)+1 : (column_index-1)*(width_per_img+distance)+width_per_img, :)=image; end end end imshow(final_img, [0, 255])
经验小结
(1)matlab中定义的矩阵是动态矩阵,就是说在初始化矩阵的大小后,后面赋值的时候索引“越界”也是可以的,此时相当于对矩阵的大小进行了延拓,这一点和c语言是不同的!比如下面的例子,
a=[1, 2; 3, 4]
a =
1 2
3 4
a(3, :)=[5, 6]
a =
1 2
3 4
5 6
(2)matlab显示图像的方法有多种,但在一些对图像分辨率要求比较高的场合,比如写的paper中,我们需要注意了。下面我们对比了三种图像显示的方法的效果,(a)先imshow然后copy figure;(b)先imshow然后另存为tif格式的文件;(c)直接将matlab矩阵写入到tif格式的文件中(使用imwrite函数)。因为csdn不支持tif无损格式图像文件的上传,但我观察到它们的图像大小分别为627KB、0.99MB、2.27MB,显然(c)方法的显示效果最好。最后,这里贴一张imagenet部分图像的可视化效果。
- matlab显示文件夹下的多副图像
- Matlab读取文件夹下的图像文件名
- Matlab代码-遍历文件夹下所有指定格式的图像
- Matlab图像的显示
- MATLAB中读取文件夹下所有图像
- matlab用mkdir在指定的文件夹下创建新的文件夹,并把图像保存在该文件夹内
- matlab 图像的扫描显示
- matlab 图像的渐进显示
- matlab 图像颜色的显示
- Matlab显示多幅图像
- Matlab拼接(cat)两副尺寸不同的图片,并显示
- matlab 遍历图像文件夹
- MATLAB读取文件夹及其所有子文件夹内的图像
- [matlab]利用MATLAB拼接指定文件夹中的所有的图像
- 盘副图表不能正常显示,包括他目录下的子文件都不能显示
- 在Matlab中同时显示多幅图像的例子
- matlab一个文件夹里面包含多个文件夹,读取所有文件夹内的图像路径生成list
- Opencv将两幅或多幅IplImage图像同时并行显示在同一副图像上——程序
- BroadcastReceiver的静态注册步骤.txt
- Opencv将数组转化成图像显示出来的方法
- iOS 基于JavaScriptCore 不等webView加载完毕就交互,网页获取原生内容。 webView的高级用法之JS交互,js与oc的相互调用
- 初次使用CKeditor replace使用方法
- hive 数据倾斜
- matlab显示文件夹下的多副图像
- IE下css常见问题总结及解决
- 饼图中扇形点击事件方法
- 添加Logstash Filter以改进集中化日志记录机制
- 导出手机log文件
- 介绍PL/SQL Developer
- HTTP 请求头中的 X-Forwarded-For(XFF)
- 历届试题 连续奇数和
- 【HTML】HTML字符实体