退化过程可模拟为一个退化函数和加性噪声项。g(x,y)=H[f(x,y)]+n(x,y)
G(u,v)=H(u,v)*f(u,v)+N(u,v) 做卷积
噪声模型: g=imnoise(f,type,parameters)
g=imnoise(f,'gaussian',m,var)将均值m,方差为var的高斯噪声加到图像f上,默认值是均值m为0,方差var为0.01的噪声。
g=imnoise(f,'localvar',V)将均值为0,局部方差为V的高斯噪声添加到图像f上,其中V是与f大小相同的一个数组,它包含了每一个点的理想方差值。
g=imnoise(f,'localvar',image_intensity,var)将均值为0的高斯噪声添加到图像f中,其中噪声的局部方差var是图像f的亮度值的函数。参量image_intensity和var是大小相同的向量,plot(image_intensity,var)绘制出噪声方差和图像亮度的函数关系。向量image_intensity必须包含范围在[0,1]内的归一化亮度值。
g=imnoise(f,'salt& pepper',d)用椒盐噪声污染图像f,其中d是噪声密度(即包括噪声值的图像区域的百分比)。因此,大约有d*numel(f)个像素受到影响。默认的噪声密度为0.05。
g=imnoise(f,'speckle',var)用方程g=f+n*f)将乘性噪声添加到图像f上,其中n是均值为0,方差为var的均匀分布的随机噪声,var的默认值是0.04。
g=imnoise(f,'poisson')从数据中生成泊松噪声,而不是将人工的噪声添加到数据中,为了遵守泊松统计,unit8和unit16类图像的亮度必须和光子的数量相符合。当每个像素的光子数量大于65535时,就要使用双精度图像。亮度值在0到1之间变化,并且对应于光子的数量除以10e12。
在使用前
1. 要把f—>double类
2. 噪声的均值和方差要归一化,例如m=64,var=100 --àm=64/255 var= 100/255^2
rand randn 都是0到1内的数,后者是高斯分布。
rand(M,N)产生随机数组,rand()产生一个随机数。
[r,c,v]=find(A)返回A中非零元素的行索引和列索引(r c)和非零元素(v向量)
如果出现的退化仅仅是噪声,即g(x,y)=f(x,y)+n(x,y) ,我们所使用的降噪方法是空间滤波去除噪声。(例如椒盐噪声可以采用中值滤波)
过滤黑胡椒噪声: Q为正值的逆调和滤波器。 过滤盐粒噪声: Q为负值的逆调和滤波器。
g=spfilt(f,’chmean’,3,3,Q)
自适应空间滤波器:能够根据被滤波的图像区域的特性改进滤波结果。冈萨雷斯附录中有adpmedian()函数实现自适应中值滤波。
g=adpmedian(f,Smax)
Smax是自适应滤波器窗口的最大允许尺寸。
如果出现的退化存在退化函数,最简方法是忽略噪声项,形成:
(u,v)= 称为逆滤波。
适用情形:
计算出未退化前的图像。
逆滤波方式有:
维纳滤波(有三种语法 )
J=deconvwnr(I,PSF)
J=deconvwnr(I,PSF,NSR)
J=deconvwnr(I,PSF,NCORR,ICORR)
其中
I是退化的图像,是原图像卷积PSF然后加上加性噪声而得到的。
NSR是噪声信号功率比,可以为一标量,也可以为与I同样大小的矩阵,默认值为0.
NCORR和ICORR分别是信号和原图像的自相关函数
J是返回的复原图像。
给定一组一维投影和这些投影所取的角度,由生成的投影来重建该区域的一幅图像。
滤波投影重建图像:
1、计算每个投影的一维傅里叶变换
2、用滤波函数|w|乘以每一个傅里叶变换。每个滤波器必须乘以一个合适的窗函数。
3、对滤波后的结果做一维傅里叶反变换。
4、对第三步得到的所有一维反变换的结果积分(求和),得到f(x,y)。
适用一个窗函数乘以斜坡滤波器,可以使滤波器的拖尾逐渐消失,从而在高频处降低幅度。常见的窗函数包括:正弦窗、余弦窗、汉明窗和汉宁窗。
(一) 矩形窗(Rectangle Window),调用格式:w=boxcar(n),根据长度n产生一个矩形窗w。
(二) 三角窗(Triangular Window),调用格式:w=triang(n),根据长度n产生一个三角窗w。
(三) 汉宁窗(Hanning Window),调用格式:w=hanning(n),根据长度n产生一个汉宁窗w。
(四) 海明窗(Hamming Window),调用格式:w=hamming(n),根据长度n产生一个海明窗w。
(五) 布拉克曼窗(Blackman Window),调用格式:w=blackman(n),根据长度n产生一个布拉克曼窗w。
(六) 恺撒窗(Kaiser Window),调用格式:w=kaiser(n,beta),根据长度n和影响窗函数旁瓣的β参数产生一个恺撒窗w。
图像生成投影:
函数radon用来对给定的二维矩形数组生成一组平行射线投影。
[R,xp]=radon(I,theta) I是一个二维数组(图像),theta是角度值的一维数组,投影包含在R的列内,生成的投影数等于角度数。
Xp即rough值。
投影重建图像:
Iradon由给定的以不同角度得到的一组投影重建一幅图像(切片)。
I=iradon(R,theta,interp,filter,frequency_scaling,output_size)
R是投影矩阵。
theta可以是一个包含所有扫描角度的向量,这时每两个相邻角度间隔相等;也可以是一个标量值,等于相邻两个扫描角度的间隔。
interp是插值函数,有以下几种差值方式可以选择:
nearest:最邻近插值方法(nearestneighbor interpolation)。这种插值方法在已知数据的最邻近点设置插值点,对插值点的数值进行四舍五入,对超出范围的数据点返回NaN。
linear:线性插值(linearinterpolation),这是interp中的默认数值。该方法采用直线将相邻的数据点相连,对超出数据范围的数据点返回NaN。
spline:三次样条插值(cubic splineinterpolation),该方法采用三次样条函数获取插值数据点,在已知点为端点的情况下,插值函数至少具有相同的一阶和二阶导数。
pchip:分段三次厄米多项式差值(piecewisecubic Hermite interpolation)。
cubic:三次多项式插值,与分段三次厄米多项式插值方法相同。
v5cubic:MATLAB5中使用的三次多项式插值。
方法 说明
nearest 最快的插值方法,但是数据平滑方面最差,数据是不连续的。
linear 执行速度较快,有足够的精度,最为常用,而且为默认设置。
cubic 较慢,精度高,平滑度好,当希望得到平滑的曲线时可以使用该选项。
spline 执行速度最慢,精度高,最平滑。
filter是滤波函数,有以下几种滤波器可以选择:
‘Ram-Lak’——频带有限的斜坡函数滤波器,是MATLAB默认的滤波器,对投影中的噪声敏感( R-L滤波函数和S-L滤波函数)。
‘Shepp-Logan’——sinc函数*R-L函数。
‘Cosine’——cosine函数*R-L函数 。
‘Hamming’——Hamming函数*R-L函数 。
‘Hann’——hann函数*R-L函数 。
‘None’——没有滤波。
frequency_scaling是一个标量值,取值范围[0,1],通过缩放滤波函数的频率修改滤波函数。
默认值为1。如果取值小于1,则滤波函数的频率被压缩到适合[0,frequency_scaling]的范围。比如默认值为1时,滤波函数的窗口为[0,10Hz],frequency_scaling=0.5时,滤波函数的窗口为[0,20Hz]。(待确定)在频域中,频率若大于frequency_scaling对应的频率,则该频率处的函数值为0。
output_size是一个标量,用来规定重建图像的行数和列数。
默认等于2*floor(size(R,1)/(2*sqrt(2)))。改变output_size会改变重建图像的大小,但是不会改变像素点的个数。
处理扇形射线束数据:
产生的投影与平行射线束产生的投影不同,基本思路是把扇形射线束转换为平行射线束,然后使用前面的平行射线束方法得到反投影。
由图像产生投影:
B=fanbeam(f,D,parameter) f是包含即将被投影的物体的图像,D是扇形射线束的顶点到旋转中心的距离。
I=ifanbeam(B,D,parameter..)
B是扇形射线束投影矩阵,D是扇形射线束的顶点到旋转中心的距离。
把扇形射线束投影转换为平行投影:
P=fan2para(F,D,parameter) F是数组,它的列是扇形射线束投影。D是扇形射线束的顶点到旋转中心的距离。
把平行射线束投影转换为扇形投影:
F=para2fan(P,D,parameter) P是数组,它的列是平行射线束投影。D是扇形射线束的顶点到旋转中心的距离。