RAND函数一个数如何随机加减0.002?

注明:源于对《基于演化博弈的装配式建筑应用研究》-金倩-4.4.1.1的政府与开发商的复制动态方程的matlab仿真

%政府与开发商复制动态方程
plot(Y(:,1),Y(:,2)) %(逗号前是行,逗号前是列,冒号表示从第一行到最后一行;(Y(:,1)表示第一列的所有元素,相当于dx/dt,Y(:,2))表示第二列的所有元素相当于dy/dt

说明:图像复原是一种客观的操作,通过使用退化现象的先验知识重建或恢复一副退化的图像;图像在形成、传输和记录的过程中,由于受多种原因的影响,图像的质量会有下降,典型表现为图像模糊、失真、噪声等,这一降质的过程称为图像的退化。而图像复原试图利用退化现象的某种先验知识(即退化模型),把已经退化了的图像加以重建和复原。其目的就是尽可能地减少或去除在获取图像过程中发的图像质量的下降(退化),恢复被退化图像的本来面目。

如图所示,用退化函数对退化过程建模,它和附加噪声选项一起,作用于输入图像f(x,y),产生一幅退化的图像g(x,y):

如果H是线性的、空间不变的过程,那么退化图像在空间域将由下面的式子表示:

说明:能够模拟噪声的行为和效果的能力是图像复原的核心。下面我们将对两种基本噪声模型进行演示:空域中的噪声(用噪声概率密度函数来描述)以及频域中的噪声(用噪声的各种傅里叶特性来描述)。

  • imnoise 能够产生可用类型和参数的噪声。
  • imnoise2能够产生一个M*N的噪声数组R,它不以任何方式缩放,另一个主要不同是imnoise输出一个有噪声的图像,而imnoise2产生噪声模式本身。
  • imnoise3产生周期噪声模型。

(1)用imnoise函数为图像添加噪声

在matlab中采用imnoise函数使图像添加上噪声。其基本语法如下:

注意: 使用函数之前需要将图像转换成范围在【0,1】的double类型!

这个函数的语法形式如下:

实验代码及结果如下:(分别为高斯噪声、椒盐噪声、乘性噪声、泊松噪声)

图一与图二对比:均值增大,图像越明亮,大部分颜色细节丢失,只有原图像中颜色较深的部分显示出来,因此这种噪声污染比较严重;
图一与图三对比:方差变大,噪声越明显,同时也会丢失细节,虽然看起来没有图二损失的严重,但是会有点状噪声产生,影响辨识。


结论: 噪声密度的增大使得图像的丢失细节越多,最后完全消除图像本来的模样。噪声密度达到0.08时还可以识别图像内容,但在噪声密度达到1时,图片中的细节及内容完全被遮盖住,无法识别,这种噪声污染是很严重的。


如图所示,乘性噪声不仅会模糊图像,而且会像椒盐噪声一样,产生黑白交替的点状。随着参数的增大,图像被污染得越明显。乘性噪声的参数为0.01时,噪声对图像的影响较小,参数的增大使得图像中某些细节的丢失,而且造成的污染很严重。

结论: 泊松噪声会模糊图像,并不像椒盐噪声会产生黑白交替的点状。

(2)用给定分布产生空间随机噪声(函数imnoise2)

说明:通常,在函数imnoise中能够产生可用类型和参数的噪声是很有必要的。空间噪声值是随机数,以概率密度函数(PDF)或是等价的、相应的累积分布函数(CDF)为特征。

A = rand(M,N) %数组元素在区间[0,1]内均匀分布的数,且产生单一的随机数
A = randn(M,N) %数组元素是零均值、单位方差的正态(高斯)数,若无参数也是产生单一随机数
I = find(A); % 返回I中A的所有非零元素的线性索引,没找到则返回一个空矩阵
[r,c,v] = find(A); % 除了返回行索引和列索引外,还以列向量v返回A的非零值
A(I) = 0; % 寻找图像中值小于128的像素并把它们设置为0

由椒盐噪声产生的噪声数组有三个值:分别对应胡椒噪声的0,盐粒噪声的1和无噪声的0.5。

(3)周期噪声(函数imnoise3)

说明:一幅图像的周期噪声典型地产生于图像获取过程中的电器和/或电动机械的干扰。这是本章节中唯一考虑的一种空间依赖型噪声。周期噪声的模型是2D正弦波,表达式如下:

说明:估计周期噪声参数的典型方法是分析图像的傅里叶谱。周期噪声往往产生频率尖峰,频率尖峰可以通过目测来检测。当噪声尖峰足够明显时,或在干扰频率的一些知识可用的情况下,自动分析是有可能的。对于空间域噪声,PDF的参数可以通过传感器的技术来说明,但是通过样本图像来估计它们是很有必要的。

函数statmoments计算平均值和n阶中心距:

使用函数roipoly选择感兴趣的区域:

B = roipoly(f,c,r) %f是感兴趣图像,c和r是相应多边形的顶点列坐标和行坐标

下面函数计算ROI的直方图:

% 用于计算一幅图像在多边形区域内的直方图,多边形的顶点由c和r指定,通过函数roipoly复制所定义的多边形区域


结论: 用所选用的模板来估计原图像的灰度级分布,显示出图像大概的直方图。

使用spfilt自定义函数:

结论: 被胡椒噪声污染的图像会产生白色背景和黑色颗粒,被盐粒噪声污染的图像会产生黑色背景和白色颗粒。用反调和均值法滤除胡椒噪声,基本可以滤除噪声并还原图像,虽然会产生模糊;但用反调和均值法滤除盐粒噪声的效果较差,只能还原主体图像而背景图像仍然没有被还原。最大值滤波器和最小值滤波器能够比较好的滤除胡椒噪声和盐粒噪声,反调和均值则会模糊图像。

(2)自适应空间滤波器

用adpmedian函数可实现此算法,语法如下:

实验代码及结果如下所示:


结论: 经过对比,自适应中值滤波器比中值滤波器复原效果更加好。中值滤波器会模糊图像,而自适应中值滤波器会更好的还原图像,细节被复原得很清晰,基本与原图像无差别。

在图像复原问题中,遇到的主要退化是图像模糊。图像模糊可以使用fspecial来建模:

使用函数imfilter来创建已知PSF或用刚才描述的方法计算得到的PSF的退化图像:

之后我们通过添加适当的噪声来完成退化图像模拟

用函数checkerboard产生的测试模式对于实现这个目的非常有用,因为大小可以缩放,但不会影响主要特征。语法为:

用下面的命令可以产生亮正方形全是白色的棋盘板:函数checkerboard产生的图像属于double类,值在区间[0,1]内。

逆滤波,就是简单将退化函数去除,直接的逆滤波没有什么意义,只处理了靠近直流分量的部分,其他不做处理。由退化函数H退化的图像复原的最简单的方法是直接做逆滤波,设图像退化前的傅里叶变换为F(u,v),退化后的傅里叶变换为G(u,v),系统函数即退化函数的傅里叶变换为H(u,v)。

所谓直接逆滤波,就是用退化函数除退化图像的傅里叶变换,得到退化前图像的傅里叶变换的估计。公式如下所示:
由该式可知,即使知道退化函数,也不能准确的复原图像,因为N(u,v)未知,甚至有更糟的情况是如果退化函数是零或是非常小的值,则N(u,v)/H(u,v)的值比较大,很容易支配F(u,v)的估计值。在无噪声的情况下,逆滤波是完美的。但实际中,所有都会噪声,因此这个类型逆滤波的方法很少使用到。

维纳滤波也称为最小均方差误差滤波,它是一种最早、也是最为熟知的线性图像复原方法。这种滤波就是使图像尽可能的平滑,可以消除很严重的噪声,恢复图像。

维纳滤波是通过函数deconvwnr实现的,语法如下:(g是退化图像,frest是复原图像)

实验代码及结果:(对上面退化模型进行滤波)

结论:自相关函数的维纳滤波效果比较好,简单的维纳滤波效果最差。自相关函数的维纳滤波并没有很好地完全还原图像,而且还有一些噪声存在;相比之下,简单的维纳滤波存在的噪声更加多,效果比较差,亮度也没有得到还原。

我要回帖

更多关于 为什么用rand函数不变 的文章

 

随机推荐