?Matlab仿真模拟的4个非常基础!!实例(附源码)

2021/5/14 12:25:19

本文主要是介绍?Matlab仿真模拟的4个非常基础!!实例(附源码),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!


实例一: 计算峰值信噪比

(1)将图像a4g.bmp按质量等级分别为10、30、50、70、90存储成jpg文件,并分别命名为a4g010.jpg、a4g030.jpg、…… 、a4g090.jpg

(2)观察并说明jpg文件质量的变化情况

(3)计算压缩比,并画出压缩比随质量等级变化的曲线。

(4)读取文件:a4g010.jpg、a4g030.jpg、…… 、a4g090.jpg;

(5)计算峰值信噪比并画出峰值信噪比随质量等级变化的曲线。

要求:

  • 绘图显示文件压缩比随存储jpg文件时设定的质量等级变化的曲线

  • •曲线用实线绘制,标记每个数据点;

  • •X轴标题:存储时的质量等级q

  • •Y轴标题:压缩比

  • •曲线图标题:图像存储成jpg文件后的压缩比

  • 绘图显示峰值信噪比PSNR随存储jpg文件时设定的质量等级变化的曲线:

  • •曲线用实线绘制,标记每个数据点;

  • •X轴标题:存储时的质量等级q

  • •Y轴标题:值信噪比PSNR(db)

  • •曲线图标题:图像存储成jpg文件后的峰值信噪比

  • 说明jpg文件质量随存储jpg文件时设定的质量等级变化而变化情况。


A=imread('C:\Users\lenovo\Desktop\a4g.bmp');
x=[10,30,50,70,90];
q =10;
imwrite(A, 'a4g010.jpg', 'Quality',q) ;
q =30;
imwrite(A, 'a4g030.jpg', 'Quality',q) ;
q =50;
imwrite(A, 'a4g050.jpg', 'Quality',q) ;
q =70;
imwrite(A, 'a4g070.jpg', 'Quality',q) ;
q =90;
imwrite(A, 'a4g090.jpg', 'Quality',q) ;
file1 ='a4g010.jpg'; info1 = imfinfo(file1);
file2 ='a4g030.jpg'; info2 = imfinfo(file2);
file3 ='a4g050.jpg'; info3 = imfinfo(file3);
file4 ='a4g070.jpg'; info4 = imfinfo(file4);
file5 ='a4g090.jpg'; info5 = imfinfo(file5);
info=[info1,info2,info3,info4,info5];
z=zeros(1,5);
for i=1:5
z(i)=(info (i).Width*info (i).Height*info (i).BitDepth/8)/info(i).FileSize;
end
figure,subplot(2,1,1);
plot(x,z,x,z,'r*');
title('图像存储成jpg文件后的压缩比');
xlabel('存储时的质量等级q');
ylabel('压缩比'); [M,N]=size(A) 
% A的图像类型
I1=imread('a4g010.jpg');
I2=imread('a4g030.jpg');
I3=imread('a4g050.jpg');
I4=imread('a4g070.jpg');
I5=imread('a4g090.jpg');
s1=sum(sum((I1-A).*(I1-A)));
s2=sum(sum((I2-A).*(I2-A)));
s3=sum(sum((I3-A).*(I3-A)));
s4=sum(sum((I4-A).*(I4-A)));
s5=sum(sum((I5-A).*(I5-A)));
s=[s1,s2,s3,s4,s5]/(M*N);
PSNR1=10*log10(255*255/s1);
PSNR2=10*log10(255*255/s2);
PSNR3=10*log10(255*255/s3);
PSNR4=10*log10(255*255/s4);
PSNR5=10*log10(255*255/s5);
PSNR=[PSNR1,PSNR2,PSNR3,PSNR4,PSNR5];
subplot(2,1,2);
plot(x,PSNR,x,PSNR,'g*');
title('图像存储成jpg文件后的峰值信噪比'); xlabel('存储时的质量等级q');
ylabel('值信噪比PSNR (db)');

结果:

image.png


将jpg文件质量的变化情况于原图像进行对比,可以看出a4g010.jpg与a4g030.jpg的图像质量退化,在图像渐变区域出现了明显的伪轮廓,而a4g070.jpg与a4g090.jpg与原图像接近。

在一定程度上,合理地选择质量等级,可以在保证图像质量不受损的同时极好地压缩图像文件存储所需的空间。

image.png

可以看出随着质量等级增加,压缩比呈现下降趋势且逐渐趋于平缓。峰值信噪比逐渐增加,峰值信号比越大,失真越小。


实验二:车牌配准

(1)读取图像文件:q6g.jpg生成新的车牌参考图像,该图像大小为120*330,其中间100*310大小的矩形设

(2)为白色,周围为黑色,显示该图像;

(3)假设图像为仿射变换,手工选择的4个约束点,配准q6g.jpg中的车牌,并显示配准后的图像;

(4)q6g.jpg中的车牌相对于车牌参考图像的仿射变换矩阵是?

