《MATLAB图像处理实例详解》:学习第七天(2022.10.10)

4.3 图像的领域和快操作

4.3.1 图像的领域操作

        图像的邻域操作是指输出图像的像素点取值决定于输入图像的某个像素点及其邻域内的像素,通常像素点的邻域是一个远小于图像自身尺寸、形状规则的像素块,如2×2正方形、2×3矩形,或近似圆形的多边形。邻域操作根据邻域的类型又可分为滑动邻域操作和分离邻域操作。


1、通用滑动邻域操作函数nlfilter( )

  • B=nlfilter(A,[m n],fun):该函数中返回图像B,它是输入灰度图像A,按照尺寸为m×n滑动领域,利用运算函数fun处理以后的结果。其中 fun可以是向量平均值mean、矩阵的平均值 mean2、方差向量std、矩阵方差std2、向量最小值min、最大值 max、方差var,也可以是用inline自定义函数。
  • B = nlfilter(A, 'indexed',...):该函数中返回图像B,它是输入的索引图像A填充后的结果。如图像A的数据类型是浮点型,则用“1”填充;如果是逻辑型或者无符号整型,则用“0”填充。

2、列方向邻域操作函数colfilt( )

  • B=colfilt(A,[m n],block_type,fun):该函数中将输入图像A,按照尺寸为m×n块重新组合成一个临时列矩阵,利用函数fun对这个临时列矩阵进行处理,如果需要填充则用“0”对图像A进行填充。其中 block_type是字符串,可以取'distinct'或'sliding',取'distinct'按照分离邻域方式重新组合临时矩阵,处理后返回的矩阵大小必须和临时矩阵相同;取'sliding'表示按照滑动邻域方式重新组合临时矩阵,处理后返回一个行向量,向量中包含临时矩阵中每个行一个单一值。
  • B=colfilt(A,[m n],[mblock nblock],block_type,fun):该函数中的处理与上一种调用方式相同,其中[mblock nblock]说明块的存储方式不改变返回操作结果。
  • B=colfilt(A, 'indexed', ..):该函数中对索引图像A进行填充,如果是无符号整数则用“0”填充;如果是浮点数则用“1”填充。

3、分离邻域操作函数blockproc( )

  • B=blockproc(A,[M N],fun):该函数中对输入图像A,采用尺寸m×n分离块,利用运算函数fun处理,处理后的结果连接成输出图像B。其中 fun是函数句柄,该函数输入为结构体、返回矩阵、向量或变量。
  • B=blockproc(src_filenamc,[M N],fun):该函数中利用运算函数fun按照尺寸为m×n块,同时读取和处理名为 src_filename 的图像。这个调用方式特别适合处理大图像,如果输出的矩阵B也很大,则该函数将处理后的结果直接写入名为Destination 的文件中。
  • blockproc ...,param,val...):该函数中按照参数 param取值val对图像进行分离块处理。Param及var取值可查阅MATLAB的help帮助文件。

4.3.2 图像的区域选取

1、多边形区域选择函数  roipoly( )

  • BW=roipoly(I):该函数中显示当前输入图像I,并创建交互式多边形ROI区域选择工具与当前图像I相关。
  • BW=roipoly(I,c,r):该函数中根据c和r返回感兴趣的区域ROI。其中,c和r说明感兴趣的多边形每个顶点行列序号,c和r两个向量大小相同。
  • BW=roipoly(x,y,I,xi,yi):该函数中根据向量x和 y建立一个空间坐标系,根据xi和 yi在x和y坐标系下定义的多边形顶点选择输入图像Ⅰ的ROI区域。
  • [BW,xi,yi]=roipoly(...):该函数中返回x和y坐标系下感兴趣区域的顶点坐标 xi和 yi。

2、灰度ROI区域选择函数  roicolor( )

  • BW=roicolor(A,low,high):该函数中返回ROI区域,ROI区域中像素颜色映射范围[low high],返回BW是一个二值图像,ROI区域内为1,ROI区域外为0。
  • BW=roicolor(A,v):该函数中返回ROI区域,ROI区域中像素和向量v匹配,返回BW是一个二值图像,与向量v匹配的区域内值为1,不匹配区域内值为0。

