《第6章数字图像的放大缩小及旋转》由会员分享,可在线阅读,更多相关《第6章数字图像的放大缩小及旋转(8页珍藏版)》请在金锄头文库上搜索。
1、第六章第六章 数字图像的放大缩小数字图像的放大缩小及旋转及旋转LOGO6.1 6.1 缩放数字图像的实现方法缩放数字图像的实现方法表6.11 1 2 22 2 4 05 6 7 76 6 3 3表6.21 1 1 1 2 2 2 21 1 1 1 2 2 2 22 2 2 2 4 4 0 02 2 2 2 4 4 0 05 5 6 6 7 7 7 75 5 6 6 7 7 7 76 6 6 6 3 3 3 36 6 6 6 3 3 3 3LOGO6.1 6.1 缩放数字图像的实现方法缩放数字图像的实现方法放大放大2 2倍后,图像边长增加了倍后,图像边长增加了2 2倍,图像面积则增加倍,图像面积
2、则增加4 4倍,由于图像面倍,由于图像面积可以用图像像素总数表示,所以,图像像素总数应该是原图像的积可以用图像像素总数表示,所以,图像像素总数应该是原图像的4 4倍。因此,原图像中每一个像素被复制成倍。因此,原图像中每一个像素被复制成4 4个像素放到新的放大图像个像素放到新的放大图像中,就是图像放大中,就是图像放大2 2倍的方法倍的方法 LOGO6.1 6.1 缩放数字图像的实现方法缩放数字图像的实现方法imageijimageij newimagenewimage i* i*yjyj*y *y (6-1)6-1)newimageijnewimageij=imagei/yj/yimagei/y
3、j/y (6-2)(6-2)LOGO6.1 6.1 缩放数字图像的实现方法缩放数字图像的实现方法 图6.2 式(6-1)导致错误的缩放结果LOGO6.2 6.2 缩放和旋转的编程实训缩放和旋转的编程实训设新点邻近的四个点像素值分别为为设新点邻近的四个点像素值分别为为pa,pb,pc,pdpa,pb,pc,pd, , y=( y=(int)floor(iint)floor(i*h/(double)h1);*h/(double)h1); x=( x=(int)floor(jint)floor(j*w/(double)w1);*w/(double)w1);则:则:pa=pa=imageyximage
4、yx; pbpb=imageyx+1;=imageyx+1; pc=imagey+1x; pc=imagey+1x; pd=imagey+1x+1; pd=imagey+1x+1;LOGOdouble double cxcx(与右邻点的(与右邻点的x x坐标之差)坐标之差)double cydouble cy(与下邻点的(与下邻点的y y坐标之差)坐标之差) cxcx=1-j*w%w1/ (double)w1=1-j*w%w1/ (double)w1; cy=1-i*h%h1/ (double)h1cy=1-i*h%h1/ (double)h1;则由插值公式得目标图像的像素值为:则由插值公式得
5、目标图像的像素值为: imageijimageij=(=(intint) ( ) ( cxcx*cy*cy*pa+cypa+cy*(1-cx)*(1-cx)*pbpb+ (1-cy)*+ (1-cy)*cxcx*pc*pc + (1-cx)*(1-cy)*pd+0.5 ) + (1-cx)*(1-cy)*pd+0.5 )3. 3. 整数优化(减少浮点运算)整数优化(减少浮点运算)LOGO习 题 六可以将数字图像缩小后保存,使用时再放大吗?为什么?可以将数字图像缩小后保存,使用时再放大吗?为什么?为什么不能使用式(为什么不能使用式(6-16-1)进行直接计算新图像?而要使用式()进行直接计算新图像?而要使用式(6-6-2 2)?)?为什么图像旋转为什么图像旋转270270、180180、9090要特殊处理?而不是和其他度数一要特殊处理?而不是和其他度数一样处理?样处理?6.2.16.2.1和和6.2.26.2.2两种双线性插值的编程方法有细小的区别,体会这种两种双线性插值的编程方法有细小的区别,体会这种细小的区别,并理解实际编程时可以根据需要调整程序算法。细小的区别,并理解实际编程时可以根据需要调整程序算法。