ztong上机3
二、实验名称:数字图像处理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的更多相关文章
- flhs笔试题-回家上机实践
这是最近参加的一个公司的笔试题,回家上机写了下代码,希望对有需要的小伙伴有用,简单实现字符串和数组在指定位置的插入: package org.flhs; import com.google.commo ...
- Java连接SQLServer2008终极解决办法(亲身上机演练版)
今天我一学妹问我,Java连接SQLServer2008数据库的问题,一直无法连接成功.想起自己刚开始学习的时候,在网上找各种文章,然后实际上机验证操作,花了一两天时间才搞定,一把辛酸泪呀!记得当时是 ...
- 《Java语言程序设计》上机实验
实验一 Java环境演练 [目的] ①安装并配置Java运行开发环境: ②掌握开发Java应用程序的3个步骤:编写源文件.编译源文件和运行应用程序: ③学习同时编译多个Java源文件. [内容 ...
- C++ 第一次上机作业
今天完成了C++第一次上机作业,感觉比较简单. 题目: 求2个数或3个正整数中的最大数,用带有默认参数的函数实现. 对3个变量按由小到大顺序排序,要求使用变量的引用. 编写一个程序,用同一个函数名对几 ...
- Twin Prime Conjecture(浙大计算机研究生保研复试上机考试-2011年)
Twin Prime Conjecture Time Limit: 2000/1000 MS (Java/Othe ...
- 代C语言上机实践
这已经是开学第十二周了,个人感觉严老师教的这批学生效果不是很好,有的竟然毫不知道main函数前边的 int是做什么的.只知按照书本上给的样例程序一个字一个字的敲到编译器中,然后点击运行.有错误也不知道 ...
- lingo运筹学上机实验指导
<运筹学上机实验指导>分为两个部分,第一部分12学时,是与运筹学理论课上机同步配套的4个实验(线性规划.灵敏度分析.运输问题与指派问题.最短路问题和背包问题)的Excel.LONGO和LI ...
- JSP脚本元素上机手册
L3 <JSP基础>上机手册 内容回顾 脚本元素<%! %> <%= %> <% %> 注释元素 JSP指令元素 JSP动作元素 上机目标 掌握脚本元素 ...
- 华为上机题汇总----java
以下华为上机题目都是网上整理得到的,代码都是自己调试过的,由于网上java答案较少,欢迎大家批评指正,也希望对准备华为上机的童鞋们有一点点帮助.在练习的过程中成长,加油!~~ 第1题:输入字 ...
随机推荐
- 3.5电子书pc显示
使用svgalib 下载地址:https://launchpad.net/ubuntu/+source/svgalib/1:1.4.3-30svgalib_1.4.3.orig.tar.gzsvgal ...
- 【模拟题(电子科大MaxKU)】解题报告【树形问题】【矩阵乘法】【快速幂】【数论】
目录: 1:一道简单题[树形问题](Bzoj 1827 奶牛大集会) 2:一道更简单题[矩阵乘法][快速幂] 3:最简单题[技巧] 话说这些题目的名字也是够了.... 题目: 1.一道简单题 时间1s ...
- bzoj 3529 数表 莫比乌斯反演+树状数组
题目大意: 有一张N×m的数表,其第i行第j列(1 < =i < =礼,1 < =j < =m)的数值为能同时整除i和j的所有自然数之和.给定a,计算数表中不大于a的数之和. ...
- 在OpenShift云空间上部署java web应用
在使用之前先来介绍下OpenShift空间 OpenShift是由红帽推出逇一款面向开源开发人员开放的平台即服务(PaaS). OpenShift通过为开发人员提供在语言.框架和云上的更多的选择,使开 ...
- swift语言之多线程操作和操作队列(下)———坚持51天吃掉大象(写技术文章)
欢迎有兴趣的朋友,参与我的美女同事发起的活动<51天吃掉大象>,该美女真的很疯狂,希望和大家一起坚持51天做一件事情,我加入这个队伍,希望坚持51天每天写一篇技术文章.关注她的微信公众号: ...
- Android类参考---Fragment
Android类参考---Fragment public final boolean isAdded() 如果该Fragment对象被添加到了它的Activity中,那么它返回true,否则返回fal ...
- 理解Objective C 中id
什么是id,与void *的区别 id在Objective C中是一个类型,一个complier所认可的Objective C类型,跟void *是不一样的,比如一个 id userName, 和vo ...
- 一个很好介绍js的例子
function UpdateInit(opt){ this.init(opt);} UpdateInit.prototype={ loadUrl:null, loadParam:null, befo ...
- 关于java的static语句块
声明:转载请注明出处 static{}(即static块),会在类被加载的时候执行且仅会被执行一次,一般用来初始化静态变量和调用静态方法,下面我们详细的讨论一下该语句块的特性及应用. 一.在程序的一次 ...
- POJ 2752 - Seek the Name, Seek the Fame (KMP)
题意:给一个字符串s,问s的某个前缀与后缀相同的情况时,长度是多少. 此题使用KMP的next数组解决. next数组中,j=next[i],next[i]表示S[0...i-1]的某个后缀(字符串S ...