数字图像处理 第五讲(老师的课件)
- 格式:pdf
- 大小:3.15 MB
- 文档页数:31
数字图像处理第五讲(老师的课件)3.4.3图像几何运算在处理图像的过程中,需要对图像的大小和几何关系进行调整:缩放旋转图像中的每个像素值都发生变化数字坐标是整数,经过变换之后不一定是整数因此要对变换之后的整数坐标值位置的像素进行估计 (1)图像的插值插值是常用的数学运算,通常利用曲线拟合的方法,通过离散的采样点建立连续函数逼近真实曲线,用这个重建的函数求出任意的函数值设已知函数值为12,,...,w w 则未知点x 的函数值通过插值可以表示为1()()Ll 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()()22k 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×,插值效果较好,但相应的计算量比较大。
3.4.3图像几何运算在处理图像的过程中,需要对图像的大小和几何关系进行调整:缩放 旋转 图像中的每个像素值都发生变化数字坐标是整数,经过变换之后不一定是整数 因此要对变换之后的整数坐标值位置的像素进行估计 (1)图像的插值插值是常用的数学运算,通常利用曲线拟合的方法,通过离散的采样点建立连续函数逼近真实曲线,用这个重建的函数求出任意的函数值设已知函数值为12,,...,w w 则未知点x 的函数值通过插值可以表示为1()()Ll 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()()22k 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×11B=imresize(A,method,h)使用用户自定义的设计插值h进行插值method 用于指定插值的方法 nearest bilinear bicubicload 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(…);在交互剪切图像的同时返回剪切框的参数rectJ=imread('pout.tif');imshow(I);I=imcrop(J);imshow(I);K=imcrop(J,[0,0,100,100]); imshow(K)3.4.4 图像领域和块操作输出图像中的每个像素值都是对应的输入像素及其某个领域内的像素共同决定 利于指一个远远小于图像尺寸的形状规则的像素块 22× 33× 44×的正方形 或者用来近似表示圆及椭圆等形状的多边形 一幅图像所定义的所有领域应具有相同的大小领域操作包括滑动领域操作和分离领域操作(图像块操作)两种类型滑动领域操作:输入像素以像素为单位进行处理,对于每个像素,指定操作将决定输出图像相应的像素值分离领域操作:基于像素领域的数值进行,输入图像每次处理一个领域 (1)滑动领域操作在MATLAB 中,领域是一个像素集,像素集包含的元素由中心像素的位置决定。
滑动领域操作一次只处理一个像素。
当操作从图像矩阵的一个位置移动到另一个位置,滑动领域也朝相同方向移动,如图×的滑动领域,中心像素的计图中滑动领域2×3的矩阵块,黑点表示中心像素,对于m n算方法如下:floor m n+([,]1/2)在MATLAB进行滑动领域操作的过程:1选择像素2确定滑动领域3调用适当的函数对滑动领域进行计算4查找输出图像与输入图像对应处的像素,将该像素数值设置为上一步中得到的返回值。
5对每个像素重复上述操作介绍MATLAB提供的集中用于领域操作函数MATLAB提供的领域操作函数1) colfilt(A,[m n],block_type,fun)功能:实现快速的领域操作,图像块的尺寸m×n,block_type为指定块的移动方式, distinct为图像块不重叠sliding,图像块滑动 fun为运算函数I=imread(‘alumgrns.tif’);I2=colfilt(I,[5 5],’sliding’,’mean’);imshow(I);figure,imshow(I2,[]);对于滑动领域操作,colfilt函数为图像中的每个像素建一个列向量,向量各元素对应该像素的领域的元素。
colfilt函数生成的临时矩阵被传递给自定义函数,自定义函数为矩阵的每一列返回一个单独值。
MATLAB中很多函数都具有这种功能 std mean例:对输入图像进行处理,输出图像为每个像素领域的最大值f=inline(‘max(x)’);J=colfilt(I,[8 8],’sliding’,f);clear;I=imread('rice.png');I2=uint8(colfilt(I,[2 2],'sliding','mean'));subplot(2,2,1),subimage(I);I2=uint8(colfilt(I,[2 2],'sliding','mean'));subplot(2,2,2),subimage(I2);I2=uint8(colfilt(I,[5 5],'sliding','mean'));subplot(2,2,3),subimage(I2);I2=uint8(colfilt(I,[15 15],'sliding','mean'));subplot(2,2,4),subimage(I2);clear;I=imread('rice.png');f=inline('max(x)');J=uint8(colfilt(I,[8 8],'sliding',f)); imshow(J);clear;I=imread('rice.png');f=inline('ones(64,1)*mean(x)'); J=uint8(colfilt(I,[8 8],'distinct',f)); imshow(J);I = imread('rice.png');%imshow(I)I2 = uint8(colfilt(I,[8 8],'sliding',@mean));figure, imshow(I2)nlfilter函数 该函数是通用的滑动窗操作函数,语法格式为B=nlfilter(A,[m n],fun)B=nlfilter(A,[m n],fun,P1,P2)A表示输入图像,[m n]指定领域大小,fun是一个返回值为标量的计算函数,如果该计算需要参数,则P1P2紧跟在参数之后。
返回值B是一个与输入图像相同大小的图像矩阵下面是一个调用nlfilter函数进行滑动操作程序的清单clear;I=imread('tire.tif');f=inline('max(x(:))');J=uint8(nlfilter(I,[3 3],f));subplot(1,2,1),imshow(I);subplot(1,2,2),imshow(J);(2)图像块操作将图像数据矩阵划分为同样大小的矩形区域的操作。