|
特定区域处理
区域的指定
在进行图像处理时,有时只要对图像中某个特定区域进行处理,并不需要对整个图像进行处理。MATLAB中对特定区域的处理是通过二值掩模来实现的,通过选定一个区域后会生成一个与原图大小相同的二值图像,选定的区域为白色,其余部分为黑色。通过掩模图像,就可以实现对特定区域的选择性处理。下面介绍创建区域的方法:
- 多边形选择方法 roipoly函数用于设定图像中的多边形区域,该函数返回与输入图像大小一致的二值图像BW,选中的区域值为1,其余的部分值为0。其语法格式为:
BW=roipoly(I,c,r)
其功能是:用向量c、r指定多边形各角点的X、Y轴的坐标。
BW=roipoly(I)
其功能是:是让用户交互选择多边形区域,通过点击鼠标设定多边形区域的角点,用空格键和Del键撤销选择,按Enter键确认选择,确认后该函数返回与输入图像大小一致的二值图像BW,在多边形区域内像素值为1,其余区域内像素值为0。
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');
c=[222 272 300 272 222 194];
r=[21 21 75 121 121 75];
BW=roipoly(I,c,r);
figure(1);imshow(I);
figure(2);imshow(BW);
- 其他选择方法 MATLAB图像处理工具箱中提供了可以实现按灰度选择区域的函数roicolor函数,其语法格式为:
BW=roicolor(A,low,high)
其功能是:按指定的灰度范围分割图像,返回二值掩模BW,[low,high]为所要选择区域的灰度范围。如果low大于high,则返回为空矩阵。
BW=roicolor(A,v)
其功能是:按向量v中指定的灰度值来选择区域。 下面是一个按灰度分割图像中的目标的程序清单:
I=imread('rice.tif');
I=imread('rice.png');
BW=roicolor(I,128,255);
figure(1);imshow(I);
figure(2);imshow(BW);
特定区域滤波
MATLAB图像处理工具箱中提供的roifilt2函数用于对特定区域进行滤波,其语法格式为:
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 272 222 194];
r=[21 21 75 121 121 75];
BW=roipoly(I,c,r);
h=fspecial('unsharp');
J=roifilt2(h,I,BW);
subplot(1,2,1);imshow(I);
subplot(1,2,2);imshow(J);
由运行结果可知:右上角的硬币发生了变化,而其他硬币保持不变。
特定区域填充
MATLAB图像处理工具箱中提供的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('rice.tif');
I=imread('rice.png');
c=[52 72 300 270 221 194];
r=[71 21 75 121 121 75];
J=roifill(I,c,r);
subplot(1,2,1);imshow(I);
subplot(1,2,2);imshow(J);
参考教材: 《数字图像处理及MATLAB实现》余成波编著 重庆大学出版社 TN911.73
图形图像文件的读取
图形图像文件操作 相关的函数 已MAT文件加载或保存矩阵数据 Load、save 加载或保存图形文件格式的图像,如BMP、TIFF等 Imread、imwrite 显示加载到MATLAB7.0中的图像 Image、imagesc 信息查询 Imfinfo、ind2rgb
图形图像文件的读取
主要调用格式:
A=imread(filename,fmt) [X,map]=imread(filename,fmt)
[…]=imread(filename) […]=imread(URL, …)
[…]=imread(…,idx) (CUR,ICO,and TIFF only)
[…]=imread(…,idx) (CUR,ICO,and TIFF only)
[…]=imread(…,’frames’,idx) (GIFF only)
[…]=imread(…,ref) (HDF only)
[…]=imread(…,’BackgroundColor’,BG) (PNG only)
[A,map,alpha]=imread(…) (CUR,ICO,and PNG only)
最基本调用格式:
[X,map]=imread(filename,fmt)
*imread('rice.png','5'); %读取rice.png文件的第5帧图像
*RGB=imread(‘earth.jpg’);
%将图像earth.jpg读入MATLAB7.0工作平台,读取数据矩阵为变量RGB
图形图像文件的写入与显示
- 用imwrite来完成图形图像文件的写人操作: 基本调用格式:imwrite(X,map,filename,fmt)
load clown %根据MAP格式(MATLAB数据文件格式)装载图像
imwrite(X,map,'clown.jpg') %保存为一幅包含小丑图像的JPG文件
image(C) image(x,y,C) image(…,’PropertyName’,PropertyValue, …)
image(’PropertyName’,PropertyValue, …) handle=image(…)
函数imagesc与image函数类似,但是它可以自动标度输入数据
load clown %根据MAP格式(MATLAB数据文件格式)装载图像
image(10,10,X) %显示一幅小丑图像,图像的左上角坐标为(0,0)
colormap(map) %
imshow(I,n) imshow(I,[low,high]) imshow(BW) imshow(X,map)
imshow(RGB) imshow(…,display_option) imshow(x,y,A, …) imshow filename
h=imshow(…)
I=imread('rice.png')
J=filter2([1 2;-1 -2],I) %用模板[1 2;-1 –2]对图像滤波
imshow(I)
figure,imshow(J,[])
用图像阅读器显示图像
图像阅读器的开关
1.在图像阅览器中显示图像:imview
moonfig=imread('moon.tif');
imview(moonfig)
imview('moon.tif')
- 指定图像的起始大小 (1) 设置Imviewinitialmaginfication属性为‘fit’,默认值为100,100%显示 (2) 在imview函数中使用Initialmagnification参数,指定值为“fit”。
imshow(X,map,'InitialMaginfication','fit') |
|