二、实验名称:数字图像处理matlab上机

三、实验学时:2学时

四、实验目的:(详细填写)

  • 掌握几何变换
  • 掌握插值
  • 理解配准的概念

五.实验内容

  • (1)首先自己写一个对图像进行旋转和缩放的复合变换程序;
  • (2)然后通过基于点的配准找到一个变换矩阵,以将前面变换后的图像再变换回去。

六、实验器材(设备、元器件):

硬件:计算机 软件:windows XP ,matlab7.0

七、实验数据及结果分析:

内容一程序:

   1:  

   2: function out = LinearT( 

   3: In,theta,sx, sy) 

   4: im 

   5: = imread(In); 

   6: degree = theta; 

   7: imm = im2double(im); 

   8: cos_d = cos(degree); 

   9: sin_d = sin(degree);  

  10: [width, height] = size(im);  

  11: R 

  12: = [cos_d -sin_d 0 

  13: sin_d cos_d 0 

  14: 0 

  15: 0 1]; 

  16: T 

  17: = [1 0 -width/2.0 

  18: 0 

  19: 1 -height/2.0 

  20: 0 

  21: 0 1]; 

  22: S=[sx,0,0; 

  23: 0,sy,0; 

  24: 0,0,1];  

  25: R=inv(T)*S*R*T;  

  26: [W, H, ws, we, hs, he] = 

  27: ComputeOutImSize(im, R); 

  28:  

  29: inR = inv(R); 

  30: ii=0; 

  31:  

  32: for i = ws:we%row 

  33: ii=ii+1; jj=0; 

  34: for j = hs:he%col 

  35: jj=jj+1; 

  36: locate_r = [i j 1]'; 

  37: locate_s = inR*locate_r; 

  38: if(((locate_s(1)<=1)||(locate_s(1)>=width))||((locate_s(2)<=1)||(locate_s(2)>=height))) 

  39: V(ii,jj) = 0; 

  40: else 

  41: V(ii,jj) = 

  42: BilinearInterplate(imm,locate_s); 

  43:  

  44: end 

  45: end 

  46: end 

  47:  

  48: out= im2uint8(V); 

  49: end 

  50:  

  51: 调用程序 

  52: In='pre.bmp'; 

  53:  

  54: theta=pi/8; 

  55: sx=2; 

  56:  

  57: sy=4; 

  58:  

  59: out = LinearT( In,theta,sx, 

  60: sy); 

  61: imshow(out) 

  62:  

原始图像

处理后的图像

