matlab-批处理图像

在matlab上批处理上百张.png图像,目的是将所有图片进行增强(如histeq直方图均衡),然后写入指定文件夹,图像名称不变。

思路:

  1. 用dir函数读所有图片的信息并生产一个结构组,dir详见matlab的help在这里插入图片描述
  2. 利用name读取每个png文件的图像构成元胞pngcell
    matlab-批处理图像_第1张图片
    注意:对cell的操作花括号和圆括号的不同:
    通过小括号()里面加下标,访问cell数组中的数据,返回的是对应的cell。
    通过大括号{}里面加下标,访问cell数组中的数据,返回的是对应cell的内容。
    如对本程序中的pngcell操作:

matlab-批处理图像_第2张图片matlab-批处理图像_第3张图片

  1. 利用dir中的name信息和pngcell的图像信息再构造一个只含文件名图像数据的结构组pngfile
    matlab-批处理图像_第4张图片
  2. 接下来写个循环对图像进行操作就行,可以用imwrite将图像保存至指定位置

代码:

clear all
%读取文件夹中的.png文件
src='D:\Files\diploma_project\dark\darkface163\';
finf = dir([src,'*.png']); 
%根据文件夹中的文件格式,选择读取类型,如.jpg、.png等.其中finf是一个结构体数组,...
...包含的darkface下所有png文件的名称、修改时间大小、是否文件夹等属性。

n = length(finf);                   %数组大小,即图片的数量
pngcell = cell(n,1);            %生成n*1的元胞
for k=1:n
    filename = [src,finf(k).name]; %构造第k个文件的绝对路径(合并文件路径和文件名)
    pngcell{k} = importdata(filename);%将文件夹中的文件每个作为一个元胞按行存储在元胞中
    pngfile(k).name= finf(k).name; %创建新结构组,并设定名称
    pngfile(k).srcpng=cell2mat(pngcell(k));%将图像数据导入结构组
end
%该节生成了一个含有文件名和图像数据的结构组pngfile,...
...名称排序序是matlab自动读取的字符串排序型,如1,10,1112...

%% 直方图均衡批处理
dst='D:\Files\diploma_project\dark\darkface163_histeq\';
for k=1:n
    B=histeq(pngfile(k).srcpng);    %直方图均衡
    %imshow(B);
    imwrite(B,[dst,pngfile(k).name])  %将处理后的图片保存到目标文件夹,命名与源文件相同
end

你可能感兴趣的:(Matlab,Digital,Image,Processing)