数字图像处理 第五讲(老师的课件)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

3.4.3图像几何运算

在处理图像的过程中,需要对图像的大小和几何关系进行调整:缩放 旋转 图像中的每个像素值都发生变化

数字坐标是整数,经过变换之后不一定是整数 因此要对变换之后的整数坐标值位置的像素进行估计 (1)图像的插值

插值是常用的数学运算,通常利用曲线拟合的方法,通过离散的采样点建立连续函数逼近真实曲线,用这个重建的函数求出任意的函数值

设已知函数值为12,,...,w w 则未知点x 的函数值通过插值可以表示为

1()()L

l l l f x w h x x ==−∑

()h ⋅是插值核心函数,l w 为权系数。插值算法的数值精度及计算量与插值核函数有关。

MATLAB 的imresize 函数和imrotate 函数用于二维图像插值。 MATLAB 影像处理工具箱提供了三种插值方法:

1)最近邻插值(Nearest neighbor interpolation)

最简单的插值,每个插值输出像素的值就是在输入图像中与其最邻近的采样点的值

()()k f x f x =

1111

()()22

k k k k x x x x x −++<<+ 最近邻插值是工具箱函数默认使用的插值方法,而且这种插值方法的运算量非常小。 对于索引图像来说是唯一可行的方法。

频域特性不好,当图像含有精细的内容,也就是含有高频分量时,用这种方法实现倍数放大处理,可以看出有明显的块状效应。

2)双线性插值(Bilinear interpolation)

该方法输出像素值在它的输入图像中22×领域采样点的平均值,根据周围4个像素的灰度值在水平和垂直两个方向上对其插值

1,1,,,,m i m n j n a i m b j n i j ′′′′′′<<+<<+=−=−是要插值点的坐标,则双

线性插值的公式为:

(,)(1)(1)(,)(1)(1,)+

(1)(,1)(1,1)

g i j a b g m n a b g m n a bg m n abg m n ′′=−−+−+−++++

按上市计算出来的值赋予图像的几何变换对应于(,)i j ′′的值,即可实现双线性插值

3)双立方插值(Bicubic interpolation)

插值核为三次函数,其插值领域的大小为44×,插值效果较好,但相应的计算量比较大。 三种插值方式比较类似,为了确定插值像素点的数值,必须在输入图像中查找到与出处像素相对应的点。

三种插值方式的区别:

近邻插值输出图像的复制为当前点的像素点;

双线性插值为像素22×矩阵包含的有效点的加权平均; 双立方插值为44×矩阵包含有效点的加权平均值; method 用户指定内插的方法,可选值为 (2) 图像大小调整

利用imresize 函数通过一种特定的插值方法实现图像的调整。函数的语法如下: B=imresize(A,m,method)

返回图像大小等于A的大小乘以放大系数m,在0-1之间则B比A小,否则增大 B=imresize(A,[mrows ncols],method)

返回一个mrows×ncols的图像

B=imresize(A,method,n)

n是平滑滤波器的尺寸,默认11×11

B=imresize(A,method,h)

使用用户自定义的设计插值h进行插值

method 用于指定插值的方法 nearest bilinear bicubic

load woman2;

figure,imshow(X,map);

X1=imresize(X,2,'nearest');

figure,imshow(X1,map);

X2=imresize(X,2,'bilinear');

figure,imshow(X2,map);

X3=imresize(X,2,'bicubic');

figure,imshow(X3,map);

结果总结:进行小倍数放大时,最邻近插值方法的效果尚可,双线性插值的结果有些模糊,双立方插值的效果最好。

(3)图像的旋转

在对数字图像进行旋转的时候,各个像素坐标会发生变化,使得旋转之后不能正好落在整数坐标处,需要进行插值。

利用MATLAB的imrotate对图像进行插值旋转。

B=imrotate(A,angle,method)

使用指定的方法逆时针方向将图像A旋转angle角度,返回图像B通常大于A。

超出的图像部分值补零,为了使返回图像与原图像大小相同,可采用如下格式:

B=imrotate(A,angle,method,`crop`);

将flowers图像插值旋转35度程序清单

clear all;

I=imread('c:\flower.jpg');

J=imrotate(I,35,'bilinear');

figure,imshow(I);

figure,imshow(J);

K=imrotate(I,35,'bilinear','crop');

figure,imshow(K);

(4)图像剪裁

在图像处理过程中,有事只要处理图像一部分,将某部分取出,就要对图像进行剪切。 imcrop函数将图像剪裁成指定矩形区域。该函数的语法:

I2=imcrop(I)

X2=imcrop(X,map);

RGB2=imcroop(RGB);

功能:交互式地对灰度图像,索引图像和真彩图像进行剪切,允许鼠标进行裁剪 I2=imcrop(I,rect);

X2=imcrop(X,map,rect);

RGB2=imcroop(RGB,rect);

rect为四元素向量[xmin ymin width height]

[A ,rect]=imcrop(…);

在交互剪切图像的同时返回剪切框的参数rect

J=imread('pout.tif');

imshow(I);

I=imcrop(J);

imshow(I);

相关文档
最新文档