数字图像水平镜像,垂直镜像和平移的matlab编程.docx_第1页
数字图像水平镜像,垂直镜像和平移的matlab编程.docx_第2页
数字图像水平镜像,垂直镜像和平移的matlab编程.docx_第3页
数字图像水平镜像,垂直镜像和平移的matlab编程.docx_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

(x0,y0)为原图像上一点,图像水平平移量为tx,垂直平移量为ty,平移后的点为(x1,y1)x1=x0+tx;y1=y0+ty,转换后x0=x1-tx;y0=y1-ty这样平移后的图像上的每一点都可以在原图像中找到对应的点,可以根据x0和y0的值,判断原来的点是否在图像中,如果超出了原来图像的范围,就把点(x1,y1)的值设置成0(黑色)和255(白色). int OriginX; int OriginY; for(int i=0;iheight;i+) for(int j=0;jwidth;j+) OriginX=j-m_XOffset; OriginY=i-m_YOffset; /if(OriginX0)&(OriginXwidth)&(OriginY0)&(OriginYheight) if(OriginX0 | OriginYimageData+i*tran-widthStep)j=0; else (uchar *)(tran-imageData+i*tran-widthStep)j=(uchar *)(gray-imageData+OriginY*gray-widthStep)OriginX; 镜像原理 for(int i=0;iheight;i+) for(int j=0;jwidth;j+) OriginX=(gray-width-j); OriginY=i; (uchar *)(tran-imageData+i*tran-widthStep)j=(uchar *)(gray-imageData+OriginY*gray-widthStep)OriginX; 转置,在构建目标图时,要高度值和宽度值进行互换,转换时,目标坐标进行互换! gray=cvCreateImage(cvSize(plmg-width,plmg-height),IPL_DEPTH_8U,1); tran=cvCreateImage(cvSize(gray-height,gray-width),IPL_DEPTH_8U,1); cvCvtColor(plmg,gray,CV_BGR2GRAY); int OriginX; int OriginY; for(int i=0;iheight;i+) for(int j=0;jwidth;j+) OriginX=i; OriginY=j; /(uchar *)(tran-imageData+i*tran-widthStep)j=(uchar *)(tran-imageData+OriginY*tran-widthStep)OriginX; (uchar *)(tran-imageData+i*tran-widthStep)j=(uchar *)(gray-imageData+OriginY*gray-widthStep)OriginX; 扩大,缩放的算法 plmg=cvLoadImage(lpszPathName,-1); gray=cvCreateImage(cvSize(plmg-width,plmg-height),IPL_DEPTH_8U,1); tran=cvCreateImage(cvSize(int)(gray-width*fXZoomRatio+0.5), (int)(gray-height*fYZoomRatio+0.5),IPL_DEPTH_8U,1); /首先要设定缩放后的大小,加上0.5是为了四舍五入. cvCvtColor(plmg,gray,CV_BGR2GRAY); float OriginX; float OriginY; for(int i=0;iheight;i+) for(int j=0;jwidth;j+) OriginX=j/fXZoomRatio+0.5;/原始坐标也要进行四舍五入 OriginY=i/fYZoomRatio+0.5; (uchar *)(tran-imageData+i*tran-widthStep)j=(uchar *)(gray-imageData+(int)OriginY)*gray-widthStep)(int)OriginX;/用的是领近插值法 cvNamedWindow(Image,1); cvShowImage(Image,tran);旋转的算法x0=x1cos(Q)+y1sin(Q)-ccos(Q)-dsin(Q)+ay0=-x1sin(Q)+y1cos(Q)+csin(Q)-dcos(Q)+b旋转以后图像会变大,先以原图像中心为坐标系原点,求得原图像四个点的坐标,就可以求得新图像的宽度和高度,以这两个参数设置输出的参数.用以上两个公式计算原始图像和输出图像的匹配点. LONG i0; LONG j0; IplImage* Img; IplImage* gray; IplImage* dst; Img=cvLoadImage(lpszPathName,-1); gray=cvCreateImage(cvSize(Img-width,Img-height),IPL_DEPTH_8U,1); /dst=cvCreateImage(cvSize(Img-width,Img-height),IPL_DEPTH_8U,1); cvCvtColor(Img,gray,CV_BGR2GRAY); LONG lWidth=Img-width; LONG lHeight=Img-height;/原始图像的高和宽像素值 float fSina=0.5; float fCosa=0.866; / 源图四个角的坐标(以图像中心为坐标系原点) float fSrcX1,fSrcY1,fSrcX2,fSrcY2,fSrcX3,fSrcY3,fSrcX4,fSrcY4; / 旋转后四个角的坐标(以图像中心为坐标系原点) float fDstX1,fDstY1,fDstX2,fDstY2,fDstX3,fDstY3,fDstX4,fDstY4; / 计算原图的四个角的坐标(以图像中心为坐标系原点) fSrcX1 = (float) (- (lWidth - 1) / 2); fSrcY1 = (float) ( (lHeight - 1) / 2); fSrcX2 = (float) ( (lWidth - 1) / 2); fSrcY2 = (float) ( (lHeight - 1) / 2); fSrcX3 = (float) (- (lWidth - 1) / 2); fSrcY3 = (float) (- (lHeight - 1) / 2); fSrcX4 = (float) ( (lWidth - 1) / 2); fSrcY4 = (float) (- (lHeight - 1) / 2); / 计算新图四个角的坐标(以图像中心为坐标系原点) fDstX1 = fCosa * fSrcX1 + fSina * fSrcY1; fDstY1 = -fSina * fSrcX1 + fCosa * fSrcY1; fDstX2 = fCosa * fSrcX2 + fSina * fSrcY2; fDstY2 = -fSina * fSrcX2 + fCosa * fSrcY2; fDstX3 = fCosa * fSrcX3 + fSina * fSrcY3; fDstY3 = -fSina * fSrcX3 + fCosa * fSrcY3; fDstX4 = fCosa * fSrcX4 + fSina * fSrcY4; fDstY4 = -fSina * fSrcX4 + fCosa * fSrcY4; / 计算旋转后的图像实际宽度 LONG lNewWidth = (LONG)(max(fabs(fDstX4 - fDstX1), fabs(fDstX3 - fDstX2) + 0.5); / 计算旋转后的图像高度 LONG lNewHeight = (LONG)(max(fabs(fDstY4 - fDstY1), fabs(fDstY3 - fDstY2) + 0.5); dst=cvCreateImage(cvSize(lNewWidth,lNewHeight),IPL_DEPTH_8U,1); float f1 = (float) (-0.5 * (lNewWidth - 1) * fCosa - 0.5 * (lNewHeight - 1) * fSina + 0.5 * (lWidth - 1); float f2 = (float) ( 0.5 * (lNewWidth - 1) * fSina - 0.5 * (lNewHeight - 1) * fCosa + 0.5 * (lHeight - 1); for(int i=0;iheight;i+) for(int j=0;jwidth;j+) / 计算该象素在源DIB中的坐标 i0 = (LONG) (-(float) j) * fSina + (float) i) * fCosa + f2 + 0.5); j0 = (LONG) ( (float) j) * fCosa + (float) i) * fSina + f1 + 0.5)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论