6. 特定区域处理

来源:互联网 发布:cacti后台sql注入漏洞 编辑:程序博客网 时间:2024/05/22 06:25

        在进行图像处理时,有时只需要对图像中的某个特定区域进行处理,而并不需要对整个图像进行处理。比如要对用户选定的一个特定的一个区域作均值滤波或对比度增强,MATLAB就可以只对特定的区域进行处理。


1.指定感兴趣区域

       MATLAB中对特定区域的处理是通过二值掩模来实现的。用户选定一个区域后会生成一个与原图大小相同的二值图像,选定的区域为白色,其余部分为黑色。通过掩模图像就可实现对特定区域的选择性处理。

      MATLAB图像处理工具箱提供了3个函数用于生成二值掩模,从而选择特定区域,下面分别介绍。

      (1)roipoly:

              roipoly函数用于选择图像中的多边形区域。roipoly函数返回二值图像BW,选中区域的像素值为1(白色),其余部分值为0(黑色)。这个二值图像可以作为掩模,通过与原图的运算选择目标或背景。其语法格式如下:

             BW=roipoly(I,c,r)

            BW = roipoly(I)
            BW = roipoly(x,y,I,xi,yi)
            [BW,xi,yi] = roipoly(⋯)
            [x,y,BW,xi,yi] = roipoly(⋯)

 

             BW=roipoly(I,c,r)是用向量 c、r 指定多边形各角点的 x、y 轴的坐标。

             BW=roipoly(I)是允许用户交互选择多边形区域,选择角点,用空格键和 Del 键撤销选择,按 Enter 键确认选择。

             BW=roipoly(x,y,I,xi,yi)用矢量 x 和 y 建立非默认的坐标系,然后在指定的坐标系下选择由向量 xi、yi 指定的多边形区域。
             [BW,xi,yi]=roipoly(⋯)交互选择多边形区域,并返回多边形角点的坐标。
             [x,y,BW,xi,yi]=roipoly(⋯)交互选择多边形区域后,还返回多边形顶点在指定为坐标系 x,y下的坐标。

例:

I=imread('eight.tif');
 %matlab自带的素材图,不需要指定路径,在MATLAB的工作路径下,C:\Program Files\MATLAB\R2014a\toolbox\images\imdata
 c=[222 272 300 270 221 194];
 r=[21 21 75 121 121 75];
 BW=roipoly(I,c,r);
 imshow(I),title('原图');
 figure,imshow(BW),title('选中的区域');

(2)roicolor

  MATLAB 图像处理工具箱提供的 roicolor 函数可以对 RGB 图像和灰度图像实现按灰度或亮度值选择区域,其语法格式为:
    BW = roicolor(A,low,high)
    BW = roicolor(A,v)

    BW = roicolor(A,low,high)表示按指定的灰度范围分割图像,返回二值掩模 BW,[low high]为所要选择区域的灰度范围,若灰度值在这个范围,则返回1(白色),否则返回0(黑色)。如果 low 大于 high,则返回为空矩阵。

  BW=roicolor(A,v)是按向量 v 中指定的灰度值来选择区域。

例:

 I=imread('rice.png');
>>  %matlab自带的素材图,不需要指定路径,在MATLAB的工作路径下,C:\Program Files\MATLAB\R2014a\toolbox\images\imdata

>> BW=roicolor(I,128,255);
>> %图像I的灰度值在[128 255]的范围内返回1(即白色),不在[128 255]范围内,返回0(即黑色);
>> figure,imshow(I),title('原图');
>> figure,imshow(BW),title('选择的区域');


(3)poly2mask

      该函数可以转化指定的多边形区域为二值掩模。语句格式为
     BW = poly2mask(x,y,m,n)
    x 和 y 表示两个向量,指定一个多边形区域,BW 的大小为 m×n,在 BW 中指定区域内的像素为 1(白色),指定区域外的像素为 0(黑色)。如果 x 和 y 指定的区域不封闭,则 poly2mask 自动封闭这个多边形。

例:

x = [63 186 54 190 63];
y = [60 60 209 204 60];
bw = poly2mask(x,y,256,256);
imshow(bw)
hold on
plot(x,y,'b','LineWidth',2)


2. 特定区域滤波

MATLAB 图像处理工具箱中提供了一个区域滤波函数 roifilt2,其语法格式为:
J = roifilt2(h,I,BW)
J = roifilt2(I,BW,fun)
J = roifilt2(I,BW,fun,P1,P2,⋯)

J = roifilt2(h,I,BW)使用滤波器 h 对图像 I 中用二值掩模 BW 选中的区域进行滤波。
J=roifilt2(I,BW,fun)和 J=roifilt2(I,BW,fun,P1,P2,⋯)对图像 I 中用二值掩模 BW 选中的区域作函数运算 fun,其中 fun 是描述函数运算的字符串,参数为 p1、P2、⋯⋯返回图像 J 在选中区域的像素为图像 I 经 fun 运算的结果,其余部分的像素值为 I 的原始值。

例:

I = imread('eight.tif');
c = [222 272 300 270 221 194];
r = [21 21 75 121 121 75];
BW = roipoly(I,c,r);%指定滤波区域为 c 和 r 确定的多边形
h = fspecial('unsharp');%指定滤波算子为 unsharp
J = roifilt2(h,I,BW);
figure,imshow(I),title('原图');
>> figure,imshow(BW),title('滤波的区域');
>> figure,imshow(J),title('对选定区域滤波后的输出');




3.特定区域填充

   MATLAB 图像处理工具箱中提供了函数 roifill 用于对特定区域的填充,其语法格式为:

   J = roifill(I,c,r)
   J = roifill(I)
   J = roifill(I,BW)
   [J,BW] = roifill(⋯)
   J = roifill(x,y,I,xi,yi)
    [x,y,J,BW,xi,yi] = roifill(⋯)

   其中 J=roifill(I,c,r)填充由向量 c、r 指定的多边形,c 和 r 分别为多边形各顶点的 x、y 坐标。它是通过求解边界的拉普拉斯方程,利用多边形边界点的灰度平滑的插值得到多边形内部的点。通常可以利用对指定区域的填充来“擦”掉图像中的小块区域。

 J=roifill(I)表示由用户交互选取填充的区域。选择多边形的角点后,按 Enter 键表示结束,空格键或 Del 键表示取消一个选择。
 J=roifill(I,BW)用掩模图像 BW 选择区域。
 [J,BW]=roifill(⋯)在填充区域的同时还返回掩模图像 BW。
 J=roifill(x,y,I,xi,yi)和[x,y,J,BW,xi,yi]=roifill(⋯)表示在指定的坐标系 x?y 下填充由向量 xi和 yi 指定的多边形区域。

例:

I=imread('eight.tif');
  %matlab自带的素材图,不需要指定路径,在MATLAB的工作路径下,C:\Program Files\MATLAB\R2014a\toolbox\images\imdata
c=[222 272 300 270 221 194];
r=[21 21 75 121 121 75];
J=roifill(I,c,r);
figure,imshow(I),title('原图');
>> figure,imshow(J),title('填充后的图');



0 0
原创粉丝点击