几何操作 剪切matlab,图像的几何操作及基于区域的处理

本文详细介绍了图像处理中的插值算法,包括最紧邻插值、双线性插值和双三次插值,分析了它们的优缺点。此外,还讲解了如何使用imresize函数实现图像的缩放,imrotate函数进行图像旋转,以及imcrop函数进行图像剪切。最后,探讨了基于区域的图像处理,包括多边形选择、灰度选择和滤波填充等方法,为图像处理提供了实用的操作工具。
摘要由CSDN通过智能技术生成

1.图像插值的基本原理

在对图像的几种几何操作中,图像的缩放和旋转都要用到插值操作。插值算法的好坏直接关系到图像的失真程度,插值函数的设计是插值算法的核心问题。

插值通常采用曲线拟合的方法。通过离散的采样点建立一个连续函数,用这个函数便可以求出任意位置的函数值。对于等间距的离散数据,插值可以表示为:

其中h为插值核,Ck为权系数。

(1)最紧邻插值:每一个插值输出象素的值就是在输入函数中与其最临近的采样点的值。算法表示为:

最临近插值是工具箱函数缺省使用的插值方法。对于索引图像来讲,他也是唯一可行的方法。对于索引图像他是唯一可行的方法。不过,由于其插值核的频域特性不好,从它的傅立叶谱上可以看出,它与理想低通滤波器的性质相差较大。因此在使用该方法实现大倍数放大图像时候,会出现块效应。

(2)双线性插值:输出象素是它输入图像中2×2领域采样点的平均值。相当于一种平滑操作。

双线性插值的插值核为三角函数,从频域上看,其频域特性由于最近邻插值函数,其频谱旁瓣远小于主瓣,表明它的带阻特性比较好。不过,仍有大量高频成分漏入通频带,造成一定的混叠。此外,通频带在一定程度上被减弱,由此可使得插值后的图像变模糊,从而损失一些细节。

(3)双三次插值:插值核为三次函数,其插值邻域的大小为4×4。它的插值效果较好,但是计算量大,一般很少使用。

2.图像的插值缩放

函数imresize实现图像的放大与缩小。缺省插值方法为最近邻插值方法。格式如下:

B=imresize(A,m,method);发大m倍

B=imresize(A,[mrows,ncols],method);返回mrows行,ncols列的图像。

B=imresize(…,method,n)

B=imresize(…,method,h);用用户设计的插值核h进行插值,h可以看作时一个二维FIR滤波器。

Method:可以选择’nearest’最近邻法,’bilinear’双线性插值,’bicubic’双三次插值。

在使用bilin和bicubic方法缩小图像时,为消除引入的高频成份,函数使用了一个前端平滑滤波器,缺省滤波器大小为11×11,可以通过参数n指定滤波器尺寸。

3.图像的旋转操作

旋转操作函数为imrotate,格式如下:

B=imrotate(A,angle,method)

B=imrotate(A,angle,method,’crop’)

Method为三种插值方法之一,angle旋转角度,crop是否旋转后实现裁剪。

4.图像的剪切

函数imcrop实现对图像的剪切操作。格式如下:

B=imcrop(A);

B=imcrop(X,map)

B=imcrop(RGB)

以上实现交互式的对灰度图像,索引图像和真彩色图像的剪切操作。

B=imcrop(I,rect)

B=imcrop(A,map,rect)

B=imcrop(RGB,rect)

分别指定举行区域rect剪切图像,rect是一个4元向量[xmin,ymin,width,height]。[B,rect]=imcrop(…)

[x,y,B,rect]=imcrop(..)返回剪切框参数。

5.基于区域的图像处理

要对一幅图像的特定的区域实现处理时,首先要定义这个感兴趣的区域。在Matlab中,对这个特定区域的定义是通过创建一个二进制的mask(为一幅二进制图像)来实现的。该mask图像与原图像具有相同的尺寸,所选定的区域的象素在mask中的值为1(即白色),其余部分象素为0(黑色)。这样,通过mask图像实现对特定区域的选择。

(1)多边形选择法

函数roipoly可以设定一个多边形区域。格式如下:

BW=roipoly(I,c,r);表示用向量c,r来指定多边形各顶点的X,Y轴的坐标。

BW=roipoly(I);交互式选择多边形区域,鼠标左键选择顶点,空格或Del键盘取消选择,回车确认。

BW=roipoly(x,y,I,xi,yi);指定坐标系X,Y瞎选择由向量xi,yi指定的多边形区域。

[BW,xi,yi]=roipoly(…)表示交互的选择多边形区域,并返回多边形各顶点坐标。

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

返回二值图像,选中区域为白色。

如:

>> I=imread('d:\2.jpg');

>> c=[222 272 300 270 221 194];

>> r=[21 21 75 121 121 75];

>> BW=roipoly(I,c,r);

>> imshow(I);

>> figure;

>> imshow(BW);

(2)灰度选择法

用roicolor()函数来根据颜色和灰度设定感兴趣区域。格式如下:

BW=roicolor(A,low,high);指定灰度范围分隔图像;

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

如选择灰度在150~200之间的图像中的区域。

>> A=rgb2gray(I);

>> BW=roicolor(A,150,200);

>> imshow(A);

>> figure,imshow(BW);

(3)其他选择方法

出来使用以上方法生成的mask生成图像外,还可以选择任意的二值图像来作为mask图像。如想对一个数据矩阵为I的灰度图像进行过虑,过虑时只滤去灰度值大于200的象素,则可以使用下面的命令生成一个合适的mask。

>> BW=(A>200);

(4)对指定区域的滤波

用roifilt2实现对指定区域的滤波。格式如下:

J=roifilt2(h,I,BW);使用滤波器h对图像I用mask选择的区域进行滤波;

J=roifilt2(I,BW,fun);对图像I中用mask选择的区域做函数运算fun,其中fun时描述函数运算的字符串,参数为P1,P2…返回图像J在选中区域的象素I经fun运算的结果,其余部分的象素值为I的原始值。

J=roifilt2(I,BW,fun,P1,P2,…)

如:BW为(1)中区域

>> I=rgb2gray(I);

>> J=roifilt2(h,I,BW);

>> imshow(J)

(5)对指定区域的填充

函数roifill实现对指定区域的填充。格式如下:

J=roifill(I,c,r);表示用向量c,r来指定多边形填充,各顶点的X,Y轴的坐标。

J=roifill(I);交互式选择多边形填充区域,鼠标左键选择顶点,空格或Del键盘取消选择,回车确认。

J=roifill(I,BW);表示填充由BW决定的Mask图像选择的区域。

[J,BW]=roifill(…);便是在填充区域的同时返回代表mask图像的数据矩阵BW

J=roifill(x,y,I,xi,yi);

[x,y,J,BW,xi,yi]=roifill(…)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值