3、区域填充函数  roifill( )

  • J=roifill(I):该函数中显示输入图像I,并创建交互式多边形区域填充工具与当前图像关联。
  • J=roifill(I,c,r):该函数中对向量c和r确定多边形区域进行填充,c 和r两个向量大小相同,其中第k个ROI区域顶点坐标为(r(k),c(k))。
  • J=roifill(I,BW):该函数中利用BW作为掩膜图像,填充输入图像I中对于掩膜图像非零位置。如果是多个区域的话,则分别处理。
  • [J,BW]=roifill(...):该函数中返回二进制掩膜图像确定I中哪些像素被填充。BW是一个大小与输入图像I相同的二进制掩膜图像。
  • J=roifill(x,y,l,xi,yi):该函数中对x和y建立的坐标系下输入图像I,在xi和yi描述顶点确定ROI区域进行填充。

4、区域滤波函数  roifilt2( )

  • J=roifilt2(h,I,BW):该函数中对输入图像I利用二维线性滤波器h进行滤波,BW为二值图像,大小与输入图像I相同,作为掩膜图像用于滤波。
  • J=roifilt2(1,BW,fun):该函数中利用函数 fun处理输入图像I的数据,结果返回给J,其中 BW中对应像素为“1”的位置返回的是计算值,BW中对应位置为“0”的返回输入图像I的相应位置值。
     

第6章 图像复原技术

6.2 图像噪声模式

6.2.1 噪声介绍

        1、高斯噪声

        2、椒盐噪声

        3、均匀分布噪声

        4、指数分布噪声

        5、伽马分布噪声

6.2.2 噪声的MATLABA实现

        在MATLAB中,可以通过函数 imnoise( )给图像添加噪声,该函数可以得到高斯分布噪声、椒盐噪声、泊松分布噪声和乘性噪声。该函数的调用格式如下:

  • J=imnoise(I, type, parameters):该函数对图像Ⅰ添加类型为type的噪声。参数type对应的噪声类型为: 'gaussian'为高斯噪声;'localvar'为0均值白噪声; 'poisson'为泊松噪声; 'salt & pepper'为椒盐噪声; 'speckle'为乘性噪声。参数parameters为对应噪声的参数,如果不设置 parameters则采用系统的默认值。

           通过函数imnoise( )可以以3种方式来产生高斯噪声

        (1)首先假设图像的高斯噪声的均值和方差已知,其调用格式为J=imnoise(I, 'gaussian', m, v)。其中 m为高斯噪声的均值,默认值为0,v为高斯噪声的方差,默认值为0.01。如果希望得到纯粹的噪声矩阵,可以让输入的图像矩阵Ⅰ为0。

        (2)第2种产生高斯噪声的方式和图像像素的位置有关,调用格式为:J=imnoise(I,'localvar',V)。其中V为与I大小相同的数组,数组每个元素都对应了相应位置像素叠加的高斯噪声的方差,所添加的高斯噪声的均值为0。

        (3)第3种产生高斯噪声的方式和图像像素的亮度有关,其调用格式为:J=imnoise(I,'localvar', h, v)。其中h为一个元素值在[0,1]之间的向量,表示图像的亮度值。v为一个长度和h相同,表示与h中亮度值相对应的高斯噪声的方差。该函数在图像的不同亮度值上叠加不同方差的高斯噪声,向量h中没有的亮度值将自动插值得到。

        函数imnoisc( )可以产生椒盐噪声,其调用格式为J=imnoise(I, 'salt & pepper' , d)。在图像中添加椒盐噪声,噪声的密度为d,即噪声占整个像素总数的百分比。系统默认的噪声密度是0.05。在添加类型为Salt & Pepper 的噪声时,符号&的前面和后面必须有空格,否则系统会出错。

        函数 imnoise( )还可以产生泊松噪声,其调用格式为J=imnoise(I,'possion')。从数据中产生泊松噪声,而不是将人工的噪声添加到图像数据中。

        函数imnoise( )还可以产生乘性噪声,调用格式为J=imnoise(I, 'speckle', v)。该函数通过公式J=Ⅰ×n×Ⅰ,将乘性噪声添加到图像Ⅰ中,其中n是均值为0、方差为v的均匀分布的随机噪声。函数中参数v的默认值为0.04。

你可能感兴趣的:(MATLAB图像处理实例详解,matlab,图像处理,学习)