数字图像处理几何变换
图像的几何变换的两种实现(旋转、平移、放大、缩小)

面向对象程序设计学号:2学生所在学院:信息工程学院学生姓名:邵丽群任课教师:熊邦书教师所在学院:信息工程学院2013级实现图像的几何变换电子信息工程信息工程学院摘要:几何变换是最常见的图像处理手段,通过对变形的图像进行几何校正,可以得出准确的图像。
常用的几何变换功能包括图像的平移、图像的镜像变换、图像的转置、图像的缩放、图像的旋转等等。
目前数字图像处理的应用越来越广泛,已经渗透到工业、航空航天、军事等各个领域,在国民经济中发挥越来越大的作用。
作为数字图像处理的一个重要部分,本文接受的工作是如何Visual C++编程工具设计一个完整的应用程序,实现经典的图像几何变换功能。
程序大概分为两大部分:读写BMP图像,和数字图像的几何变换。
即首先用Visual C++创建一个单文档应用程序框架,在实现任意BMP图像的读写,打印,以及剪贴板操作的基础上,完成经典的图像几何变换功能。
图像几何变换的Visual C++编程实现,为校内课题的实现提供了一个实例。
关键字:图像处理;几何变换(图像的平移、缩放、转置、旋转和镜像变换);BMP图像;Visual C++一、引言图像几何变换是指用数学建模的方法来描述图像位置、大小、形状等变化的方法。
在实际场景拍摄到的一幅图像,如果画面过大或过小,都需要进行缩小或放大。
如果拍摄时景物与摄像头不成相互平行关系的时候,会发生一些几何畸变,例如会把一个正方形拍摄成一个梯形等。
这就需要进行一定的畸变校正。
在进行目标物的匹配时,需要对图像进行旋转、平移等处理。
在进行三维景物显示时,需要进行三维到二维平面的投影建模。
因此,图像几何变换是图像处理及分析的基础。
图像几何变换是计算机图像处理领域中的一个重要组成部分,也是值得深讨的一个重要课题。
在图像几何变换中主要包括图像的放缩、图像的旋转、图像的移动、图像的镜像、图像的块操作等内容,几何变换不改变图像的像素值,只改变像素所在的几何位置。
从广义上说,图像是自然界景物的客观反映,是人类认识世界和人类本身的重要源泉。
数字图像处理 -习题2增强-噪声-几何变换-频域变换

第三章图像增强一.填空题1. 我们将照相机拍摄到的某个瞬间场景中的亮度变化范围,即一幅图像中所描述的从最暗到最亮的变化范围称为____动态范围__。
2.所谓动态范围调整,就是利用动态范围对人类视觉的影响的特性,将动态范围进行__压缩____,将所关心部分的灰度级的变化范围扩大,由此达到改善画面效果的目的。
3. 动态范围调整分为线性动态范围调整和__非线性调整___两种。
4. 直方图均衡化把原始图的直方图变换为分布均匀的形式,这样就增加了象素灰度值的动态范围从而可达到增强图像整体对比度的效果。
基本思想是:对图像中像素个数多的灰度值进行__展宽_____,而对像素个数少的灰度值进行归并,从而达到清晰图像的目的。
5. 数字图像处理包含很多方面的研究内容。
其中,__图像增强_的目的是将一幅图像中有用的信息进行增强,同时将无用的信息进行抑制,提高图像的可观察性。
6. 灰级窗,是只将灰度值落在一定范围内的目标进行__对比度增强___,就好像开窗观察只落在视野内的目标内容一样。
二.选择题1. 下面说法正确的是:(B )A、基于像素的图像增强方法是一种线性灰度变换;B、基于像素的图像增强方法是基于空间域的图像增强方法的一种;C、基于频域的图像增强方法由于常用到傅里叶变换和傅里叶反变换,所以总比基于图像域的方法计算复杂较高;D、基于频域的图像增强方法比基于空域的图像增强方法的增强效果好。
2. 指出下面正确的说法:(D )A、基于像素的图像增强方法是一种非线性灰度变换。
B、基于像素的图像增强方法是基于频域的图像增强方法的一种。
C、基于频域的图像增强方法由于常用到傅里叶变换和傅里叶反变换,所以总比基于图像域的方法计算复杂较高。
D、基于频域的图像增强方法可以获得和基于空域的图像增强方法同样的图像增强效果。
3.指出下面正确的说法:(D )①基于像素的图像增强方法是一种非线性灰度变换。
②基于像素的图像增强方法是基于空域的图像增强方法的一种。
数字图像处理学

