Matlab基本操作
1.遍历图像
1.1遍历文件夹图像
imgPath = 'E:/imageData/'; % 图像库路径
imgDir = dir([imgPath '*.jpg']); % 遍历所有jpg格式文件
for i = 1:length(imgDir) % 遍历结构体就可以一一处理图片了
img = imread([imgPath imgDir(i).name]); %读取每张图片
end
1.2遍历文件夹子目录内所有图像
imgDataPath = 'E:/imageData/';
imgDataDir = dir(imgDataPath); % 遍历所有文件
for i = 1:length(imgDataDir)
if(isequal(imgDataDir(i).name,'.')||... % 去除系统自带的两个隐文件夹
isequal(imgDataDir(i).name,'..')||...
~imgDataDir(i).isdir) % 去除遍历中不是文件夹的
continue;
end
imgDir = dir([imgDataPath imgDataDir(i).name '/*.jpg']);
for j =1:length(imgDir) % 遍历所有图片
img = imread([imgDataPath imgDataDir(i).name '/' imgDir(j).name]);
end
end
2.字符数组操作
以下代码实现对不同名称的图像进行高斯滤波
name={'Lena','Monarch','House'};//字符串元胞数组
D={'10','20','30','40','50','75','100'};
for i=1:length(name)
for j=1:length(D)
[name{i},D{j}]//读取内容用大括号{},若使用(),则输出还是元胞数组,不是字符串
path=['testimages\\',[name{i},D{j}],'.png'];//字符串拼接用[]
img=imread(path);
sigma=str2num(D{j});
W = fspecial('gaussian',[sigma,sigma],1);
result = imfilter(img, W,'conv');
psnr=getPSNR(img,result);
imwrite(result,['testimages\\',[name{i},D{j}],'-psnr-',num2str(psnr),'.png']);
end
end
//计算峰值信噪比
function [psnr]=getPSNR(src,dst)
diff=src-dst;
MSE= sum(diff(:).*diff(:))/prod(size(src));
psnr = 10*log10(255^2/MSE);
end
3.寻找峰值
findpeaks 寻找峰值函数
pks = findpeaks(data)
[pks,locs] = findpeaks(data) ------pks 对应峰值,locs 对应峰值位数
[...] = findpeaks(data,'minpeakheight',mph)----mph 设定峰值的最小高度
[...] = findpeaks(data,'minpeakdistance',mpd)----mpd 设定两峰值间的最小间隔数
[...] = findpeaks(data,'threshold',th)
[...] = findpeaks(data,'npeaks',np)
[...] = findpeaks(data,'sortstr',str)
4.化简多项式
//for example
syms theta L x1 z1 x2 f dX
z1=L.*f.*f/((x2-x1).*f.*cos(theta)-(f.*f+x1.*x2).*sin(theta));
dz=dX.*sin(theta).*z1.*z1/((L.*f.*f)-dX.*sin(theta).*z1);
simplify(dz)