五、图像的复原与重建(MATLAB)上
⼀、图像退化/复原处理模型
原始图像为f(x,y),退化过程建模为⼀个退化函数H和⼀个加性噪声k(x,y),退化之后得到的图像为g(x,y),数学模型表达式为:
g(x,y)=H[f(x,y)]+k(x,y)
图像复原的⽬的就是通过退化函数,以及加性噪声来得到初始图像的估计值f’(x,y)。
如果 H 是⼀个线性的,空间不变的过程,那么空域中的表达式可以写成
g(x,y)=h(x,y)卷积f(x,y)+k(x,y)
等价的频域表达式为:
G(u,v)=H(u,v)F(u,v)+K(u,v)
⼆、噪声模型
模拟噪声特性和影响的能⼒是图像复原的核⼼。
1,使⽤函数imnoise对图像添加噪声
函数语法为:
g=imnoise(f,type,parameters)
其中,f是输⼊图像,type是噪声类型,parameters指⼀些参量。函数 imnoise在给图像添加噪声之前,将图像转换为 [0,1] 中的double类。指定噪声参数时,必须考虑这⼀点。例如,要将均值为64,⽅差为400的⾼斯噪声添加到⼀幅uint8类图像上,需要将均值标度为64/255并将⽅差标度为400/(255^2)后,作为imnoise的输⼊。
g=imnoise(f,‘gaussian’,m,var) 将均值m,⽅差为var的⾼斯噪声添加到原图像上。
g=imnoise(f,‘localvar’,v) 将均值为0,局部⽅差为v的⾼斯噪声添加到源图像上。其中V是⼀个⼤⼩与f相同的数组,它在每个点包含了期望的⽅差值。
g=imnoise(f,‘localvar’,image_intensity,var) ,image_intensity是⾃变量,局部⽅差var是图像灰度值的函数。
g=imnoise(f,‘salt&pepper’,d) ⽤椒盐噪声污染图像f,其中d是噪声密度,默认值为0.05。
g=imnoise(f,‘speckle’,var) 使⽤⽅程g=f+n.*f将乘性噪声添加到f上,其中n是均值为0,⽅差为var(默认为0.04)的均匀分布的随机噪声。
subplot(121),imshow(f)
>> g=imnoise(f,'gaussian');
matlab生成随机数
>> subplot(122),imshow(g)
添加⾼斯噪声到原图像上,参数默认值是均值为0,⽅差为0.01。
再保持均值不变,⽅差为0.1;以及保持⽅差不变,均值为0.5。
f=imread('C:/experiment/test1.jpg');
>> f=rgb2gray(f);
>> subplot(221),imshow(f)
>> g1=imnoise(f,'gaussian');
>> subplot(222),imshow(g1),title('噪声均值为0,⽅差为0.01')
>> g2=imnoise(f,'gaussian',0,0.1);
>> subplot(223),imshow(g2),title('噪声均值为0,⽅差为0.1')
>> g3=imnoise(f,'gaussian',0.5,0.01);
>> subplot(224),imshow(g3),title('噪声均值为0.5,⽅差为0.01')
观察图像:
观察对⽐图像,保持均值不变,⽅差为0.1(⽅差增加),噪声⼲扰更⼤,分辨率降低,图像更加模糊。保持⽅差不变,均值为0.5(均值增加),图像更⽩。
换⼀副图像验证结果。
观察对⽐可知,上述结论依然适⽤。
下⾯通过rand函数⽣成⼀个随机数组最为V,添加噪声到原图像
V=rand(size(f));
g1=imnoise(f,'localvar',V);
2,使⽤规定分布⽣成空间随机噪声
由概率论知识可知,如果w是在区间(0,1)内均匀分布的⼀个随机变量,通过求解下⾯的⽅程,就可以得到⼀个具有规定(累积分布函数)CDF和F的随机变量z:
假设有⼀个在(0,1)内的均匀随机数w的⽣成器,并假设我们要⽤该⽣成器来⽣成具有瑞丽CDF的随机数z,它有如下形式:
式中,b>0。为求解z,解⽅程
等价为
运⽤这个结果,在MATLAB中,很容易⽣成⼀个随机数的数组R
R = a + sqrt (b*log(1-rand(M,N)));
z的表达式有时称为随机数⽣成器⽅程,它确定了⽣成期望随机数的⽅式。下表列出了当前感兴趣的随
机变量,及其PDF,CDF,随机数⽣成器⽅程。
在像以低照明度运⾏的成像传感器中,⾼斯噪声看作其中的近似;在不完善的开关设备中,会出现椒盐噪声;感光乳剂中的银粒⼤⼩是由对数正态分布描述的⼀个随机变量;深度成像中会出现瑞丽噪声,⽽在描述激光成像中的噪声时,指数和爱尔兰噪声有⽤。
定义⼀个M函数 imnoise2,⽣成⼀个M*N的噪声数组,⽣成的是噪声模式本⾝。
function R=imnoise2(type,varargin)
[M,N,a,b]=setDefaults(type,varargin{:});
switch lower(type)
case 'uniform'
R=a+(b-a)*rand(M,N);
case 'gaussian'
R=a+b*randn(M,N);
case 'salt&pepper'
R=saltpepper(M,N,a,b);
case 'lognormal'
R=exp(b*randn(M,N)+a);
case 'rayleigh'
R=a+(-b*log(1-rand(M,N))).^0.5
case 'exponential'
R=exponential(M,N,a,b);
case 'erlang'
R=erlang(M,N,a,b);
otherwise
error('unkonow distribution type')
end
查看各种噪声直⽅图(其中参数是函数中的默认值)
注意,由椒盐噪声⽣成的噪声数组有三个值:对应于胡椒噪声的0,对应于盐粒噪声的1,以及对应于⽆噪声的0.5。为了使这个数组有⽤,还需要对他进⼀步的处理。椒盐噪声污染图像时,需要到R中所有的0值坐标,把相应原图像的坐标位置置为最⼩灰度值,到R中值为1的坐标,把相应原图像的坐标位置置为最⼤灰度值。代码实现为:
function R=saltpepper(M,N,a,b)
if (a+b)>1
error('the sum must not exceed 1')
end
R(1:M,1:N)=0.5;
X=rand(M,N);
R(X<=a)=0;
u=a+b;
R(X>a&X<=u)=1;
运⽤椒盐噪声污染图像:
[M,N]=size(f);
>> R=imnoise2('salt&pepper',M,N,0.1,0);
>> gp=f;
>> gp(R==0)=0;
>> subplot(121),imshow(f);
>> subplot(122),imshow(gp);

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。