数字图像处理学数字图像处理(digital image processing)是通过计算机对图像进行去除噪声、增强、复原、分割、提取特征等处理的方法和技术。
数字图像处理的产生和迅速发展主要受三个因素的影响:一是计算机的发展;二就是数学的发展(特别就是离散数学理论的创办和健全);三是广泛的农牧业、林业、环境、军事、工业和医学等方面的应用需求的增长。
一、实验内容:主要是图像的几何变换的编程实现,具体包括图像的读取、改写,图像平移,图像的镜像,图像的转置,比例缩放,旋转变换等,具体要求如下:1、编程同时实现图像位移,建议位移后的图像大小维持不变;2、编程实现图像的镜像;3、编程同时实现图像的单位矩阵;4、编程实现图像的比例缩放,要求分别用双线性插值和最近邻插值两种方法来实现,并比较两种方法的缩放效果;5、编程同时实现以任一角度对图像展开旋转变换,建议分别用双线性插值和最近邻插值两种方法去同时实现,并比较两种方法的转动效果。
二、实验目的和意义:本实验的目的就是并使学生熟识并掌控图像处理编程环境,掌控图像位移、镜像、单位矩阵和转动等几何变换的方法,并能够通过程序设计同时实现图像文件的读、写下操作方式,及图像位移、镜像、单位矩阵和转动等几何变换的程序实现。
三、实验原理与主要框架:3.1实验所用编程环境:visualc++(简称vc)是微软公司提供的基于c/c++的应用程序集成开发工具、vc拥有丰富的功能和大量的扩展库,使用它能有效的创建高性能的windows应用程序和web应用程序。
vc除了提供更多高效率的c/c++编译器外,还提供更多了大量的可以器重类和组件,包含知名的谷歌基础类库(mfc)和活动模板类库(atl),因此它就是软件开发人员不可多得的开发工具。
vc丰富的功能和大量的扩展库,类的重用特性以及它对函数库、dll库的支持能使程序更好的模块化,并且通过向导程序大大简化了库资源的使用和应用程序的开发,正由于vc具有明显的优势,因而我选择了它来作为数字图像几何变换的开发工具。
数字图像处理-图像基本运算