内容二程序

   1:  

   2: s=1; 

   3:  

   4: f1=imread('pre.bmp'); 

   5:  

   6: f2=imread('flop.bmp'); 

   7:  

   8: figure(1) 

   9: subplot(121),imshow(f1) 

  10: subplot(122),imshow(f2) 

  11: N=4; 

  12: imtool(f2) 

  13: [w1,h1]=size(f1); 

  14: [w2,h2]=size(f2); 

  15: a=[0 0]';b=[w1-1 0]';c=[0 h1-1]';d=[w1-1 

  16: h1-1]'; 

  17: a1=[4 93]';b1=[224 1]';c1=[113 

  18: 359]';d1=[333 267]'; 

  19: x=[a b c d]; 

  20: y=[a1 b1 c1 d1]; 

  21: H=zeros(2); 

  22: xmean=[sum(x(1,:))/N;sum(x(2,:))/N]; 

  23:  

  24: ymean=[sum(y(1,:))/N;sum(y(2,:))/N]; 

  25:  

  26: xx=[x(1,:)-xmean(1);x(2,:)-xmean(2)]; 

  27:  

  28: yy=[y(1,:)-ymean(1);y(2,:)-ymean(2)]; 

  29:  

  30: for i=1:N 

  31: H=H+xx(:,i)*(yy(:,i))'; 

  32: end 

  33: [U,S,V]=svd(H); 

  34: r=det(U*V); 

  35: W=[1 0;0 r]; 

  36: R=V*W*U'; 

  37: s=0; 

  38:  

  39: for i=1:N 

  40: s1=s+R*xx(:,i).*yy(:,i); 

  41: end 

  42:  

  43: for i=1:N 

  44: s2=s+R*xx(:,i).*xx(:,i); 

  45: end 

  46:  

  47: s=s1/s2; 

  48: t=xmean-s*R*ymean; 

  49: imm=im2double(f2); 

  50: ii=0; 

  51: for i 

  52: =1:w1 

  53: ii=ii+1; jj=0; 

  54: for j = 

  55: 1:h1 

  56: jj=jj+1; 

  57: SS=inv(R)*([i j]'-t); 

  58: if(((SS(1)<=1)||(SS(1)>=w2))||((SS(2)<=1)||(SS(2)>=h2))) 

  59:  

  60: S(ii,jj) = 0; 

  61: else 

  62: S(ii,jj) = BilinearInterplate(imm,SS); 

  63:  

  64: end 

  65: end 

  66:  

  67: end 

  68:  

  69: S0= 

  70: im2uint8(S); 

  71: figure(2) 

  72: imshow(S0) 

  73:  

八、总结及心得体会:

  • 掌握了几何变换
  • 掌握了插值
  • 理解了配准的概念

报告评分:

指导教师签字:

ztong上机3的更多相关文章

  1. flhs笔试题-回家上机实践

    这是最近参加的一个公司的笔试题,回家上机写了下代码,希望对有需要的小伙伴有用,简单实现字符串和数组在指定位置的插入: package org.flhs; import com.google.commo ...

  2. Java连接SQLServer2008终极解决办法(亲身上机演练版)

    今天我一学妹问我,Java连接SQLServer2008数据库的问题,一直无法连接成功.想起自己刚开始学习的时候,在网上找各种文章,然后实际上机验证操作,花了一两天时间才搞定,一把辛酸泪呀!记得当时是 ...

  3. 《Java语言程序设计》上机实验

    实验一   Java环境演练   [目的] ①安装并配置Java运行开发环境: ②掌握开发Java应用程序的3个步骤:编写源文件.编译源文件和运行应用程序: ③学习同时编译多个Java源文件. [内容 ...

  4. C++ 第一次上机作业

    今天完成了C++第一次上机作业,感觉比较简单. 题目: 求2个数或3个正整数中的最大数,用带有默认参数的函数实现. 对3个变量按由小到大顺序排序,要求使用变量的引用. 编写一个程序,用同一个函数名对几 ...

  5. Twin Prime Conjecture(浙大计算机研究生保研复试上机考试-2011年)

    Twin Prime Conjecture                                            Time Limit: 2000/1000 MS (Java/Othe ...

  6. 代C语言上机实践

    这已经是开学第十二周了,个人感觉严老师教的这批学生效果不是很好,有的竟然毫不知道main函数前边的 int是做什么的.只知按照书本上给的样例程序一个字一个字的敲到编译器中,然后点击运行.有错误也不知道 ...

  7. lingo运筹学上机实验指导

    <运筹学上机实验指导>分为两个部分,第一部分12学时,是与运筹学理论课上机同步配套的4个实验(线性规划.灵敏度分析.运输问题与指派问题.最短路问题和背包问题)的Excel.LONGO和LI ...

  8. JSP脚本元素上机手册

    L3 <JSP基础>上机手册 内容回顾 脚本元素<%! %> <%= %> <% %> 注释元素 JSP指令元素 JSP动作元素 上机目标 掌握脚本元素 ...

  9. 华为上机题汇总----java

        以下华为上机题目都是网上整理得到的,代码都是自己调试过的,由于网上java答案较少,欢迎大家批评指正,也希望对准备华为上机的童鞋们有一点点帮助.在练习的过程中成长,加油!~~  第1题:输入字 ...

随机推荐

  1. 3.5电子书pc显示

    使用svgalib 下载地址:https://launchpad.net/ubuntu/+source/svgalib/1:1.4.3-30svgalib_1.4.3.orig.tar.gzsvgal ...

  2. 【模拟题(电子科大MaxKU)】解题报告【树形问题】【矩阵乘法】【快速幂】【数论】

    目录: 1:一道简单题[树形问题](Bzoj 1827 奶牛大集会) 2:一道更简单题[矩阵乘法][快速幂] 3:最简单题[技巧] 话说这些题目的名字也是够了.... 题目: 1.一道简单题 时间1s ...

  3. bzoj 3529 数表 莫比乌斯反演+树状数组

    题目大意: 有一张N×m的数表,其第i行第j列(1 < =i < =礼,1 < =j < =m)的数值为能同时整除i和j的所有自然数之和.给定a,计算数表中不大于a的数之和. ...

  4. 在OpenShift云空间上部署java web应用

    在使用之前先来介绍下OpenShift空间 OpenShift是由红帽推出逇一款面向开源开发人员开放的平台即服务(PaaS). OpenShift通过为开发人员提供在语言.框架和云上的更多的选择,使开 ...

  5. swift语言之多线程操作和操作队列(下)———坚持51天吃掉大象(写技术文章)

    欢迎有兴趣的朋友,参与我的美女同事发起的活动<51天吃掉大象>,该美女真的很疯狂,希望和大家一起坚持51天做一件事情,我加入这个队伍,希望坚持51天每天写一篇技术文章.关注她的微信公众号: ...

  6. Android类参考---Fragment

    Android类参考---Fragment public final boolean isAdded() 如果该Fragment对象被添加到了它的Activity中,那么它返回true,否则返回fal ...

  7. 理解Objective C 中id

    什么是id,与void *的区别 id在Objective C中是一个类型,一个complier所认可的Objective C类型,跟void *是不一样的,比如一个 id userName, 和vo ...

  8. 一个很好介绍js的例子

    function UpdateInit(opt){ this.init(opt);} UpdateInit.prototype={ loadUrl:null, loadParam:null, befo ...

  9. 关于java的static语句块

    声明:转载请注明出处 static{}(即static块),会在类被加载的时候执行且仅会被执行一次,一般用来初始化静态变量和调用静态方法,下面我们详细的讨论一下该语句块的特性及应用. 一.在程序的一次 ...

  10. POJ 2752 - Seek the Name, Seek the Fame (KMP)

    题意:给一个字符串s,问s的某个前缀与后缀相同的情况时,长度是多少. 此题使用KMP的next数组解决. next数组中,j=next[i],next[i]表示S[0...i-1]的某个后缀(字符串S ...