1、14-1第十四讲第十四讲 图像运算图像运算 (一一 )【 目录目录 】一、图像运算的基本形式 .11、点运算 .22、领域运算 .23、并行运算 .34、串行运算 .35、迭代运算 .36、窗口运算 .37、模板运算 .48帧运算 .4二、图像的点运算 .41、概述 .42、线性点运算 .53、非线性点运算 .6三、图像的代数运算 .71、概述 .72、图像的加法 .83、图像的减法 .94、图像的乘法 105、图像的除法 116、图像四则运算 11四、图像的几何运算 121、概述 122、象素坐标系统 133、空间坐标系统 144、灰度级插值 155、简单的空间变换 16五、仿射变换 18【
2、 正文正文 】一、图像运算的基本形式一、图像运算的基本形式14-2顺顺 向向 扫扫 描描 逆向逆向 扫扫 描描1、点运算、点运算在在 对图对图 像各象素像各象素 进进 行行 处处 理理 时时 ,只 输输 入入 该该 象素本身灰度的运算称象素本身灰度的运算称 为为 点运点运算。2、领域运算、领域运算在在 对图对图 像各象素像各象素 进进 行行 处处 理理 时时 ,不 仅输仅输 入入 该该 象素本身的灰度,象素本身的灰度, 还还 要要 输输 入以入以该该 象素象素 为为 中心的某些局部区域中的一些象素的灰度中心的某些局部区域中的一些象素的灰度 进进 行运算的方式叫行运算的方式叫 领领 域域运算。1
3、4-33、并行运算、并行运算并行运算指的是并行运算指的是 对图对图 像上各象素同像上各象素同 时进时进 行相同行相同 处处 理的运算方式。理的运算方式。点运算由于各象素的点运算由于各象素的 处处 理与其他象素无关,因理与其他象素无关,因 为为 不不 论论 采用采用 顺顺 向向 扫扫 描描 还还 是是逆向逆向 扫扫 描, 结结 果是一果是一 样样 的,所以点运算可以采用并行运算。的,所以点运算可以采用并行运算。对对 于于 领领 域运算,上 图图 可以采用并行运算。下可以采用并行运算。下 图处图处 理用到前理用到前 处处 理的理的 结结 果,所以不能采用并行所以不能采用并行 处处 理方式。4、串行
4、运算、串行运算指按照指按照 顺顺 序序 对对 逐个象素逐个象素 进进 行行 处处 理的方式。上理的方式。上 图图 即是。5、迭代运算、迭代运算反复多次反复多次 进进 行相同行相同 处处 理的运算,称理的运算,称 为为 迭代运算。6、窗口运算、窗口运算为为 减少运算减少运算 时间时间 ,常 对图对图 像的某一部分像的某一部分 进进 行的运算叫窗口运算。行的运算叫窗口运算。14-47、模板运算、模板运算对对 特定形状的区域特定形状的区域 进进 行某种运算方式叫模板运算。行某种运算方式叫模板运算。8帧运算帧运算在两幅或多幅在两幅或多幅 图图 像之像之 间产间产 生的运算叫生的运算叫 帧帧 运算。二、
5、图像的点运算二、图像的点运算1、概述、概述点运算也称点运算也称 为对为对 比度增比度增 强强 和拉伸、灰度和拉伸、灰度 变换变换 ,是一种通 过对图过对图 像中的每像中的每个像素个像素 值进值进 行行 计计 算,从而改善算,从而改善 图图 像像 显显 示效果的操作。点运算常用于改示效果的操作。点运算常用于改 变图变图 像像的灰度范的灰度范 围围 及分布,是 图图 像数字化及像数字化及 图图 像像 显显 示的重要工具。在真正示的重要工具。在真正 进进 行行 图图 像像处处 理之前,有 时时 可以用点运算来克服可以用点运算来克服 图图 像数字化像数字化 设备设备 的局限性。典型的点运的局限性。典型
6、的点运14-5算算 应应 用包括:用包括:光度学光度学 标标 定:通 过对图过对图 像像 传传 感器的非感器的非 线线 性特性作出性特性作出 补偿补偿 来反映某些物来反映某些物理特性,例如,光照 强强 度、光密度等;对对 比度增比度增 强强 :调调 整整 图图 像的亮度、 对对 比度,以便 观观 察;显显 示示 标标 定:利用点运算使得定:利用点运算使得 图图 像在像在 显显 示示 时时 能能 够够 突出所有用突出所有用 户户 感感 兴兴 趣的趣的特征;图图 像分割:像分割: 为图为图 像添加像添加 轮轮 廓廓 线线 ,通常被用来,通常被用来 辅辅 助后助后 续续 运算中的运算中的 边边 界界
7、 检检测测 ;图图 像裁剪:将像裁剪:将 输输 出出 图图 像的灰度像的灰度 级级 限制在可用范限制在可用范 围围 内。点运算是像素的逐点运算,它将点运算是像素的逐点运算,它将 输输 入入 图图 像映射像映射 为输为输 出出 图图 像, 输输 出出 图图 像每像每个像素点的灰度个像素点的灰度 值仅值仅 由由 对应对应 的的 输输 入像素点的灰度入像素点的灰度 值值 决定。点运算不会改决定。点运算不会改 变图变图像内像素点之像内像素点之 间间 的空的空 间间 关系。 设输设输 入入 图图 像像 为为 A(x,y),输输 出出 图图 像像 为为 B(x,y),则则 点点运算可表示运算可表示 为为B
8、(x,y)=fA(x,y)点运算完全由灰度映射函数点运算完全由灰度映射函数 f 决定。根据 f 的不同可以将的不同可以将 图图 像的点运算像的点运算分分 为线为线 性点运算和非性点运算和非 线线 性点运算两种。性点运算两种。2、线性点运算、线性点运算线线 性点运算是指灰度性点运算是指灰度 变换变换 函数函数 为线为线 性函数性函数 时时 的运算。用 表示表示 输输 入入f AD点的灰度点的灰度 值值 , 表示相表示相 应输应输 出点的灰度出点的灰度 值值 ,则则 函数函数 的形式如下:的形式如下:BDfBAbaf见见 下下 图图 所示:当当 a1 时时 ,输输 出出 图图 像的像的 对对 比度
9、会增大;比度会增大;当当 al 时时 ,输输 出出 图图 像的像的 对对 比度会减小;比度会减小;当当 a=1,b=0 时时 ,输输 出出 图图 像就是像就是 输输 入入 图图 像的像的 简单简单 复制;当当 a=1,b0时时 ,输输 出出 图图 像在整体效果上比像在整体效果上比 输输 入入 图图 像要明亮或灰暗。像要明亮或灰暗。当当 a=-1,b=0 时时 ,产产 生生 负负 象象【 例例 】 线性点运算线性点运算14-6rice=imread(rice.png);I=double(rice);J=I*0.43+60;rice2=uint8(J);subplot(1,2,1),imshow(
10、rice);subplot(1,2,2),imshow(rice2); 【 例例 】 负象负象rice=imread(rice.png);I=double(rice);J=-1*I;subplot(1,2,1),imshow(I,);subplot(1,2,2),imshow(J,); 3、非线性点运算、非线性点运算非非 线线 性点运算性点运算 对应对应 与非与非 线线 性的灰度性的灰度 变换变换 函数。下 图图 是几种典型的非是几种典型的非 线线 性性点运算。14-7阈值处阈值处 理和直方理和直方 图图 均匀化,是两种典型的非均匀化,是两种典型的非 线线 性运算,以后介性运算,以后介 绍绍
11、。三、图像的代数运算三、图像的代数运算1、概述、概述图图 像的代数运算是两幅像的代数运算是两幅 输输 入入 图图 像之像之 间进间进 行点行点 对对 点的加、减、乘、除运算后得到后得到 输输 出出 图图 像的像的 过过 程。设输设输 入入 图图 像像 为为 A(x,y)、B(x,y),输输 出出 图图 像像 为为 C(x,y),则图则图 像的代数运算有像的代数运算有如下四种形式:如下四种形式:C(x,y)=A(x,y) B(x,y)C(x,y)=A(x,y) B(x,y)C(x,y)=A(x,y)B(x,y)C(x,y)=A(x,y)B(x,y)图图 像的代数运算在像的代数运算在 图图 像像
12、处处 理中有着广泛的理中有着广泛的 应应 用,它除了可以用,它除了可以 实现实现 自身所自身所需的算需的算 术术 操作, 还还 能能 为许为许 多复多复 杂杂 的的 图图 像像 处处 理提供准理提供准 备备 。例如, 图图 像减法就可像减法就可以用来以用来 检测检测 同一同一 场场 景或物体生成的两幅或多幅景或物体生成的两幅或多幅 图图 像的像的 误误 差。我我 们们 可以使用可以使用 MATLAB 基本算基本算 术术 符符 (、 、等等 )来来 执执 行行 图图 像的算像的算 术术操作,但是在此之前必操作,但是在此之前必 须须 将将 图图 像像 转换为转换为 适合适合 进进 行基本操作的双精
13、度行基本操作的双精度 类类 型。图图 像像 处处 理工具箱包含了一个能理工具箱包含了一个能 实现实现 所有数所有数 值值 数据的算数据的算 术术 操作的函数集操作的函数集合。列 举举 如下:函函 数数 名名 功功 能能 描描 述述Imabsdiif 两幅两幅 图图 像的像的 绝对绝对 差差 值值14-8Imadd 两个两个 图图 像的加法像的加法imcomplment 补补 足一幅足一幅 图图 像像imdivide 两个两个 图图 像的除法像的除法imlincomb 计计 算两幅算两幅 图图 像的像的 线线 形形 组组 合合lmmultiply 两个两个 图图 像的乘法像的乘法Imsubtra
14、ct 两个两个 图图 像的减法像的减法使用使用 图图 像工具箱中的像工具箱中的 图图 像代数运算函数无需再像代数运算函数无需再 进进 行数据行数据 类类 型型 间间 的的 转换转换 ,这这 些函数能些函数能 够够 接受接受 uint8 和和 uintl6 数据,并返回相同格式的数据,并返回相同格式的 图图 像像 结结 果。图图 像的代数运算函数使用以下截取像的代数运算函数使用以下截取 规则规则 使运算使运算 结结 果符合数据范果符合数据范 围围 的要的要求:超出数据范求:超出数据范 围围 的整型数据将被截取的整型数据将被截取 为为 数据范数据范 围围 的极的极 值值 ,分数 结结 果将被四果将
15、被四舍五入。例如,如果数据舍五入。例如,如果数据 类类 型是型是 uint8,那么大于 255 的的 结结 果果 (包括无包括无 穷穷 大大 inf)将被将被 设设 置置 为为 255。无无 论进论进 行哪一种代数运算都要保行哪一种代数运算都要保 证证 两幅两幅 输输 入入 图图 像的大小相等,且像的大小相等,且 类类 型相型相同。2、图像的加法、图像的加法MATLAB 中中 调调 用用 imadd 函数函数 实现图实现图 像相加,格式如下:Z=imadd(X,Y);其中 Z=X Y。【 例例 】 使用加法操作将两幅图像叠加在一起使用加法操作将两幅图像叠加在一起I=imread(rice.pn
16、g);J=imread(cameraman.tif);K=imadd(I,J);subplot(2,2,1);imshow(I);subplot(2,2,2);imshow(J);subplot(2,2,3);imshow(K); 14-9【 例例 】 增加增加 RGB图像的亮度图像的亮度RGB=imread(onion.png);RGB2=imadd(RGB,50);subplot(1,2,1),imshow(RGB);subplot(1,2,2),imshow(RGB2); 为为 了避免出了避免出 现饱现饱 和和 现现 象,在 进进 行加法行加法 计计 算前最好将算前最好将 图图 像像 转
17、换为转换为 一种数据一种数据范范 围较宽围较宽 的数据的数据 类类 型。3、图像的减法、图像的减法图图 像减法也称像减法也称 为为 差分方法, MATLAB 中中 调调 用用 imsubtract 函数函数 实现图实现图 像像相减。 调调 用格式如下:用格式如下:Z=imsubtract(X,Y);其中 Z=X Y。【 例例 】 减去不均匀背景减去不均匀背景rice=imread(rice.png);background=imopen(rice,strel(disk,15);rice2=imsubtract(rice,background);14-10subplot(1,2,1),imshow
18、(rice);subplot(1,2,2),imshow(rice2); 【 例例 】 降低降低 RGB图像的亮度图像的亮度RGB=imread(onion.png);RGB2=imsubtract(RGB,50);subplot(1,2,1),imshow(RGB);subplot(1,2,2),imshow(RGB2); 4、图像的乘法、图像的乘法两幅两幅 图图 像像 进进 行乘法运算可以行乘法运算可以 实现实现 掩模操作,即屏蔽掉掩模操作,即屏蔽掉 图图 像的某些部分。像的某些部分。一幅一幅 图图 像乘以一个常数通常被称像乘以一个常数通常被称 为缩为缩 放。如果使用的放。如果使用的 缩缩
19、 放因数大于放因数大于 1,那么将增那么将增 强图强图 像的亮度,如果因数小于像的亮度,如果因数小于 1 则则 会使会使 图图 像像 变变 暗。MATLAB 中中 调调 用用 immultiply 函数函数 实现实现 两幅两幅 图图 像相乘。 调调 用格式如下:用格式如下:Z immultiply(X,Y);其中 Z=XY。【 例例 】 象素值缩放象素值缩放I=imread(moon.tif);J=immultiply(I,1.2);K=immultiply(I,0.6);subplot(1,3,1),imshow(I);subplot(1,3,2),imshow(J);subplot(1,3
20、,3),imshow(K); 14-115、图像的除法、图像的除法除法运算可用于校正成像除法运算可用于校正成像 设备设备 的非的非 线线 性影响。 MATLAB 中中 调调 用用imdivide 函数函数 进进 行两幅行两幅 图图 像相除。 调调 用格式如下:用格式如下:Z=imdivide(X,Y),其中 Z=XY。【例例 】米粒米粒 图图 像除法运算像除法运算rice=imread(rice.png);I=double(rice);J=0.43*I+90;Ip=imdivide(I,J);subplot(2,2,1),imshow(uint8(I);subplot(2,2,3),imsho
21、w(uint8(J);subplot(2,2,4),imshow(uint8(Ip),); 6、图像四则运算、图像四则运算因因 对对 uint8、uintl6 数据,每步运算都要数据,每步运算都要 进进 行数据截取,将会减少行数据截取,将会减少 输输 出出 图图14-12像的信息量。像的信息量。 图图 像四像四 则则 运算运算 较较 好的好的 办办 法是使用函数法是使用函数 imlincomb。该该 函数按双函数按双精度精度 执执 行所有代数运算操作,行所有代数运算操作, 仅对仅对 最后的最后的 输输 出出 结结 果果 进进 行截取, 该该 函数的函数的 调调 用用格式如下:格式如下:Z=im
22、lincomb(A,X,B,Y,C),其中, Z=AX BY CZ=imlincomb(A,X,C),其中: Z AX CZ=imlincomb(A,X,B,Y),其中: Z=AX BY【 例例 】 计算两幅图像的平均值计算两幅图像的平均值CLFI1=imread(rice.png);I2=imread(cameraman.tif);% K=imdivide(imadd(I1,I2),2);K=imlincomb(0.5,I1,0.5,I2);subplot(2,2,1),subimage(I1);subplot(2,2,2),subimage(I2);subplot(2,2,3),subim
23、age(K); 50 100 150 200 25050100150200250 50 100 150 200 2505010015020025050 100 150 200 25050100150200250四、图像的几何运算四、图像的几何运算1、概述、概述几何运算与点运算不同,可以看成是像素在几何运算与点运算不同,可以看成是像素在 图图 像内的移像内的移 动过动过 程, 该该 移移 动动过过 程可以改程可以改 变图变图 像中物体像中物体 对对 象象 (像素像素 )之之 间间 的空的空 间间 关系。几何运算可以是不受关系。几何运算可以是不受任何限制的,但是通常都需要做出一些限制以保持任何限制
24、的,但是通常都需要做出一些限制以保持 图图 像的外像的外 观顺观顺 序。完整的14-13几何运算需要由两个算法来几何运算需要由两个算法来 实现实现 :空 间变换间变换 算法和灰度插算法和灰度插 值值 算法。空空 间变换间变换 主要用来保持主要用来保持 图图 像中曲像中曲 线线 的的 连续连续 性和物体的性和物体的 连连 通性,一般都采通性,一般都采用数学函数形式来描述用数学函数形式来描述 输输 入、 输输 出出 图图 像相像相 应应 像素像素 间间 的空的空 间间 关系。空 间变换间变换 的的一般定一般定 义为义为yxbafyxfg,其中, f 表示表示 输输 入入 图图 像, g 表示表示
25、输输 出出 图图 像,坐 标标 (x,y)指的是空指的是空 间变换间变换 后的后的坐坐 标标 ,要注意 这时这时 的坐的坐 标标 已已 经经 不是原来的坐不是原来的坐 标标 (x,y)了。 a(x,y)和和 b(x,y)分分 别别 是是图图 像的像的 x 和和 y 坐坐 标标 的空的空 间变换间变换 函数。灰度灰度 级级 插插 值值 主要是主要是 对对 空空 间变换间变换 后的像素后的像素 赋赋 予灰度予灰度 值值 ,使之恢复原位置,使之恢复原位置 处处的灰度的灰度 值值 。在几何运算中,灰度 级级 插插 值值 是必不可少的是必不可少的 组组 成部分,因 为图为图 像一像一般用整数位置般用整数
26、位置 处处 的像素来定的像素来定 义义 。而在几何 变换变换 中, g(x,y)的灰度的灰度 值值 一般由一般由 处处 在在非整数坐非整数坐 标标 上的上的 f(x,y)的的 值值 来确定,即 g 中的一个像素一般中的一个像素一般 对应对应 于于 f 中的几中的几个像素之个像素之 间间 的位置,反 过过 来看也是一来看也是一 样样 ,即 f 中的一个像素往往被映射到中的一个像素往往被映射到 g中的几个像素之中的几个像素之 间间 的位置。显显 然,要了解空然,要了解空 间变换间变换 ,首先就要 对图对图 像的坐像的坐 标标 系系 统统 有一个清楚的了有一个清楚的了解。 MATLAB 图图 像像
27、处处 理工具箱主要采用理工具箱主要采用两种坐两种坐 标标 系系 统统 :像素坐:像素坐 标标 系系 统统 和空和空 间间 坐坐 标标系系 统统 。2、象素坐标系统、象素坐标系统像素坐像素坐 标标 系系 统统 下, 图图 像被像被 视为视为 右右 图图 所所示的离散元素网格,网格按照从上到下、示的离散元素网格,网格按照从上到下、从左到右的从左到右的 顺顺 序排列。对对 于像素坐于像素坐 标标 来来 说说 ,第一个分量,第一个分量r(行)向下增 长长 ,第二个分量,第二个分量 c(列)向右增增 长长 。像素坐 标标 是整型数是整型数 值值 ,数据范 围围 在在1 到行或列到行或列 长长 度之度之
28、间间 。像素坐 标标 与与MATLAB 矩矩 阵阵 下下 标标 一一一一 对应对应 ,这这 种种对应对应 关系有助于理解关系有助于理解 图图 像数据矩像数据矩 阵阵 与与图图 像像 显显 示之示之 间间 的关系。例如, 图图 像第五行、第二列的像像第五行、第二列的像素素 值值 将保存在矩将保存在矩 阵阵 元素元素 (5,2)中。在像素坐素坐 标标 中,一个像素被理解中,一个像素被理解 为为 一个离一个离散散 单单 元,由一个 单单 独的坐独的坐 标对标对 唯一确唯一确定,根据 这这 种定种定 义义 方法, 诸诸 如如 (5.3,3.2)这样这样 的位置是没有意的位置是没有意 义义 的。3、空间
29、坐标系统、空间坐标系统14-14如果将像素如果将像素 视为视为 一个正方形,此一个正方形,此 时时 坐坐 标标 (5.3,3.2)是有意是有意 义义 的,并且 该该 位置位置与坐与坐 标标 (5, 2)有区有区 别别 。右 图说图说 明了明了 这这 种空种空 间间 坐坐 标标 系系 统统 的定的定 义义 方法。任何像素中心点的空任何像素中心点的空 间间 坐坐 标标 都与都与 该该 像素的像素坐像素的像素坐 标标 一致。在像素坐在像素坐 标标 中, 图图 像的左上角位置是像的左上角位置是 (1,1),且始 终为终为 (1,1)。在空在空 间间 坐坐 标标 中, 该该 位置缺省情况下位置缺省情况下
30、 为为 (0.5,0.5),但是在空 间间 坐坐 标标 系系 统统 中可中可以使用一个任意的起始点。例如,用以使用一个任意的起始点。例如,用 户户 可以将可以将 图图 像的左上角指定像的左上角指定 为为 点点(19.0,7.5),而不是 (0.5,0.5)。为为 了建立一个非缺省的空了建立一个非缺省的空 间间 坐坐 标标 系系 统统 ,可以在 显显 示示 图图 像像 时时 指定指定 图图 像的像的XDATA 和和 YDATA 属性, 这这 两个属性都是由两个数两个属性都是由两个数 值组值组 成的向量, 这这 两个两个数数 值值 分分 别别 表示第一个和最后一个像素的中心点坐表示第一个和最后一个
31、像素的中心点坐 标标 。【 例例 】 使用非缺省的使用非缺省的 XDATA和和 YDATA显示图像显示图像CLFA=magic(5);x=19.5 23.5;y=8.0 12.0;image(A,xdata,x,ydata,y);axis image;colormap(jet(25); 19 19.5 20 20.5 21 21.5 22 22.5 23 23.5 247.588.599.51010.51111.51212.5 缺省情况下,缺省情况下, 图图 像像 A 的的 XDATA 属性属性 为为 1,size(A,2),而 YDATA 属性属性 为为1,size(A,1)。显显 然,真
32、实实 的坐的坐 标标 延伸范延伸范 围围 略大于略大于 这这 两个数两个数 值间值间 的距离。像素坐像素坐 标标 与空与空 间间 坐坐 标标 另一个容易混淆的地方在于,两个坐另一个容易混淆的地方在于,两个坐 标标 系系 统统 的水平的水平分量符号和垂直分量符号是一种逆分量符号和垂直分量符号是一种逆 转转 关系,像素坐关系,像素坐 标标 从左到右表示从左到右表示 图图 像列的像列的14-15方向,而空 间间 坐坐 标标 从左到右从左到右 则则 相当于相当于 图图 像行的方向。以后,以 r 和和 c 作作 为为 下下标标 的函数采用的是像素坐的函数采用的是像素坐 标标 系系 统统 ,而以 x 和和
33、 y 作作 为为 下下 标标 的函数采用的是空的函数采用的是空 间间坐坐 标标 系系 统统 。4、灰度级插值、灰度级插值实现实现 几何运算有两种方法:几何运算有两种方法:其一其一 为为 前向映射法,即将前向映射法,即将 输输 入像素的灰度一个个地入像素的灰度一个个地 转转 移到移到 输输 出出 图图 像中,如果一个如果一个 输输 入像素被映射到四个入像素被映射到四个 输输 出像素之出像素之 间间 的位置, 则则 其灰度其灰度 值值 就按插就按插 值值法在四个法在四个 输输 出像素之出像素之 间进间进 行分配;行分配;其二其二 为为 后向映射法后向映射法 (像素填充法像素填充法 ),这时这时 将
34、将 输输 出像素逐个地映射回出像素逐个地映射回 输输 入入 图图像中,若 输输 出像素被映射到四个出像素被映射到四个 输输 入像素之入像素之 间间 的位置, 则则 其灰度由它其灰度由它 们们 的插的插值值 来确定。在 实际实际 中,通常采用后向映射法。中,通常采用后向映射法。灰度灰度 级级 插插 值值 是用来估是用来估计计 像素在像素在 图图 像像素像像素 间间 某一某一位置位置 处处 取取 值值 的的 过过 程。例如,如果用如果用 户户 修改了一幅修改了一幅 图图 像像的大小,使其包含比原始像的大小,使其包含比原始像素更多的像素,那么必素更多的像素,那么必 须须 使使用插用插 值值 方法方法
35、 计计 算其算其 额额 外像外像素的灰度取素的灰度取 值值 。灰度灰度 级级 插插 值值 的方法有的方法有很多种,但是插很多种,但是插 值值 操作的方操作的方式都是相同的。无式都是相同的。无 论论 使用何种插使用何种插 值值 方法,首先都需要找到与方法,首先都需要找到与 输输 出出 图图 像像素相像像素相对应对应 的的 输输 入入 图图 像点,然后再通像点,然后再通 过计过计 算算 该该 点附近某一像素集合的点附近某一像素集合的 权权 平均平均 值值 来指来指定定 输输 出像素的灰度出像素的灰度 值值 。像素的 权权 是根据像素到点的距离而定的,不同插是根据像素到点的距离而定的,不同插 值值
36、方方法的区法的区 别别 就在于所考就在于所考 虑虑 的像素集合不同。的像素集合不同。最近最近 邻邻 插插 值值 nearest 输输 出像素将被指定出像素将被指定 为为 像素点所在位置像素点所在位置 处处 的像素的像素值值 ;双双 线线 性插性插 值值 bilinear 输输 出像素出像素 值值 是像素是像素 22 邻邻 域内的域内的 权权 平均平均 值值 ;双三次插双三次插 值值 bicubic 输输 出像素出像素 值值 是像素是像素 44 邻邻 域内的域内的 权权 平均平均 值值 。最近最近 邻邻 插插 值值 不不 够够 精确。双双 线线 性插性插 值值 利用利用 (x,y)点的四点的四个
37、最近个最近 邻邻 像素的灰度像素的灰度 值值 ,按照以下方法照以下方法 计计 算算 (x,y)点的灰点的灰度度 值值 。设输设输 出出 图图 像的像的 宽宽 度度 为为14-16W,高度 为为 H,输输 入入 图图 像的像的 宽宽 度度 为为 w,高度 为为 h,按照 线线 形插形插 值值 的方法,将 输输入入 图图 像的像的 宽宽 度方向分度方向分 为为 W 等份,高度方向分等份,高度方向分 为为 H 等份,那么 输输 出出 图图 像中任像中任意一点意一点 (x,y)的灰度的灰度 值值 就就 应该应该 由由 输输 入入 图图 像中四点像中四点 (a,b)、(a+1,b)、(a,b+1)和和(
38、a+1,b+1)的灰度的灰度 值值 来确定。a 和和 b 的的 值值 分分 别为别为 : Hyhyxwx0(x,y)点的灰度点的灰度 值值 f(x,y)应为应为 :;1,2, bxfabxfbxf其中其中 ),(1,a)1,(,1, bafxbfxbf5、简单的空间变换、简单的空间变换(1) 图图 像像 缩缩 放放MATLAB 使用使用 imresize 函数来改函数来改 变变 一幅一幅 图图 像的大小像的大小 ,调调 用格式如下:用格式如下:B=imresize(A,M,METHOD),其中:A 原原 图图 像;M 缩缩 放系数;放系数;B 缩缩 放后的放后的 图图 像;METHOD插插 值
39、值 方法,可取 值值 nearest,bilinear和和 bicubic。【 例例 】 原图像放大原图像放大 1.25倍倍I,map=imread(kids.tif);J=imresize(I,1.25);subplot(1,2,1),subimage(I,map)subplot(1,2,2),subimage(J,map) 14-1750 100 150 200 250 30050100150200250300350400 100 200 30050100150200250300350400450500 调调 用用 imresize 函数函数 时时 可以指定可以指定 输输 出出 图图 像的
40、真像的真 实实 大小。例如,以下命令将大小。例如,以下命令将创创 建一幅建一幅 100150 的的 输输 出出 图图 像:Y=imresize(X,100 150)注意,如果指定的大小不能注意,如果指定的大小不能 够产够产 生与生与 输输 入入 图图 像同像同 样样 的外的外 观观 比例,那么 输输出的出的 图图 像将会像将会 产产 生失真。(2) 图图 像旋像旋 转转使用使用 imrotate 函数来旋函数来旋 转转 一幅一幅 图图 像。 调调 用格式如下:用格式如下:B=imrotate(A,ANGLE,METHOD,BBOX),其中:A需要旋需要旋 转转 的的 图图 像;ANGLE表示旋
41、表示旋 转转 的角度,正 值为值为 逆逆 时针时针 ;METHOD插插 值值 方法;BBOX 取取 值值 loose(缺省)、 crop【 例例 】 图像旋转图像旋转CLFI,map=imread(kids.tif);J=imrotate(I,35,bilinear);J1=imrotate(I,35,bilinear,crop);subplot(2,2,1),imshow(I,map)subplot(2,2,3),imshow(J,map)subplot(2,2,4),imshow(J1,map) 14-18(3) 图图 像剪切像剪切使用使用 imcrop 函数可以从一幅函数可以从一幅 图图
42、 像中抽取一个矩形的部分。像中抽取一个矩形的部分。 imcrop 函数函数的的 调调 用格式如下:用格式如下:X2=imcrop(X,MAP,RECT)其中, X 表示有待剪切的表示有待剪切的 图图 像,不指定 X 时时 ,imcrop 将当前坐将当前坐 标轴标轴 中的中的图图 像作像作 为为 待剪切的待剪切的 图图 像。 MAP 表示表示 X 为为 索引索引 图图 像像 时时 的的 调调 色板, RECT 定定 义义剪切区的矩形坐剪切区的矩形坐 标标 。如果 调调 用用 imcrop 时时 不指定矩形的坐不指定矩形的坐 标标 ,那么当光 标标 位位于于 图图 像中像中 时时 会会 变变 成十
43、字形,可以通成十字形,可以通 过过 拖曳鼠拖曳鼠 标标 的方式交互式地的方式交互式地 选择选择 一个矩一个矩形。 imcrop 函数根据用函数根据用 户户 的的 选择绘选择绘 制一个矩形,制一个矩形, 释释 放鼠放鼠 标键标键 后将后将 产产 生一个新生一个新的的 图图 像。例如,首先 显显 示一幅如下左示一幅如下左 图图 所示的所示的 图图 像,然后 调调 用用 imcrop。imcrop 函函数会等待用数会等待用 户选择图户选择图 像中的剪切区域,然后函数像中的剪切区域,然后函数 imshow 将将 显显 示剪切得到的示剪切得到的图图 像。imshow(kids.tif);I=imcrop
44、;figure,imshow(I);【 例例 】五、五、 仿射变换仿射变换仿射仿射 变换变换 ,可以用以下函数来描述:,可以用以下函数来描述:,其中, A 是是 变变 形矩形矩bxf14-19阵阵 ,b 是平移矩是平移矩 阵阵 。(1) 尺度尺度 变换变换变换变换 矩矩 阵阵 : ,S0SAS0【 例例 】CLF;I=checkerboard(20,2);subplot(121);imshow(I);axis on;title(原原 图图 )s=1.5;T=s 0;0 s;0 0;tf=maketform(affine,T);I1=imtransform(I,tf,bicubic,FillVa
45、lues,0.3);subplot(122);imshow(I1);axis on;title(尺度尺度 变换变换 ) 伸伸20 40 60 801020304050607080伸伸伸伸20 40 60 80 100 12020406080100120(2) 伸伸 缩变换缩变换变换变换 矩矩 阵阵 : tAt01【 例例 】CLF;I=checkerboard(20,2);subplot(121);imshow(I);axis on;title(原原 图图 )t=2;T=1 0;0 t;0 0;tf=maketform(affine,T);I1=imtransform(I,tf,bicubic
46、,FillValues,0.3);subplot(122);imshow(I1);axis on;title(伸伸 缩变换缩变换 ) 14-20伸伸20 40 60 801020304050607080伸伸伸伸20 40 60 8020406080100120140(3) 扭曲扭曲 变换变换变换变换 矩矩 阵阵 : 10uAu【 例例 】CLF;I=checkerboard(20,2);subplot(121);imshow(I);axis on;title(原原 图图 )u=0.5;T=1 u;0 1;0 0;tf=maketform(affine,T);I1=imtransform(I,t
47、f,bicubic,FillValues,0.3);subplot(122);imshow(I1);axis on;title(扭曲扭曲 变换变换 ) 14-21伸伸20 40 60 801020304050607080伸伸伸伸20 40 60 8020406080100120(4) 旋旋 转变换转变换变换变换 矩矩 阵阵 : cosinirA【 例例 】CLF;I = checkerboard(20,2);subplot(1,2,1);imshow(I);title(原原 图图 )angle=20*pi/180;sc=cos(angle);ss=sin(angle);T=sc -ss; ss
48、 sc;0 0;tf=maketform(affine,T);I1=imtransform(I,tf,bicubic,FillValues,0.3);subplot(122);imshow(I1);title(旋旋 转变换转变换 ) 伸伸 伸伸伸伸(5) 综综 合合 变换变换14-22变换变换 矩矩 阵阵 : ,cossinsi icoSTUSAyxDB,【 例例 】CLF;I = checkerboard(20,2);subplot(1,2,1);imshow(I);title(原原 图图 )s=2;As=s 0;0 s; % 尺度尺度t=2;At=1 0;0 t; % 伸伸 缩缩u=1.5;Au=1 u;0 1; % 扭曲扭曲st=30*pi/180;sc=cos(angle);ss=sin(angle);Ast=sc -ss; ss sc; % 旋旋 转转T=As*At*Au*Ast;3 5;tf=maketform(affine,T);I1=imtransform(I,tf,bicubic,FillValues,0.3);subplot(122);imshow(I1);title(综综 合合 ) 伸伸伸伸(6)控制