Matlab 图片16位转24位_批量转换
原理是先将16位图片转换成8位,再通过升维的方式,将一维堆叠为三维
picture_16_bit_to_24_bit.m(主代码)
%****************** 图片16位转24位
%%
clear;clc;tic;
pathold=cd; % 当前路径
path='E:\'; % 找到文件夹路径
path1='E:\'; % 处理后数据存放主目录
subpath=obtain_subfolder_path(path); % 获取当前文件夹下的子文件夹路径,存储在元组中,第一个为母文件路径;
first_path_length=size(subpath{1},2); % 主目录字符长度
days=size(subpath,2); % 获取subpath列长度,子文件夹数量
for i=2:1:days % days,即要处理的文件数(一个文件是一天的数据),从2开始的原因是i=1是主文件夹目录,i=2后面才是子文件夹目录
if(exist(subpath{i},'dir')~=0) % 如果存在子文件(个数),目录类型,不等于0
cd(subpath{i}); % 切换到当前目录
file= ls('*.png'); % ls -列出文件名,列出每个后缀为.png的文件,并返回到file中,file是一个列向量
cd(pathold);
filenum=size(file,1); % 取矩阵file的行的长度
if(filenum~=0)
j=size(subpath{i},2); % j就等于子文件(第i个)的,列的长度
path2=strcat(path1,subpath{i}(first_path_length:j)); % 生成新的子文件夹
mkdir(path2); % 生成新文件夹
for k=1:filenum
a=imread(strcat(subpath{i},file(k,:))); % imread读取图像,strcat串联字符串,file(K,:)展开file的第j行
b=(double(a)/255^2)*255; % 将16位图片灰度值在double模式下等比计算为8位时呈现的值
b=uint8(b); % 将double变量转换成8位格式
c(:,:,1) = b;
c(:,:,2) = b;
c(:,:,3) = b; % 8转24位,即增加三个维度,每个维度数值都相同就行了
imwrite(c,strcat(path2,file(k,:)));
end
end
end
end
toc;
obtain_subfolder_path.m(函数)
function [ path ] =obtain_subfolder_path( input_path )
% 获取指定文件夹的子文件夹路径
% 元胞的第一个元素为母文件夹路径,其余为母文件夹下的子文件夹路径,如果母文件夹下不存在其他子文件夹则输出路径中只有母文件夹文件夹
% input_path --输入文件地址,用时可用path代替这里,然后用path=' '来添加文件地址
p=genpath(input_path); % 获取当前文件夹中的子目录文件夹名称,保存为一行,且用‘;’号隔开
length_p=size(p,2); % 获取行的字符长度,即保存的子目录矩阵为一行多列,这里的2就是求的列数(1就是行数)
% 子文件目录数,第一个地址为主目录地址,实际子目录数从第二个起
path={}; % 创建一个元包用来存放地址
temp=[];
index=1; % 地址数目指针(就是说地址数目为1?)
for i=1:1:length_p % 依次查询p中的地址字符串(从1到length_p长度,步长为1)
if p(i)~=';' % ‘~=’表示不等于的意思,p(i)即p字符串中的第i个字符
temp=[temp p(i)];
else
temp=[temp '\'];
path{index}=temp;
index=index+1;
temp=[];
end
end
clear index p temp;
end
% 1、先搜索母文件下的所有子文件;
% 2、将其存储为1行N列的字符串,用p来表示;
% 3、用size(p,2)函数获取p字符串的长度,用length_p来表示,且表示为一个数;
% 4、然后用for循环,从1至length_p,步长为1,如果p(i)即p字符串中的第i个字符不等于';',则在temp中键入此字符,否则就键入‘\’。
% 5、然后将该值存储在path{}元包中,path{index}即指针加一,表示path中第几个字符(如index=2就是path中第二个字符),是用来循环扩充path{}的,最后path{}中的字符串可能为‘***\***\***’。
% 6、所以,该函数最后输出的就是path{}