matlab代码之图像批量读取、处理、保存

1、从文件夹中读取图像数据(图像统一按顺序命名I1.bmp)

读取两种路径下的文件

%1)读取本路径下指定图像
ima=double(imread(strcat('I1.bmp'))); 
%ima=double(imread(strcat(imgName,'.bmp')));
%2)读取子路径TID文件夹里的图像
%ima=double(imread(strcat('./TIDGray/',imgName,'.bmp')));
%imgName应该为字符串类型

2、对图像添加不同方差的高斯噪声噪声,对噪声图像进行保存

添加高斯噪声时要注意图像的范围
图像读取可以double一下,范围[0-255];
或者im2double一下,范围[0-1];
添加高斯噪声的两种方法:

ima=double(imread(strcat('I1.bmp'))); 
%mean=0;sigma=10;
%方法1:最后一个参数是方差
%rima=imnoise(ima,'gaussian',mean,sigma^2);
%方法2
rima=ima+sigma*randn(size(ima));

3、对噪声图像进行非局部均值滤波,用psnr衡量去噪效果,保存数据到I1_psnr.mat文件

注意:matlab自带的psnr函数需要输入的两张图像归一化或者转化为uint8类型,将数据保存在该目录下或子文件夹PSNR里

imgDenoise=imnlmfilt(rima);
PSNR=psnr(ima/255,imgDenoise/255);
save(strcat('I1_psnr.mat'),'PSNR');
save(strcat('TIDNLMresult/result/I1_psnr.mat'),'PSNR');

4、画出不同图像不同噪声下去噪效果的psnr、ssim对比图

matlab有自带的psnr,ssim函数,但是要求数据归一化或者将[0,255]的double类型转为uint8类型
结果图: 如果想得到第二种类型图可以参考这篇文章第四点:matlab代码之plot函数图及灰度图像保存的几种方法

在这里插入图片描述
在这里插入图片描述

5、保存figure图像的几种方法

plot()函数的figure图像的保存用saveas()、print();
图像处理后的图像保存用imwrite();
具体参考:matlab代码之plot函数图及灰度图像保存的几种方法

6、完整代码

clear;close all;clc;
addpath(genpath('TIDGray'))
mkdir('TIDNLMresult')
addpath(genpath('TIDNLMresult'))
for imgID=1:1:2
%for imgID=2   % only one image
imgName=strcat('I',num2str(imgID));
ima=im2double(imread(strcat('TIDGray/',imgName,'.bmp')));
    for sigma=10:5:20
   %for sigma=25    
        rima=ima+sigma/255*randn(size(ima));  % 添加噪声
        %mean=0;
        %rima=imnoise(ima,'gaussian',mean,(sigma/255)^2);%注意最后一项是方差
        imwrite(uint8(rima),strcat('TIDNLMresult/NoiseImg/',imgName,'_',num2str(sigma),'_noisy.bmp'));
        imgDenoise= imnlmfilt(rima);
        PSNR(sigma/5-1)=psnr(ima,imgDenoise); 
        SSIM(sigma/5-1)=ssim(ima,imgDenoise);            
    end
        result(1,:)=PSNR; result(2,:)=SSIM;
        %保存数据到.mat文件
        save(strcat('TIDNLMresult/result/',imgName,'result.mat'),'result');
        sigma=10:5:20;
    	figure;plot(sigma,PSNR,'-*');xlabel('sigma');
    	str1=num2str(PSNR');text(sigma,PSNR,cellstr(str1)) ; 
    	hold on;plot(sigma,SSIM,'-o');
    	str2=num2str(SSIM');text(sigma,SSIM,cellstr(str2)) ; 
    	title(['image:I',num2str(imgID)]);
    	%title(['image:',imgName]);
    	legend('PSNR','SSIM');
    	%保存第i个plot画出来的图
    	print(imgID,'-dpng',['TIDNLMresult/result/I',num2str(imgID),'.png']);
end

文件夹前后对比图:
在这里插入图片描述

大家可以根据需要进行添加删减,如果需要调参数可再加循环处理。
(ps:批出处理用for循环会限制速度,目前有个想法,把不同参数放到矩阵里,充分利用matlab矩阵处理优势,加快速度。等有时间我再出一个代码,大家可以自己尝试一下)
如果对大家有帮助,点个赞留个来过的痕迹^ _ ^

  • 16
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值