实验题目:
第一题很简单,就是matlab矩阵的简单应用和函数编写的简单应用
主要是第二题。
很多人一开始想到的是这个思路:
1.用matlab里的构造函数
2.用plot画图功能画圆
3.再用fill函数填色
但这种方法最终会发现根本填不上灰色,哈哈哈。
就算不是灰色,一开始彩色的,再用将图像变成灰度图函数也发现不行,和题目所给的图不一样。
正确思路是应用一个叫 mat2gray 的函数,这个函数从名字可以看出功能:matrix(矩阵) to gray(灰度图),其内涵机理其实是将一个给定的矩阵经过运算,得到一个所有值都为0~1之间的矩阵,不改变矩阵大小,(因为灰度图转化为矩阵之后要求数值为0~1,0是黑色,1是白色。)
最后mat2gray 函数将处理后的矩阵用imshow()函数即可显示出来了。
现在最难的就是得到题目条件要求的初始矩阵。
1.先构建一个至少大于100的方阵,背景的值都设为64.
2.接着用2个for循环遍历方阵,再if条件限制半径为50或100的圆内赋给不同的灰度值。
3.再构建一个一摸一样的方阵用[-16,16]的随机数赋值作为噪声矩阵。
4.将两个方阵线性相加。
5.显示图像即可。
具体matlab代码如下:
background=zeros(255);%定义一个255×255矩阵,每个像素灰度值都设为64
background(:,:)=64;
for a=1:255%将50像素为半径的圆内灰度值改为192,半径50到100之间的圆环灰度值设为128
for b=1:255
if (a-128)^2+(b-128)^2 <= 10000
background(a,b)=128;
end
if (a-128)^2+(b-128)^2 <= 2500
background(a,b)=192;
end
end
end
subplot(1,2,1);%在左边显示没加噪声的图像
I1=mat2gray(background);
imshow(I1);
subplot(1,2,2);%在右边显示加了噪声的图像
noise=randi([-16,16],255);
background=background+noise;
I2=mat2gray(background);
imshow(I2);
运行结果如下:左边为没加噪声的图像,右边是加了随机均匀噪声的图像。
实验过程中遇到的玄学问题:
我将脚本命名为 gray.m 之后,运行总是报错,不能显示figure窗口。
后经过百度才知道,原来是因为matlab本身工具箱toolbox里就有一个gray.m的文件,而且我还保存到了matlab安装文件夹下了,才会出现玄学错误。
防止此类问题发生的方法:
1.不要把脚本命名为与matlab本身工具箱toolbox里有的文件一样的名字。
2.不要把脚本保存在安装目录下,最好放在另一个独立的工作区里。
哈哈。