要求:

•生成新的车牌参考图像

•用cpselect选择对应点

•配准图像

•生成仿射变换矩阵

J = imread('q6g.jpg');
I=zeros(120,330);   
%生成配准图片
I(11:110,11:320)=255;
I=uint8(I); 
%生成参考图像
fixedImg = I;
%读取标准图片
moveImg= J;
%读取待校正图片
cpselect(moveImg, fixedImg)
mytform =cp2tform(movingPoints,fixedPoints, 'projective');
%投影变化的矩阵
registered = imtransform(moveImg, mytform, 'bicubic');
imshow(moveImg)
figure
imshow(registered)

结果:

image.png

仿射变换后矩阵:

[0.452557035849887 -0.0182555419386009 -0.000205964592229536

-0.262614728008215 0.514898233708705 -0.000181935737378558

11.4245554940711     5.55007729744598     0.991207420575313]

仿射变换后矩阵的逆:

[2.24067049323949   0.0742766441047883 0.000479225993082578

1.13145041893112    1.97580325295362    0.000597763831873105

-32.1610805322007   -11.9192392789685     1.00000000000000]

实验三:利用JND进行图像增强

(1)JND表示人类心理上恰好能察觉的最小灰度差异(JND: Just Noticeable Difference),又称为最小可觉差 、辨别阈。它与背景灰度的关系

(2)x为背景灰度,当 x

(3)对任意输入灰度x,其输出灰度y:                        

(4)k为伸缩系数,可根据输入图像的不同设置。

(5)简单起见,可令k=0.5~0.7;注意:灰度x,y的类型为double可能存在灰度y>255的情况,可以直接截断,或令大于255的y值都等于255.

要求:

•读图像A •计算灰度映射函数(ye文件夹下任意一个文件)

•得到灰度映射后的图像B

•显示图像A、B

•写图像B至文件内

A0=imread('C:\Users\lenovo\Desktop\数字图像处理实验Pic\ye04.png');
A=rgb2gray(A0);
AA=double(A);
x1=0:47;
y1=22.9818*exp(-0.0571*x1);
x2=48:255;
y2=2.1298-0.01376*x2+4.851*10^(-5)*x2.*x2;
y3=[y1,y2];
[m,n]=size(y3);
y4=zeros(m,n);
y4=cumsum(y3);%向量累加函数cumsum(),简化计算
y4(1)=0;
A1=0.6*y4(AA+1);
B=uint8((A1));
subplot(1,2,1),imshow(A),title('输入图像');
subplot(1,2,2),imshow(B),title('输出图像');

结果:

image.png

实验四:空间滤波器的应用

(1)读取Pepper_g.bmp文件,在图像中添加椒盐噪声:J = imnoise(I,'salt & pepper',0.02);

(2)分别利用5*5的均值滤波器和中值滤波器对图像进行滤波,存储图像文件(名字分别为Pepper_g1.bmp,Pepper_g2.bmp);

(3)在一个图形窗口的4个子窗口内的分别显示原始图像、噪声图像和两种方法处理后的图像,比较处理结果,并进行简单的分析。

要求:

•读图像Pepper_g.bmp

•图像中添加椒盐噪声

•对图像进行滤波

•分别显示原始图像、噪声图像和两种方法处理后的图像

im=imread('C:\Users\lenovo\Desktop\数字图像处理实验Pic\Pepper_g.bmp');
figure,subplot(2,2,1),imshow(im),title('原始图像')
A = imnoise(im,'salt & pepper',0.02);
subplot(2,2,2),imshow(A),title('添加噪声')
H = fspecial('average', [5 5]) ;
B= imfilter(A,H,'symmetric'); 
%在边界运算时,处于边界之外值用中心镜像的方式获得
subplot(2,2,3),imshow(B),title('5*5均值滤波器')
C =medfilt2(A, [5 5]);
subplot(2,2,4),imshow(C),title('5*5中值滤波器')
imwrite(B,'数字图像处理实验Pic\Pepper_g1.bmp');
imwrite(C,'数字图像处理实验Pic\Pepper_g2.bmp');

结果:

image.png

可以得出:均值滤波和和中值滤波都可以起到平滑图像,滤去噪声的功能。均值滤波采用线性的方法,平均整个窗口范围内的像素值,均值滤波本身存在着固有的缺陷,即它不能很好地保护图像细节,也破坏了图像的细节部分,从而使图像变得模糊。均值滤波对高斯噪声表现较好,对椒盐噪声表现较差。

中值滤波采用非线性的方法,在平滑脉冲噪声方面非常有效,同时保护图像尖锐的边缘,选择适当的点来替代污染点的值,比同尺寸的线性平滑滤波器的对图像的模糊程度明显要低,对椒盐噪声表现较好,对高斯噪声表现较差。

希望对您有用,有问题随时咨询,有错误期待指出!



这篇关于?Matlab仿真模拟的4个非常基础!!实例(附源码)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程