matlab图像运算二.docx
- 文档编号:10706012
- 上传时间:2023-05-27
- 格式:DOCX
- 页数:18
- 大小:384.73KB
matlab图像运算二.docx
《matlab图像运算二.docx》由会员分享,可在线阅读,更多相关《matlab图像运算二.docx(18页珍藏版)》请在冰点文库上搜索。
matlab图像运算二
第十五讲图像运算
(二)
【目录】
一、领域操作1
1、概述1
2、滑动领域操作1
3、分离领域操作4
二、区域操作7
1、区域选择7
2、区域操作9
三、图像统计12
1、象素选择12
2、强度描述图12
3、图像轮廓图14
4、图像柱状图15
【正文】
一、领域操作
1、概述
邻域运算-输出G的像素值取决于输入F的像素值及其某个邻域内的像素值。
领域大小-邻域是一个远小于图像尺寸、形状规则的像素块,例2×2、3×3的正方形,或用来近似表示圆及椭圆等形状的多边形。
一幅图像所定义的所有邻域应大小相同。
邻域类型-滑动邻域操作、分离邻域操作。
2、滑动领域操作
(1)方式
该操作一次处理一个像素,输出图像的每一个像素都是通过对输入图像某邻域内的像素值采用某种代数运算得到的。
右图说明了一个6×5矩阵中3个元素的2×3滑动邻域,每一个邻域的中心像素都用一个黑点标出。
(2)中心像素
是输入图像真正要进行处理的像素。
如果邻域含有奇数行和列,那么中心像素就是邻域的真实中心;如果行或列有一维为偶数,那么中心像素将位于中心偏左或偏上方。
表示为:
floor(([m,n]+1)/2)
例如,在一个2×2的邻域中,中心像素就是左上方的像素,而右上图所示的2×3邻域的中心像素为(1,2),即位于邻域中第二列、第一行的像素。
(3)实现步骤
*选择原图一个像素
*确定该像素的邻域
*用一个函数对邻域内的像素求值并返回标量结果
*在输出图像对应的位置填入计算值
*重复计算,遍及所有象素
(4)nlfilter滑动领域操作函数
【格式】B=nlfilter(A,[mn],fun)
【说明】A为输入图像,B为输出图像,领域尺寸为m×n,fun为运算函数
【其它】mean-求向量的平均值,mean2-求矩阵的平均值
std-求向量的的标准差,std2-求矩阵的标准差。
median-求向量的中值
max-求向量的最大值
min-求向量的最小值
var-求向量的方差
可以用inline自定义函数。
【例】用函数mean作滑动处理
CLF
I=imread('tire.tif');
I2=nlfilter(I,[55],'mean2');
subplot(121),imshow(I,[]);
subplot(122),imshow(I2,[]);
【例】用自定义函数作滑动处理
CLF
I=imread('tire.tif');
f=inline('max(x(:
))');
I2=nlfilter(I,[33],f);
subplot(1,2,1),imshow(I);
subplot(1,2,2),imshow(I2);
(5)colfilt快速领域操作函数
【格式】B=colfilt(A,[mn],'sliding',fun)
【说明】多一个参数'sliding',指定该函数作滑动领域操作。
这种操作称为列处理,加快操作速度。
【例】快速滑动领域操作
CLF
I=imread('tire.tif');
I2=colfilt(I,[55],'sliding','mean');
subplot(121),imshow(I,[]);
subplot(122),imshow(I2,[]);
(6)im2col、col2im列操作函数
【格式】B=im2col(A,[mn],'sliding')-图像排成列
B=col2im(A,[mn],[mm,nn],'sliding')-列重构图像
【例】用列操作函数实现滑动
CLF
I=imread('ic.tif');
I1=im2col(I,[33],'sliding');
I1=uint8([0-10-14-10-10]*double(I1));
I2=col2im(I1,[3,3],size(I),'sliding');
subplot(121),imshow(I,[]);
subplot(122),imshow(I2,[]);
3、分离领域操作
(1)方式
分离邻域操作也称图像的块操作。
将矩阵划分为m×n后得到矩形。
分离邻域从左上角开始覆盖整个矩阵,邻域之间没有重叠部分。
如果分割的邻域不能很好地适应图像的大小,那么需要为图像进行零填充。
右图说明了一个被划分为9个4×8邻域的11×22矩阵,零填充过程将数值0添加到图像矩阵所需的底部和右边,此时图像矩阵大小变为12×24。
(2)blkproc图像块操作函数
【格式】B=blkproc(A,[mn],fun)
【说明】与滑动操作不同的是整块操作。
【例】图像块操作
CLF
I=imread('tire.tif');
f=inline('mean2(x)*ones(size(x))');
I2=blkproc(I,[88],f);
subplot(1,2,1),imshow(I,[])
subplot(1,2,2),imshow(I2,[])
(3)colfilt快速块操作函数
【格式】B=colfilt(A,[mn],'distinct',fun)
【说明】参数'distinct',说明该函数作快速块操作。
【例】快速块操作
CLF
I=imread('tire.tif');
f=inline('ones(64,1)*mean(x)');
I2=colfilt(I,[88],'distinct',f);
subplot(1,2,1),imshow(I,[])
subplot(1,2,2),imshow(I2,[])
(4)im2col、col2im列操作函数
【格式】B=im2col(A,[mn],'distinct')-图像排成列
B=col2im(A,[mn],[mm,nn],'distinct')-列重构图像
【例】用列操作函数实现块操作
CLF
I=imread('tire.tif');
I1=im2col(I,[88],'distinct');
I1=ones(64,1)*mean(I1);
I2=col2im(I1,[8,8],size(I),'distinct');
subplot(121),imshow(I,[]);
subplot(122),imshow(I2,[]);
二、区域操作
要对特定的区域进行处理时,要定义我们感兴趣的区域。
Matlab中,对这个区域的定义通过一个二值图像(与原始图像大小相等)来实现。
称为mask图像。
所要选定的区域,在相应的mask图中值为1,否则为0。
1、区域选择
(1)多边形选择法。
用roipoly函数来设置一个多边形区域。
【格式】BW=roipoly(I,c,r)
【说明】用矢量c、r来指定多边形各定点的x、y坐标
【格式】BW=roipoly(I)
【说明】交互选择多边形
【例】选择区域
CLF
I=imread('eight.tif');
c=[222272300270221194];
r=[21217512112175];
BW=roipoly(I,c,r);
subplot(121),subimage(I);
subplot(122),subimage(BW);
(2)灰度选择法。
用roicolor函数可以实现安灰度选择区域。
【格式】BW=roicolor(A,low,high)
【说明】指定灰度范围,返回掩模mask图像
【格式】BW=roicolor(A,v)
【说明】按向量v指定的灰度,返回掩模mask图像
【例】灰度选择法
CLF
I=imread('rice.tif');
BW=roicolor(I,128,255);
subplot(121),subimage(I);
subplot(122),subimage(BW);
(3)矩阵产生法。
用矩阵构造的方法选择区域。
【例】灰度选择法
CLF
I=imread('rice.tif');
%BW=zeros(size(I));
%BW(100:
150,50:
140)=1;
BW=I>150;
subplot(121),subimage(I);
subplot(122),subimage(BW);
2、区域操作
(1)区域运算
可以利用mask函数,进行区域图像的叠加。
【例】区域图像叠加
I1=double(imread('rice.tif'));
I2=double(imread('tire.tif'));
I2=imresize(I2,size(I1),'bicubic');
BW=zeros(size(I));
BW(100:
200,50:
200)=1;
I3=I1.*BW+I2.*(1-BW);
subplot(221),imshow(I1,[]);
subplot(222),imshow(I2,[]);
subplot(223),imshow(BW,[]);
subplot(224),imshow(I3,[]);
(2)区域滤波
Matlab提供roifilt2函数实现对指定区域的滤波或处理。
【格式】J=roifilt2(h,I,BW)
【说明】h为滤波器,I输入图像,BW指定区域,J输出图像。
【例】对指定区域进行锐化
CLF
I=imread('eight.tif');
c=[222272300270221194];
r=[21217512112175];
BW=roipoly(I,c,r);
h=fspecial('unsharp');%滤波函数
J=roifilt2(h,I,BW);
subplot(121),subimage(I);
subplot(122),subimage(J);
【格式】J=roifilt2(I,BW,fun)
【说明】用fun函数对指定区域进行运算
【例】对指定区域进行运算
CLF
I=imread('eight.tif');
c=[222272300270221194];
r=[21217512112175];
BW=roipoly(I,c,r);
f=inline('uint8(abs(double(x)-100))');
J=roifilt2(I,BW,f);
subplot(121),subimage(I);
subplot(122),subimage(J);
(3)区域填充
Matlab用函数roifill函数实现对指定区域的填充,填充的值为多边形边界点的灰度平滑值。
相当于擦除。
【格式】J=roifill(I,c,r)
J=roifill(I)
J=roifill(I,BW)
【例】
CLF
I=imread('eight.tif');
c=[222272300270221194];
r=[21217512112175];
J=roifill(I,c,r);
subplot(121),subimage(I);
subplot(122),subimage(J);
三、图像统计
1、象素选择
【格式】pixvalon-显示象素值
pixvaloff-关闭象素值显示
【说明】该函数用于在图像上交互显示象素值和两点间的距离
【格式】P=IMPIXEL-交互返回选择点的象素值
P=IMPIXEL(I,C,R)
P=IMPIXEL(X,MAP,C,R)-返回指定点的象素值
P=IMPIXEL(RGB,C,R)
[C,R,P]=IMPIXEL(...)-返回坐标和象素值
【例】返回真彩图像上三个点的色度
RGB=imread('flowers.tif');
c=[12146410];
r=[104156129];
pixels=impixel(RGB,c,r)
pixels=
6159101
2532400
2373744
2、强度描述图
【格式】improfile-交互获取强度描述图
improfile(I,x,y)-指定路径的强度描述图
【例】灰度图的强度描述
CLF
I=imread('alumgrns.tif');
x=[35338346103];
y=[25325017148];
improfile(I,x,y),gridon
【例】彩色图的强度描述
CLF
I=imread('flowers.tif');
x=[35338346103];
y=[25325017148];
improfile(I,x,y),gridon
3、图像轮廓图
【格式】imcontour(I,N)-轮廓层数
【例】
I=imread('ic.tif');
imcontour(I,3)
4、图像柱状图
【格式】imhist(I,N)-N指灰度级
【例】
I=imread('ic.tif');
imhist(I,64)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- matlab 图像 运算