数字图像处理_图像基本运算图像基本运算1点运算线性点运算是指输⼊图像的灰度级与输出图像呈线性关系。
s=ar+b(r为输⼊灰度值,s为相应点的输出灰度值)。
当a=1,b=0时,新图像与原图像相同;当a=1,b≠0时,新图像是原图像所有像素的灰度值上移或下移,是整个图像在显⽰时更亮或更暗;当a>1时,新图像对⽐度增加;当a<1时,新图像对⽐度降低;当a<0时,暗区域将变亮,亮区域将变暗,点运算完成了图像求补; ⾮线性点运算是指输⼊与输出为⾮线性关系,常见的⾮线性灰度变换为对数变换和幂次变换,对数变换⼀般形式为:s=clog(1+r)其中c为⼀常数,并假设r≥0.此变换使窄带低灰度输⼊图像映射为宽带输出值,相对的是输出灰度的⾼调整。
1 x=imread('D:/picture/DiaoChan.jpg');2 subplot(2,2,1)3 imshow(x);4 title('原图');5 J=0.3*x+50/255;6 subplot(2,2,2);7 imshow(J);8 title('线性点变换');9 subplot(2,2,3);10 x1=im2double(x);11 H=2*log(1+x1);12 imshow(H)13 title('⾮线性点运算');%对数运算幂次变换⼀般形式:s=cr^γ幂级数γ部分值把窄带暗值映射到宽带输出值下⾯是⾮线性点运算的幂运算1 I=imread('D:/picture/DiaoChan.jpg');2 subplot(2,2,1);3 imshow(I);title('原始图像','fontsize',9);4 subplot(2,2,2);5 imshow(imadjust(I,[],[],0.5));title('Gamma=0.5');7 imshow(imadjust(I,[],[],1));title('Gamma=1');8 subplot(2,2,4);9 imshow(imadjust(I,[],[],1.5));title('Gamma=1.5');2代数运算和逻辑运算加法运算去噪处理1 clear all2 i=imread('lenagray.jpg');3 imshow(i)4 j=imnoise(i,'gaussian',0,0.05);5 [m,n]=size(i);6 k=zeros(m,n);7for l=1:1008 j=imnoise(i,'gaussian',0,0.05);9 j1=im2double(j);10 k=k+j1;11 End12 k=k/100;13 subplot(1,3,1),imshow(i),title('原始图像')14 subplot(1,3,2),imshow(j),title('加噪图像')15 subplot(1,3,3),imshow(k),title(‘求平均后的减法运算提取噪声1 I=imread(‘lena.jpg’);2 J=imnoise (I,‘lena.jpg’,0,0.02);3 K=imsubtract(J,I);4 K1=255-K;5 figure;imshow(I);7 figure;imshow(K1);乘法运算改变图像灰度级1 I=imread('D:/picture/SunShangXiang.jpg')2 I=im2double(I);3 J=immultiply(I,1.2);4 K=immultiply(I,2);5 subplot(1,3,1),imshow(I);subplot(1,3,2),imshow(J);6 subplot(1,3,3);imshow(K);逻辑运算1 A=zeros(128);2 A(40:67,60:100)=1;3 figure(1)4 imshow(A);5 B=zeros(128);6 B(50:80,40:70)=1;7 figure(2)8 imshow(2);9 C=and(A,B);%与10 figure(3);11 imshow(3);12 D=or(A,B);%或13 figure(4);14 imshow(4);15 E=not(A);%⾮16 figure(5);17 imshow(E);3⼏何运算平移运算实现图像的平移1 I=imread('lenagray.jpg');2 subplot(1,2,1);3 imshow(I);4 [M,N]=size(I);g=zeros(M,N);5 a=20;b=20;6for i=1:M7for j=1:N8if((i-a>0)&(i-a<M)&(j-b>0)&(j-b<N)) 9 g(i,j)=I(i-a,j-b);10else11 g(i,j)=0;12 end13 end14 end15 subplot(1,2,2);imshow(uint8(g));⽔平镜像变换1 I=imread('lena.jpg');2 subplot(121);imshow(I);3 [M,N]=size(I);g=zeros(M,N);4for i=1:M5for j=1:N6 g(i,j)=I(i,N-j+1);7 end8 end9 subplot(122);imshow(uint8(g));垂直镜像变换1 I=imread('lena.jpg');2 subplot(121);imshow(I);3 [M,N]=size(I);g=zeros(M,N);4for i=1:M5for j=1:N6 g(i,j)=I(M-i+1,j);7 end8 end9 subplot(122);imshow(uint8(g));图像的旋转1 x=imread('D:/picture/DiaoChan.jpg');2 imshow(x);3 j=imrotate(x,45,'bilinear');4 k=imrotate(x,45,'bilinear','crop');5 subplot(1,3,1),imshow(x);6 title(‘原图')7 subplot(1,3,2),imshow(j);8 title(‘旋转图(显⽰全部)')9 subplot(1,3,3),imshow(k);10 title(‘旋转图(截取局部)')⼏种插值法⽐较1 i=imread('lena.jpg');2 j1=imresize(i,10,'nearest');3 j2=imresize(i,10,'bilinear');4 j3=imresize(i,10,'bicubic');5 subplot(1,4,1),imshow(i);title(‘原始图像')6 subplot(1,4,2),imshow(j1);title(‘最近邻法')7 subplot(1,4,3),imshow(j2);title(‘双线性插值法')8 subplot(1,4,4),imshow(j3);title(‘三次内插法')放缩变换1 x=imread('D:/picture/ZiXia.jpg')2 subplot(2,3,1)3 imshow(x);4 title('原图');5 Large=imresize(x,1.5);6 subplot(2,3,2)7 imshow(Large);8 title('扩⼤为1.5');9 Small=imresize(x,0.1);10 subplot(2,3,3)11 imshow(Small);12 title('缩⼩为0.3');13 subplot(2,3,4)14 df=imresize(x,[600700],'nearest');15 imshow(df)16 title('600*700');17 df1=imresize(x,[300400],'nearest');18 subplot(2,3,5)19 imshow(df1)20 title('300*400');后记:(1)MATLAB基础知识回顾1:crtl+R是对选中的区域注释,ctrl+T是取消注释2:有的代码中点运算如O=a.*I+b/255 ,其中b除以255原因是:灰度数据有两种表式⽅法:⼀种是⽤unit8类型,取值0~255;另⼀种是double类型,取值0~1。
数字图像处理图像变换实验报告

实验报告实验名称:图像处理姓名:刘强班级:电信1102学号:1404110128实验一图像变换实验——图像点运算、几何变换及正交变换一、实验条件PC机数字图像处理实验教学软件大量样图二、实验目的1、学习使用“数字图像处理实验教学软件系统”,能够进行图像处理方面的简单操作;2、熟悉图像点运算、几何变换及正交变换的基本原理,了解编程实现的具体步骤;3、观察图像的灰度直方图,明确直方图的作用与意义;4、观察图像点运算与几何变换的结果,比较不同参数条件下的变换效果;5、观察图像正交变换的结果,明确图像的空间频率分布情况。
三、实验原理1、图像灰度直方图、点运算与几何变换的基本原理及编程实现步骤图像灰度直方图就是数字图像处理中一个最简单、最有用的工具,它描述了一幅图像的灰度分布情况,为图像的相关处理操作提供了基本信息。
图像点运算就是一种简单而重要的处理技术,它能让用户改变图像数据占据的灰度范围。
点运算可以瞧作就是“从象素到象素”的复制操作,而这种复制操作就是通过灰度变换函数实现的。
如果输入图像为A(x,y),输出图像为B(x,y),则点运算可以表示为:B(x,y)=f[A(x,y)]其中f(x)被称为灰度变换(Gray Scale Transformation,GST)函数,它描述了输入灰度值与输出灰度值之间的转换关系。
一旦灰度变换函数确定,该点运算就完全确定下来了。
另外,点运算处理将改变图像的灰度直方图分布。
点运算又被称为对比度增强、对比度拉伸或灰度变换。
点运算一般包括灰度的线性变换、阈值变换、窗口变换、灰度拉伸与均衡等。
图像几何变换就是图像的一种基本变换,通常包括图像镜像变换、图像转置、图像平移、图像缩放与图像旋转等,其理论基础主要就是一些矩阵运算,详细原理可以参考有关书籍。
实验系统提供了图像灰度直方图、点运算与几何变换相关内容的文字说明,用户在操作过程中可以参考。
下面以图像点运算中的阈值变换为例给出编程实现的程序流程图,如下:2、图像正交变换的基本原理及编程实现步骤数字图像的处理方法主要有空域法与频域法,点运算与几何变换属于空域法。
数字图像处理---图像的几何变换

数字图像处理---图像的⼏何变换图像的⼏何变换图像的⼏何变换包括了图像的形状变换和图像的位置变换图像的形状变换图像的形状变换是指图像的放⼤、缩⼩与错切图像缩⼩图像的缩⼩是对原有的数据进⾏挑选或处理,获得期望缩⼩尺⼨的数据,并尽量保持原有的特征不消失分为按⽐例缩⼩和不按⽐例缩⼩两种最简单的⽅法是等间隔地选取数据图像缩⼩实现设原图像⼤⼩为M ∗N ,缩⼩为K 1M ∗K 2N (K 1<1,K 2<1)1. 设原图为F (i ,j ),i =1,2,...,M ,j =1,2,...,N ;压缩后地图像为G (x ,y ),x =1,2,...,k 1M ,y =1,2,...,k 2N2. G (x ,y )=F (c 1∗i ,c 2∗j );其中,c 1=1/k 1,c 2=1/k 2图像放⼤图像放⼤时对多出的空位填⼊适当的值,是信息的估计最简单的思想是将原图像中的每个像素放⼤为k ∗k 的⼦块图像放⼤实现设原图像⼤⼩为M ∗N ,缩⼩为K 1M ∗K 2N (K 1>1,K 2>1)1. 设原图为F (i ,j ),i =1,2,...,M ,j =1,2,...,N ;压缩后地图像为G (x ,y ),x =1,2,...,k 1M ,y =1,2,...,k 2N2. G (x ,y )=F (c 1∗i ,c 2∗j );其中,c 1=1/k 1,c 2=1/k 2图像错切图像错切变换实际上是平⾯景物在投影平⾯上的⾮垂直投影效果图像错切的数学模型x ′=x +d x y y ′=y(x ⽅向的错切,dx =tan θ)x ′=x y ′=y +d y x(y ⽅向的错切,dy =tan θ)图像的位置变换图像的位置变换是指图像的平移、镜像与旋转,即图像的⼤⼩和形状不发⽣变化主要⽤于⽬标识别中的⽬标配准图像平移公式:{{x ′=x +Δx y ′=y +Δy图像镜像图像镜像分为⽔平镜像和垂直镜像,即左右颠倒和上下颠倒公式:图像⼤⼩为M*Nx ′=x y ′=−y (⽔平镜像)x ′=−x y ′=y(垂直镜像)由于不能为负,因此需要再进⾏⼀次平移x ′=x y ′=N +1−y (⽔平镜像)x ′=M +1−xy ′=y(垂直镜像)图像旋转公式:x ′=xcos θ−ysin θy ′=xsin θ+ycos θ由于计算结果值所在范围与原有值不同,因此需要在进⾏扩⼤画布、取整、平移等处理画布扩⼤原则:以最⼩的⾯积承载全部的画⾯信息⽅法:根据公式x ′=xcos θ−ysin θy ′=xsin θ+ycos θ计算x ′min ,x ′max ,y ′min ,y ′max旋转后可能导致像素之间相邻连接不再连续,因此需要通过增加分辨率的⽅式填充空洞插值最简单的⽅式就是⾏插值(列插值)⽅法1. 找出当前⾏的最⼩和最⼤的⾮背景点坐标,记作:(i,k1)、(i,k2)2. 在(k1,k2)范围内进⾏插值,插值⽅法为空点的像素值等于前⼀点的像素值3. 重复上述操作直⾄没有空洞图像的仿射变换图像的仿射变换即通过通⽤的仿射变换公式,表⽰⼏何变换{{{{{{{齐次坐标原坐标为(x,y),定义齐次坐标为(wx,wy,w)实质上是通过增加坐标量来解决问题仿射变换通式通过齐次坐标定义仿射变换通式为x ′=ax +by +Δx y ′=cx +dy +Δy⇒x ′y ′=a b Δx c dΔyx y⼏何变换表⽰1. 平移x ′y ′1=10Δx 01Δy 001x y12. 旋转x ′y ′1=cos θ−sin θ0sin θcos θ0001x y 13. ⽔平镜像x ′y ′1=−10001001x y14. 垂直镜像x ′y ′1=1000−10001x y15. 垂直错切x ′y ′1=1d x 00−10001x y16. ⽔平错切x ′y ′1=100d y −10001x y1图像的⼏何校正由于图像成像系统的问题,导致拍摄的图⽚存在⼀定的⼏何失真⼏何失真分为{[][][][][][][][][][][][][][][][][][][][][]1. 系统失真:有规律的、可预测的2. ⾮系统失真:随机的⼏何校正的基本⽅法是先建⽴⼏何校正的数学模型,其次利⽤已知条件确定模型参数,最后根据模型对图像进⾏⼏何校正步骤:1. 图像空间坐标的变换2. 确定校正空间各像素的灰度值(灰度内插)途径:1. 根据畸变原因,建⽴数学模型2. 参考点校正法,根据⾜够多的参考点推算全图变形函数空间坐标变换实际⼯作中利⽤⼀幅基准图像f(x,y),来校正失真图像g(x′,y′)根据⼀些控制点对,建⽴两幅图像之间的函数关系,通过坐标变换,以实现失真图像的⼏何校正两幅图像上的f(x,y)=g(x′,y′)时,称其为对应像素(同名像素)通过表达式x′=h1(x,y)y′=h2(x,y)表⽰两幅图像之间的函数关系通常⽤多项式x′=n∑i=0n−i∑j=0a ij x i y jy′=n∑i=0n−i∑j=0b ij x i y j来近似h1(x,y)、h2(x,y)当多项式系数n=1时,畸变关系为线性变换x′=a00+a10x+a01yy′=b00+b10x+b01y六个未知数需要⾄少三个已知点来建⽴⽅程式当多项式系数n=2时,畸变关系式为x′=a00+a10x+a01y+a20x2+a11xy+a02y2y′=b00+b10x+b01y+b20x2+b11xy+b02y2 12个未知数需要⾄少6个已知点来建⽴⽅程式当超过已知点数⽬超过要求时,通过最⼩⼆乘法求解n=2时多项式通式为B2∗n=H2∗6A6∗n(n为待求点数)B2∗n=x′1x′2⋯x′n y′1y′2⋯y′n{ []H 2∗6=a 00a 10a 01a 20a 11a 02b 00b 10b 01b 20b 11b 02A 6∗n =11⋯1x 1x 2⋯x n y 1y 2⋯y n x 21x 22⋯x 2n x 1y 1x 2y 2⋯x n y ny 21y 22⋯y 2n同名点对要求1. 数量多且分散2. 优先选择特征点直接法利⽤已知点坐标,根据x ′=h 1(x ,y )y ′=h 2(x ,y )⇒x =h ′1(x ′,y ′)y =h ′2(x ′,y ′)x =n ∑i =0n −i∑j =0a ′ij x ′i y′jy =n ∑i =0n −i∑j =0b ′ijx ′i y ′j解求未知参数;然后从畸变图像出发,根据上述关系依次计算每个像素的校正坐标,同时把像素灰度值赋予对应像素,⽣成校正图像由于像素分布的不规则,导致出现像素挤压、疏密不均等现象,因此最后还需要进⾏灰度内插,⽣成规则图像间接法间接法通过假定⽣成图像的⽹格交叉点,从⽹格交叉点(x,y)出发,借助已知点求取未知参数,根据x ′=n ∑i =0n −i∑j =0a ij x i y jy ′=n ∑i =0n −i∑j =0b ij x i y j推算⽹格交叉点(x,y)对应畸变图像坐标(x',y'),由于对应坐标⼀般不为整数,因此需要通过畸变图像坐标周围点的灰度值内插求解,作为⽹格交叉点(x,y)的灰度值间接法相对直接法内插较为简单,因此常采⽤间接法作为⼏何校正⽅法像素灰度内插最近邻元法最近邻元法即根据四邻域中最近的相邻像素灰度决定待定点灰度值该⽅法效果较佳,算法简单,但是校正后图像存在明显锯齿,即存在灰度不连续性双线性内插法[][]{{双线性内插法是利⽤待求点四个邻像素的灰度在两个⽅向上作线性内插该⽅法相较最近邻元法更复杂,计算量更⼤,但是没有灰度不连续的缺点,且具有低通滤波性质,图像轮廓较为模糊三次内插法三次内插法利⽤三次多项式S(x)来逼近理论最佳插值函数sin(x)/xS(x)=1−2|x|2+|x|30≤|x|<1 4−8|x|+5|x|2−|x|31≤|x|<20|x|≥2该算法计算量最⼤,但是内插效果最好,精度最⾼{Processing math: 100%。
数字图像的几何运算

数字图像的几何运算数字图像的几何运算是指对图像进行平移、旋转、缩放和翻转等几何变换操作的过程。
这些几何运算可以改变图像的位置、方向、大小和形状,是数字图像处理中常用的操作之一。
本文将介绍几何运算的原理和应用,并讨论其在图像处理领域的重要性和作用。
一、几何运算的原理数字图像是由像素组成的二维矩阵,每个像素代表图像的一个点,包含了图像的颜色和位置信息。
几何运算是基于像素的位置信息对图像进行变换和调整的方法,可以通过修改像素的坐标来实现图像的平移、旋转、缩放和翻转等操作。
1. 平移平移是指将图像沿着水平和垂直方向进行移动,使得图像的位置发生变化。
平移操作可以通过修改像素的坐标来实现,将每个像素的坐标按照设定的平移量进行移动,从而改变图像的位置。
平移操作可以用以下公式表示:R’(x, y) = R(x-dx, y-dy)R(x, y)代表原始图像的像素,R’(x, y)代表平移后的图像像素,dx和dy分别代表水平和垂直方向的平移量。
二、几何运算的应用几何运算在数字图像处理中具有重要的应用价值,能够实现图像的位置、方向、大小和形状的调整,为图像处理提供了丰富的操作手段。
以下是几何运算的一些常见应用:1. 图像校正对于拍摄时出现的倾斜、扭曲等问题,可以通过旋转操作对图像进行校正,使得图像恢复到正常的状态。
图像校正能够提高图像的质量和美观度,减少图像处理时的误差和影响。
2. 图像增强通过缩放操作对图像进行放大或缩小,可以改变图像的大小和细节,使得图像更加清晰和细致。
图像增强能够提高图像的清晰度和可视性,使得图像更加逼真和吸引人。
3. 图像合成通过平移操作将多个图像进行位置调整,可以实现多个图像的合成和叠加,融合不同图像的信息和特点,生成新的图像内容。
图像合成能够实现图像的复杂处理和创意设计,为图像处理提供了更多的可能性。
4. 图像镜像通过翻转操作对图像进行镜像处理,可以改变图像的对称性和形状,生成镜像对称的图像。
实验4 图像几何变换—哈哈镜制作

switch(method)
{
//最邻近插值图像缩小
caseDOWNRESIZE:
size = cvSize(q*pImg->width,q*pImg->height);
pImg1 = cvCreateImage(size,pImg->depth,pImg->nChannels);
for(j=0;j<pImg1->width;j++)
{
floatsrcX=(float)(j*((float)pImg->width/(float)pImg1->width));
floatsrcY=(float)(i*((float)pImg->height/(float)pImg1->height));
#defineRANGE 100//水平外凹或外凸的幅度
#definePI 3.1415926
//哈哈镜制作
intmain(intargc,char** argv )
{
IplImage* pImg;//声明IplImage指针
IplImage* pImg1;//声明IplImage指针
inti,j;
caseHORAO:
pImg1 = cvCreateImage(cvGetSize(pImg),pImg->depth,pImg->nChannels);
for(i=0;i<pImg1->height;i++)
{
tmp = RANGE*sin(i*PI/pImg1->height);
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
上面的公式中,坐标系I是以图象的中心为原点,向 右为x轴正方向,向上为y轴正方向。它和以图象左 上角点,向右为x轴正方向,向下为y轴正方向的坐 标系II之间的转换关系如何呢?
两种坐 标系间 的转换 关系
逆变换为 :
按照上面的公式,我们可以把变换分成 3步:
第一: 将坐标系II变成I ; 第二: 将该点顺时针旋转a角; 第三: 将坐标系I变回II ,这样,我们 就得到了变换矩阵,是上面三个矩阵的 级联。
第五章数字图像处理中的 基本运算
本章主要内容和基本要求
• 数字图像的基本代数运算 • 数字图像的几何运算
5.1 数字图像处理基本运算的分类
一、图像处理算法的分类: 单幅图像————单幅图像 多幅图像————单幅图像 多幅图像或单幅图像————数值/符号(图像分析) 二、根据基本运算分类 点运算 邻域运算
6×6的原图f
3×3的新图g
图像缩小,可以在原图像中挑选信息,缩小之后的图 与原图像比较丢失了很多信息。
图像放大处理中,需要对放大后多出来的空格填入适 当的象素值,采用最临近插值法举例如下:
4×4的以原图f
长和宽各放大2倍,利用公式得到8×8的新 图像。新图像中各象素位置 X0=0 X2=1 X4=2 X6=3 Y0=0 Y2=1 Y4=2 Y6=3 X1=0.5 X3=1.5 X5=2.5 X7=3.5 Y1=0.5 Y3=1.5 Y5=2.5 Y7=3.5
• 图像旋转是指图像以某一点作为轴转过一定的 角度。通常的做法是以图象的中心为圆心旋转。 • 例如:图7旋转30度(顺时针方向)后的图象 如图8所示. 可以看出,旋转后图象变大了。
图-7原图
图-8旋转后的图
若要使旋转后保持原尺寸图像就要进行裁切
有些内容就会损失。我们采用第一种做法
图像旋转变换矩阵
在新图的坐标系中
中的象素
g (0,0)
是左上角的象素,原图
f(-tx,-ty),新的坐标系中g(0,0)=f(-tx,-ty)。
例如:
f ( x0 , y0 )
在新坐标系中的位置变成了
平移后出现的问题
• 1、如果新图中有一点(x1,y1),按照公式(2)得到的 (x0,y0)不在原图中该怎么办? 通常的做法是,把该点的RGB值统一设成(0,0,0)或者 (255,255,255)。 • 2、平移后的图象是否要放大? • 一种做法是不放大,移出的部分被截断,如下图所示, 图2为原图,图3为移动后的图。这种处理,文件大小 不会改变。 •
五、缩放(zoom)
• 图像比例缩放是指将给定的图像在x轴方向按比 例缩放fx倍,沿y轴方向比例缩放fy。当fx= fy 时,称为图像的全比例缩放。当fx ‡fy时,图像 象素间的相对位置会发生畸变。 • 设原图像中的点P(x0,,y0),比例缩放后在新的图 像中对应点P(x,y), P(x0,,y0)和 P(x,y)之间的 对应关系如图所示:
双线形插值(Bilinear Intrepolation) 曲线插值(Curvilinear Interpolation)
(1)最临近插值
• 图像变换后找不到相应的象素点时,直接赋值 为和它最相近的的象素值的插值算法。 • 例如:在图像的缩放中,将一幅6×6的图像 按比例缩小,fx=fy=1/2,图像的长和宽均缩 小到原来的一半,成为一幅3×3的图像。 原图像的象素从(0,0)到(5,5),新图 像的象素从(0,0)到(2,2)。如下图:
平移前的图
平移后的图像
还有一种做法是:将图象放大,使得能够显示下所有部分
移动后被放大图像
• 这种处理,文件大小要改变。设原图的宽和高 分别是w1,h1则新图的宽和高变为w1+|tx|和 h1+|ty|,加绝对值符号是因为tx,ty有可能为 负. 下面给出Translation的源代码。算法的思想是 先将所有区域填成白色,然后找平移后显示区 域的左上角点(x0,y0)和右下角点(x1,y1)。 分几种情况:
f11 c f12 c f13 c J f c f 21 c f 22 c f 23 c f c f c f c 32 33 31
给整幅图像增加灰度级会使图像亮度得到提 高整体偏亮,给个别象素加灰度值可以使目 标景物突出,例如:
三、镜象(mirror)
• 镜象分水平镜象和垂直镜象两种
原图
水平镜像
垂直镜像
镜象的变换矩阵很简单,设原图宽为w,高为h, 变换后,图的宽和高不变. 水平镜象为:
垂直镜象为
四、转置(transpose)
• 转置是指将x,y坐标 对换
原图
转制后的图
要注意的是,转置和旋转90度是有区别的,不信你 可以试试,你怎么转,也转不出图15度来。另外, 转置后图的宽高对换了。 转置的变换矩阵很简单:
bg11 bg12 K bg bg 21 bg 22 bg 31 bg 32
bg13 bg 23 bg 33
af11 af af 21 af 31
af12 af 22 af 32
af13 af 23 af 33
先看x方向(width指图象的宽度)
1.tx≤-width 很显然,图象完全移出了屏幕,不用做任何处 理 2.-width<tx≤0,如图5所示图像向左上方移 动 图象区域的x范围从0到width-|tx|,对应原图 的范围从|tx|到width
图5
3.0<tx<width , 如图6所示 , 图像向右下方平移 0<tx<width,0<ty<height的情况图象区域的x范围 从tx到width,对应原图的范围从0到width-tx
5.2 点运算
• 一、数字图像的代数运算 • 1、基本代数运算基础: 设图像
I f ( x, y)
J g ( x, y)
其运算可以分为图像自身的运算和图像间的运算, 从根本上而言可以看成对图像位置的运算或对该位 置上灰度级的运算。
基本代数运算:图像象素几何位置不变图 像灰度级的加、减、 乘、 除等运算。 几何运算:图像象素位置变换后,经过计 算,确定该象素灰度的运算。
这种做法利用了位图存储的连续性, 即同一行的像素在内存中是相邻的。 利用memcpy函数,从(x0,y0)点开始, 一次可以拷贝一整行(宽度为x1-x0), 然后将内存指针移到(x0,y0+1)处,拷贝 下一行,这样拷贝(y1-y0)行就完成了 全部操作,避免了一个一个像素的计 算,提高了效率。
二、旋转(rotation)
给一幅图像乘以一个系数,可以改变图像的灰 度级范围如:
af11 J af af 21 af 31
af12 af 22 af 32
af13 af 23 af 33
原来是20-200的灰度级范围,乘以2则 有40-400的灰度级范围
两幅连续的图像运算可以有基本运算组合而成 如:K=af+bg:
图6
4.tx≥width,图象完全移出了屏幕,不用做任 何处理 。
y方向是对应的(height表示图象的高度
1.ty≤-height,图象完全移出了屏幕,不用做任 何处理 2.-height<ty≤0,图象区域的y范围从0到 height-|ty|,对应原图的范围从|ty|到height 3.0<ty<height ,图象区域的y范围从ty到 height,对应原图的范围从0到height-ty 4.ty≥height,图象完全移出了屏幕,不用做任 何处理 )
比例缩放前后两点之间的关系用矩阵表示为:
0
0 x0 fy 0 y0 1 0 1 0
y1 f y y0
其逆矩阵为:
x0 y 0 1
• 先来看一下,将一 个点顺时针旋转a 角后的坐标变换公 式,如图10所示, r为该点到原点的 距离,在旋转过程 中,r保持不变。b 为r与x轴之间的角 度。
图10
x0=r*cos(b); y0=r*sin(b)
旋转前:x0=r*cos(b); y0=r*sin(b) 旋转a角度后 :
x1 r *cos(b a)
r *cos(b) cos(a) r *sin(b)sin(a) x0 cos(a) y0 sin(a)
y1 r *sin(b a) r *sin(b) cos(a) r *cos(b)sin(a) y0 cos(a) x0 sin(a)
以矩阵的形式表示
其逆矩阵的形式表示为
1 fx 0 0
0 1 fy 0
0 x 0 y 1 1
x x0 fx
y y0 fy
插值算法(Interpolation)
• 比例缩放所产生的图像中有可能在原图中找不到相应 的象素点,我们采用的做法是找与之最临近的点,我们 采用的做法是找与之最临近的点 。即利用邻域的像素 来估计新的像素值 的处理方法就是插值算法。 • 常用的插值算法有: 最邻近插值(Nearest Neighbour Interpolation)。 线形插值(Linear Interpolation)。
6×6的原图f
新图中的灰度值利用缩放公式
x x0 fx
计算得到
y y0 fy
X0=0/0.5=0
X1=1/0.5= 2 X2=2/0.5=4 g(0,0)=f(0,0) , g(1,0)=f(2,0), g(2,0)=f(4,0),
y0 =0
y1=2 y2=4 g(0,1)=f(0,2) , g(0,2)=f(0,4), g(1,1)=f(2,2), g(1,2)=f(2,4) g(2,1)=f(4,2) ,g(2,2)=f4,4)