吉林大学计算机图形学算法作业
计算机图形学上机作业
计算机图形学(选作以下任意1—11题)1 用中点Bresenham 算法设计直线、圆、椭圆的算法,实现任意斜率的直线、圆、椭圆的绘制;2 使用有效边表算法填充多边形。
多边形的7个顶点分别为:P 0(500,400), P 1(350,600), P 2(250,350), P 3(350,50), P 4(500,250), P 5(700,50), P 6(800,450)。
3 使用四邻接点填充算法填充上述多边形。
4 在屏幕中心显示矩形窗口,使用Cohen-Sutherland 直线段裁剪算法实现任意直线的裁剪5 在屏幕中心显示矩形窗口,使用中点分割直线裁剪算法实现任意直线的裁剪6 在屏幕中心显示矩形窗口,使用梁友栋-Barsky 直线段裁剪算法实现任意直线的裁剪7使用斜等侧投影绘制图1所示多面体的投影图及其三视图,要求使用矩阵变换方法编程实现。
图1 图28 已知17个型值点:P 1(-360,0),P 2(-315,-71),P 3(-270,-100),P 4(-225,-71),P 5(-180,0),P 6(-135,71),P 7(-90,100),P 8(-45,71),P 9(0,0),P 10(45,-71),P 11(90,-100),P 12(135,-71),P 13(180,0),P 14(225,71),P 15(270,100),P 16(315,71),P 17(360,0)。
边界条件为:自由端。
编程绘制通过给定型值点的三次参数样条曲线和正弦曲线,试比较二者之间差异。
9 根据三次Bezier 曲线的基函数,编程绘制如图2所示三次Bezier 曲线。
10. 给定9个控制点:P0(150,350),P 1(250,250),P 2(350,350),P 3(428,167),P 4(525,440),P 5(650,250),P 6(682,40),P 7(850,450),P 8(950,350)。
计算机图形学作业3-6
第三章作业1.(6分)名词解释:扫描转换、增量算法、反走样。
扫描转换:基本图形的光栅化就是在像素点阵中确定最佳逼近与理想图形的像素点集,并用指定颜色显示这些像素点集的过程。
当光栅化与按扫描线顺序绘制图形的过程集合在一起时,也称为扫描转移。
增量算法:在一个迭代算法中,如果每一步X,Y值是用前一步的值加上一个增量来获得的,那么,这个算法就称为增量算法。
反走样:用于减轻走样的技术称为反走样或者称为抗锯齿。
2.(10分)计算起点坐标为(0,0),终点坐标(12,9)直线的中点Bresenham算法的每一步坐标值以及中点偏差判别式d的值,填入表3-1中,并用黑色绘制图3—29中的直线段的扫描转换像素。
图3—29 像素点阵x y d x y d0 0 —0。
25 7 5 —0.51 1 0 8 6 —0。
252 1 —0.75 9 6 03 2 —0.5 10 7 —0.754 3 -0.25 11 8 -0.55 3 0 12 9 —0.256 4 —0.75表3—1 x,y和d的值第四章作业1.(10分)名词解释:四邻接点、八邻接点、四连通域、八连通域、种子填充算法.四邻接点:对于多边形区域内部任意一个种子像素,其上、下、左、右这四个像素,称为四邻接点。
八邻接点:对于多边形区域内部任意一个种子像素,其上、下、左、右以及左上、左下、右上、右下这八个像素,称为八邻接点.四连通域:对于多边形区域内部任意一个种子子素出发,通过访问其上、下、左、右这四个邻接点可以遍历区域内部的所有像素,该多边形区域称为四连通域.八连通域:对于多边形区域内部任意一个种子子素出发,通过访问其上、下、左、右以及左上、左下、右上、右下这八个邻接点可以遍历区域内部的所有像素,该多边形区域称为八连通域.种子填充算法:从区域内任意一个种子像素开始,由内向外将填充色扩散到整个多边形区域的填充过程。
2. (10分)试写出图4—43所示多边形的边表和扫描线y =4的有效边表。
《计算机图形学基础》第一次作业参考答案
《计算机图形学基础》第一次作业参考答案一、名词解释1、计算机图形学:是使用计算机通过算法和程序在显示设备上构造出图形来,是真实物体或虚构物体的图形综合技术。
2、图像处理:是景物或图象的分析技术,它所研究的是计算机图形学的逆过程。
包括图象增强、模式识别、景物分析、计算机视觉等,并研究如何从图象中提取二维或三维物体的模型。
3、逐点比较法:这是绘图仪经常采用的一种方法,就是在绘图过程中,绘图笔每画一笔,就与规定图形进行比较,然后决定下一步的走向,用步步逼近的方法画出规定的图形。
4、造型技术:要在计算机中构造三维物体的一幅图像,首先必须在计算机中构造出该物体的模型,这一模型是由一批几何数据及数据之间的拓朴关系来表示,这就是造型技术。
二、简答1、计算机图形系统的组成包括哪些?答:计算机图形系统由硬件和软件两部分组成,硬件包括:主计算机、图形显示器以及I/O交互工具和存储设备;软件包括操作系统、高级语言、图形软件和应用软件。
现代计算机图形系统与一般计算机系统最主要的差别是具有图形的输入、输出设备以及必要的交互工具,在速度和存储容量上具有较高的要求。
另外,人也是这个系统的组成部分。
2、简述图形软件的组成。
答:图形软件系统应该具有良好的结构,要有合理的层次结构的模块结构,以便于设计、维护和调试。
1、零级图形软件:是最底层的软件,主要解决图形设备与主机的通讯、接口等问题,又称设备驱动程序,是一些最基本的输入、输出子程序,要求程序质量高,它是面向系统的,而不是面向用户的。
2、一级图形软件:又称基本子程序,包括生成基本图形元素,对设备进行管理的各程序模块,既面向系统又面向用户。
3、二级图形软件:也称功能子程序,是在一级图形软件基础上编制的,其主要任务是建立图形数据结构,定义、修改和输出图形;以及建立各图形设备之间的联系,要具有较强的交互功能,它是面向用户的。
(以上三级通常称为支撑软件)4、三级图形软件:是为解决某种应用问题的图形软件,是整个应用软件的一部分,通常由用户编写或与设计者一起编写。
ACM算法模板(吉林大学)
目录目录 (1)Graph 图论 (3)|DAG的深度优先搜索标记 (3)|无向图找桥 (3)|无向图连通度(割) (3)|最大团问题DP+DFS (3)|欧拉路径O(E) (3)|D IJKSTRA数组实现O(N^2) (3)|D IJKSTRA O(E* LOG E) (4)|B ELLMAN F ORD单源最短路O(VE) (4)|SPFA(S HORTEST P ATH F ASTER A LGORITHM) (4)|第K短路(D IJKSTRA) (5)|第K短路(A*) (5)|P RIM求MST (6)|次小生成树O(V^2) (6)|最小生成森林问题(K颗树)O(MLOGM) (6)|有向图最小树形图 (6)|M INIMAL S TEINER T REE (6)|T ARJAN强连通分量 (7)|弦图判断 (7)|弦图的PERFECT ELIMINATION点排列 (7)|稳定婚姻问题O(N^2) (7)|拓扑排序 (8)|无向图连通分支(DFS/BFS邻接阵) (8)|有向图强连通分支(DFS/BFS邻接阵)O(N^2) (8)|有向图最小点基(邻接阵)O(N^2) (9)|F LOYD求最小环 (9)|2-SAT问题 (9)Network 网络流 (11)|二分图匹配(匈牙利算法DFS实现) (11)|二分图匹配(匈牙利算法BFS实现) (11)|二分图匹配(H OPCROFT-C ARP的算法) (11)|二分图最佳匹配(KUHN MUNKRAS算法O(M*M*N))..11 |无向图最小割O(N^3) (12)|有上下界的最小(最大)流 (12)|D INIC最大流O(V^2*E) (12)|HLPP最大流O(V^3) (13)|最小费用流O(V*E* F).......................................13|最小费用流O(V^2* F). (14)|最佳边割集 (15)|最佳点割集 (15)|最小边割集 (15)|最小点割集(点连通度) (16)|最小路径覆盖O(N^3) (16)|最小点集覆盖 (16)Structure 数据结构 (17)|求某天是星期几 (17)|左偏树合并复杂度O(LOG N) (17)|树状数组 (17)|二维树状数组 (17)|T RIE树(K叉) (17)|T RIE树(左儿子又兄弟) (18)|后缀数组O(N* LOG N) (18)|后缀数组O(N) (18)|RMQ离线算法O(N*LOG N)+O(1) (19)|RMQ(R ANGE M INIMUM/M AXIMUM Q UERY)-ST算法(O(NLOGN +Q)) (19)|RMQ离线算法O(N*LOG N)+O(1)求解LCA (19)|LCA离线算法O(E)+O(1) (20)|带权值的并查集 (20)|快速排序 (20)|2台机器工作调度 (20)|比较高效的大数 (20)|普通的大数运算 (21)|最长公共递增子序列O(N^2) (22)|0-1分数规划 (22)|最长有序子序列(递增/递减/非递增/非递减) (22)|最长公共子序列 (23)|最少找硬币问题(贪心策略-深搜实现) (23)|棋盘分割 (23)|汉诺塔 (23)|STL中的PRIORITY_QUEUE (24)|堆栈 (24)|区间最大频率 (24)|取第K个元素 (25)|归并排序求逆序数 (25)|逆序数推排列数 (25)|二分查找 (25)|二分查找(大于等于V的第一个值) (25)|所有数位相加 (25)Number 数论 (26)|递推求欧拉函数PHI(I) (26)|单独求欧拉函数PHI(X) (26)|GCD最大公约数 (26)|快速GCD (26)|扩展GCD (26)|模线性方程 A * X = B (% N) (26)|模线性方程组 (26)|筛素数[1..N] (26)|高效求小范围素数[1..N] (26)|随机素数测试(伪素数原理) (26)|组合数学相关 (26)|P OLYA计数 (27)|组合数C(N, R) (27)|最大1矩阵 (27)|约瑟夫环问题(数学方法) (27)|约瑟夫环问题(数组模拟) (27)|取石子游戏1 (27)|集合划分问题 (27)|大数平方根(字符串数组表示) (28)|大数取模的二进制方法 (28)|线性方程组A[][]X[]=B[] (28)|追赶法解周期性方程 (28)|阶乘最后非零位,复杂度O(NLOGN) (29)递归方法求解排列组合问题 (30)|类循环排列 (30)|全排列 (30)|不重复排列 (30)|全组合 (31)|不重复组合 (31)|应用 (31)模式串匹配问题总结 (32)|字符串H ASH (32)|KMP匹配算法O(M+N) (32)|K ARP-R ABIN字符串匹配 (32)|基于K ARP-R ABIN的字符块匹配 (32)|函数名: STRSTR (32)|BM算法的改进的算法S UNDAY A LGORITHM (32)|最短公共祖先(两个长字符串) (33)|最短公共祖先(多个短字符串)...............................33Geometry 计算几何.. (34)|G RAHAM求凸包O(N* LOG N) (34)|判断线段相交 (34)|求多边形重心 (34)|三角形几个重要的点 (34)|平面最近点对O(N* LOG N) (34)|L IUCTIC的计算几何库 (35)|求平面上两点之间的距离 (35)|(P1-P0)*(P2-P0)的叉积 (35)|确定两条线段是否相交 (35)|判断点P是否在线段L上 (35)|判断两个点是否相等 (35)|线段相交判断函数 (35)|判断点Q是否在多边形内 (35)|计算多边形的面积 (35)|解二次方程A X^2+B X+C=0 (36)|计算直线的一般式A X+B Y+C=0 (36)|点到直线距离 (36)|直线与圆的交点,已知直线与圆相交 (36)|点是否在射线的正向 (36)|射线与圆的第一个交点 (36)|求点P1关于直线LN的对称点P2 (36)|两直线夹角(弧度) (36)ACM/ICPC竞赛之STL (37)ACM/ICPC竞赛之STL简介 (37)ACM/ICPC竞赛之STL--PAIR (37)ACM/ICPC竞赛之STL--VECTOR (37)ACM/ICPC竞赛之STL--ITERATOR简介 (38)ACM/ICPC竞赛之STL--STRING (38)ACM/ICPC竞赛之STL--STACK/QUEUE (38)ACM/ICPC竞赛之STL--MAP (40)ACM/ICPC竞赛之STL--ALGORITHM (40)STL IN ACM (41)头文件 (42)线段树 (43)求矩形并的面积(线段树+离散化+扫描线) (43)求矩形并的周长(线段树+离散化+扫描线) (44)Graph 图论/*==================================================*\| DAG的深度优先搜索标记| INIT: edge[][]邻接矩阵; pre[], post[], tag全置0;| CALL: dfstag(i, n); pre/post:开始/结束时间\*==================================================*/int edge[V][V], pre[V], post[V], tag;void dfstag(int cur, int n){ // vertex: 0 ~ n-1pre[cur] = ++tag;for (int i=0; i<n; ++i) if (edge[cur][i]) {if (0 == pre[i]) {printf("Tree Edge!\n");dfstag(i,n);} else {if (0 == post[i]) printf("Back Edge!\n");else if (pre[i] > pre[cur])printf("Down Edge!\n");else printf("Cross Edge!\n");}}post[cur] = ++tag;}/*==================================================*\| 无向图找桥| INIT: edge[][]邻接矩阵;vis[],pre[],anc[],bridge 置0;| CALL: dfs(0, -1, 1, n);\*==================================================*/int bridge, edge[V][V], anc[V], pre[V], vis[V];void dfs(int cur, int father, int dep, int n){ // vertex: 0 ~ n-1if (bridge) return;vis[cur] = 1; pre[cur] = anc[cur] = dep;for (int i=0; i<n; ++i) if (edge[cur][i]) {if (i != father && 1 == vis[i]) {if (pre[i] < anc[cur])anc[cur] = pre[i];//back edge}if (0 == vis[i]) { //tree edgedfs(i,cur,dep+1,n);if (bridge) return;if (anc[i] < anc[cur]) anc[cur] = anc[i];if (anc[i] > pre[cur]) { bridge = 1; return; } }}vis[cur] = 2;}/*==================================================*\| 无向图连通度(割)| INIT: edge[][]邻接矩阵;vis[],pre[],anc[],deg[]置为0;| CALL: dfs(0, -1, 1, n);| k=deg[0], deg[i]+1(i=1…n-1)为删除该节点后得到的连通图个数| 注意:0作为根比较特殊!\*==================================================*/int edge[V][V], anc[V], pre[V], vis[V], deg[V];void dfs(int cur, int father, int dep, int n){// vertex: 0 ~ n-1int cnt = 0;vis[cur] = 1; pre[cur] = anc[cur] = dep;for (int i=0; i<n; ++i) if (edge[cur][i]) {if (i != father && 1 == vis[i]) {if (pre[i] < anc[cur])anc[cur] = pre[i];//back edge}if (0 == vis[i]) { //tree edgedfs(i,cur,dep+1,n);++cnt; // 分支个数if (anc[i] < anc[cur]) anc[cur] = anc[i];if ((cur==0 && cnt>1) ||(cnt!=0 && anc[i]>=pre[cur]))++deg[cur];// link degree of a vertex }}vis[cur] = 2;} /*==================================================*\| 最大团问题 DP + DFS| INIT: g[][]邻接矩阵;| CALL: res = clique(n);\*==================================================*/int g[V][V], dp[V], stk[V][V], mx;int dfs(int n, int ns, int dep){if (0 == ns) {if (dep > mx) mx = dep;return 1;}int i, j, k, p, cnt;for (i = 0; i < ns; i++) {k = stk[dep][i]; cnt = 0;if (dep + n - k <= mx) return 0;if (dep + dp[k] <= mx) return 0;for (j = i + 1; j < ns; j++) {p=stk[dep][j];if (g[k][p]) stk[dep + 1][cnt++] = p;}dfs(n, cnt, dep + 1);}return 1;}int clique(int n){int i, j, ns;for (mx = 0, i = n - 1; i >= 0; i--) {// vertex: 0 ~ n-1for (ns = 0, j = i + 1; j < n; j++)if (g[i][j]) stk[1][ ns++ ] = j;dfs(n, ns, 1); dp[i] = mx;}return mx;}/*==================================================*\| 欧拉路径O(E)| INIT: adj[][]置为图的邻接表; cnt[a]为a点的邻接点个数;| CALL: elpath(0); 注意:不要有自向边\*==================================================*/int adj[V][V], idx[V][V], cnt[V], stk[V], top;int path(int v){for (int w ; cnt[v] > 0; v = w) {stk[ top++ ] = v;w = adj[v][ --cnt[v] ];adj[w][ idx[w][v] ] = adj[w][ --cnt[w] ];// 处理的是无向图—-边是双向的,删除v->w后,还要处理删除w->v}return v;}void elpath (int b, int n){ // begin from b int i, j;for (i = 0; i < n; ++i) // vertex: 0 ~ n-1 for (j = 0; j < cnt[i]; ++j)idx[i][ adj[i][j] ] = j;printf("%d", b);for (top = 0; path(b) == b && top != 0; ) {b = stk[ --top ];printf("-%d", b);}printf("\n");}/*==================================================*\| Dijkstra数组实现O(N^2)| Dijkstra --- 数组实现(在此基础上可直接改为STL的Queue实现)| lowcost[] --- beg到其他点的最近距离| path[] -- beg为根展开的树,记录父亲结点\*==================================================*/#define INF 0x03F3F3F3Fconst int N;int path[N], vis[N];void Dijkstra(int cost[][N], int lowcost[N], int n, int beg){ int i, j, min;memset(vis, 0, sizeof(vis));vis[beg] = 1;for (i=0; i<n; i++){lowcost[i] = cost[beg][i]; path[i] = beg;}lowcost[beg] = 0;path[beg] = -1; // 树根的标记int pre = beg;for (i=1; i<n; i++){min = INF;dist[v] = dist[u] + c;for (j=0; j<n; j++)// 下面的加法可能导致溢出,INF 不能取太大if (vis[j]==0 &&lowcost[pre]+cost[pre][j]<lowcost[j]){lowcost[j] =lowcost[pre] + cost[pre][j]; path[j] = pre; } for (j=0; j<n; j++) if (vis[j] == 0 && lowcost[j] < min){ min = lowcost[j]; pre = j; } vis[pre] = 1; } } /*==================================================*\ | Dijkstra O(E * log E) | INIT: 调用init(nv, ne)读入边并初始化; | CALL: dijkstra(n, src); dist[i]为src 到i 的最短距离 \*==================================================*/ #define typec int // type of cost const typec inf = 0x3f3f3f3f; // max of cost typec cost[E], dist[V]; int e, pnt[E], nxt[E], head[V], prev[V], vis[V]; struct qnode { int v; typec c; qnode (int vv = 0, typec cc = 0) : v(vv), c(cc) {} bool operator < (const qnode& r) const { return c>r.c; } }; void dijkstra(int n, const int src){ qnode mv; int i, j, k, pre; priority_queue<qnode> que; vis[src] = 1; dist[src] = 0; que.push(qnode(src, 0)); for (pre = src, i=1; i<n; i++) { for (j = head[pre]; j != -1; j = nxt[j]) { k = pnt[j]; if (vis[k] == 0 && dist[pre] + cost[j] < dist[k]){ dist[k] =dist[pre] + cost[j]; que.push(qnode(pnt[j], dist[k])); prev[k] = pre; } } while (!que.empty() && vis[que.top().v] == 1) que.pop(); if (que.empty()) break ; mv = que.top(); que.pop(); vis[pre = mv.v] = 1; } } inline void addedge(int u, int v, typec c){ pnt[e] = v; cost[e] = c; nxt[e] = head[u]; head[u] = e++; } void init(int nv, int ne){ int i, u, v; typec c; e = 0;memset(head, -1, sizeof (head));memset(vis, 0, sizeof (vis));memset(prev, -1, sizeof (prev));for (i = 0; i < nv; i++) dist[i] = inf;for (i = 0; i < ne; ++i) {scanf("%d%d%d", &u, &v, &c);// %d: type of cost addedge(u, v, c); // vertex: 0 ~ n-1, 单向边 }}/*==================================================*\| BellmanFord 单源最短路O(VE)| 能在一般情况下,包括存在负权边的情况下,解决单源最短路径问题| INIT: edge[E][3]为边表| CALL: bellman(src);有负环返回0;dist[i]为src 到i 的最短距| 可以解决差分约束系统: 需要首先构造约束图,构造不等式时>=表示求最小值, 作为最长路,<=表示求最大值, 作为最短路 (v-u <= c:a[u][v] = c )\*==================================================*/#define typec int // type of costconst typec inf=0x3f3f3f3f; // max of costint n, m, pre[V], edge[E][3];typec dist[V];int relax (int u, int v, typec c){if (dist[v] > dist[u] + c) {pre[v] = u; return 1; } return 0; } int bellman (int src){ int i, j;for (i=0; i<n; ++i) { dist[i] = inf; pre[i] = -1; } dist[src] = 0; bool flag; for (i=1; i<n; ++i){ flag = false; // 优化 for (j=0; j<m; ++j) { if( 1 == relax(edge[j][0], edge[j][1], edge[j][2]) ) flag = true; } if( !flag ) break; } for (j=0; j<m; ++j) { if (1 == relax(edge[j][0], edge[j][1], edge[j][2])) return 0; // 有负圈 } return 1; } /*==================================================*\ | SPFA(Shortest Path Faster Algorithm) Bellman-Ford 算法的一种队列实现,减少了不必要的冗余计算。
2024年考研高等数学三计算机图形学中的数学算法历年真题
2024年考研高等数学三计算机图形学中的数学算法历年真题数学算法作为计算机图形学的重要组成部分,其在图像处理、三维建模、动画制作等领域具有广泛应用。
下面回顾历年考研高等数学三计算机图形学中涉及到的数学算法真题,以加深对该领域知识的理解。
一、二维图形的表示和处理1. 2015年真题题目描述:给定一个二维平面上的点集P,设计一个算法,统计该点集中在指定矩形内部的点的数量。
解析:该问题可采用扫描线算法来解决。
将矩形按横坐标分割成多个行,并从上至下依次统计每行内的点数量。
具体算法步骤为:先对点集P按照横坐标排序,然后逐行扫描,记录在每一行内x坐标落在矩形范围内的点的数量。
二、三维图形的表示和处理2. 2018年真题题目描述:给定一个三维空间中的点云数据集P,设计一个算法,确定该数据集中所有点的最大距离。
解析:该问题可使用蛮力法(brute-force)来解决。
遍历所有点对的组合,计算它们之间的距离,并在遍历过程中保存最大距离。
具体算法步骤为:对点云数据集P中的每一对点(A, B),计算其欧氏距离dist(A,B),并保留最大的距离值。
三、曲线和曲面的生成及处理3. 2019年真题题目描述:已知一个平面上的曲线关于X轴的转动,设计一个算法,在三维空间内生成该曲线的旋转曲面。
解析:该问题可使用参数方程法来解决。
考虑平面上的曲线由参数方程x=f(t),y=g(t)给出,其中t为参数。
要生成其旋转曲面,首先选择一个旋转轴,假设为Z轴,然后将x和y分别替换为t的函数,可得旋转曲面的参数方程x=f(t)cosθ,y=f(t)sinθ,z=g(t),其中θ为旋转的角度。
通过不同的θ取值,可生成曲线的多个旋转曲面。
四、三维变换4. 2020年真题题目描述:给定一个三维对象的初始位置和一个变换矩阵,设计一个算法,计算该对象在变换后的位置。
解析:该问题可使用齐次坐标和矩阵乘法来解决。
将三维对象的初始坐标表示为齐次坐标[x, y, z, 1],并将变换矩阵表示为4×4的矩阵T。
《计算机图形学》练习试题及参考答案大全
《计算机图形学》练习试题及参考答案(后面有答案)一、名词解释:(每个4分)1.计算机图形学2.图象处理3.模式识别4.计算几何5.凸多边形6.种子填充算法7.窗口8.视区9.光顺性10.拟合11.多项式插值12.小挠度曲线13.图形变换14.齐次坐标系15.凸包16.轮廓线17.等值线18.图形的翼边表示19.ER模型20.图形消隐21.本影22.半影23.用户坐标系24.规范化设备坐标系25.构造26.约束技术27.光线跟踪28、走样29、CRT(Cathode Ray Tube)30、隔行(interlaced)扫描31、输入模式32、取样方式(sample mode)33、区域34、边界表示法35、复合变换36、二维复合平移37.二维复合比例38.二维复合旋转39.视区(Viewport)40、投影变换41、平面几何投影42. 参数图43. 像素图44.人机界面45.地理信息系统46.虚拟现实47.几何造型技术48.扫描转换49. 插值曲线50.逼近曲线51. 用户接口52. 交互技术53. 交互式图形系统的基本交互任务54. 定位任务55. 选择任务56. 拾取任务57 .选择技术58. 菜单技术59. 文字输入任务60. 数值输入任务61.动画62.帧63.场64. 消隐65.物体空间的消隐算法66. 漫反射光67. 环境光68. 镜面反射光二、选择题(每题2分)1、计算机图形学与计算几何之间的关系是( )。
A)学术上的同义词B)计算机图形学以计算几何为理论基础C)计算几何是计算机图形学的前身D).两门毫不相干的学科2、计算机图形学与计算机图象学的关系是( )。
A)计算机图形学是基础,计算机图象学是其发展B)不同的学科,研究对象和数学基础都不同,但它们之间也有可转换部分C)同一学科在不同场合的不同称呼而已D)完全不同的学科,两者毫不相干3、触摸屏是( )设备。
A)输入B)输出C)输入输出D)既不是输入也不是输出4.计算机绘图设备一般使用什么颜色模型?( )A)RGB;B)CMY;C)HSV ;D)HLS5. 计算机图形显示器一般使用什么颜色模型?( )A)RGB;B)CMY;C)HSV ;D)HLS6.分辨率为1024×1024的显示器各需要多少字节位平面数为24的帧缓存?( ) A)512KB;B)1MB;C)2MB ;D)3MB7.哪一个不是国际标准化组织(ISO)批准的图形标准?( )A)GKS;B)PHIGS;C)CGM ;D)DXF8.下述绕坐标原点逆时针方向旋转a角的坐标变换矩阵中哪一项是错误的? ( )| A B || C D |A) cos a;B) sin a;C) sin a;D) cos a9、在多边形的逐边裁剪法中,对于某条多边形的边(方向为从端点S到端点P)与某条裁剪线(窗口的某一边)的比较结果共有以下四种情况,分别需输出一些顶点.请问哪种情况下输出的顶点是错误的? ( )A)S和P均在可见的一侧,则输出S和P.B)S和P均在不可见的一侧,则输出0个顶点.C)S在可见一侧,P在不可见一侧,则输出线段SP与裁剪线的交点.D)S在不可见的一侧,P在可见的一侧,则输出线段SP与裁剪线的交点和P.10、在物体的定义中对边的哪条限制不存在? ( )A) 边的长度可度量且是有限的B) 一条边有且只有两个相邻的面C) 一条边有且只有两个端点D) 如果一条边是曲线,那么在两个端点之间不允许曲线自相交11.下述哪一条边不是非均匀有理B样条(NURBS)的优点? ( )A) NURBS比均匀B样条能表示更多的曲面B) 对于间距不等的数据点,用NURBS拟合的曲线比用均匀B样条拟合的曲线更光滑C) NURBS提供的权控制方法比用控制点更能有效的控制曲线的形状D) 使用NURBS可以提高对曲面的显示效率12.下列关于图的存储表示的叙述中,哪一个是不正确的?A) 无向图的相邻矩阵是对称矩阵B) 对于带权的图,其相邻矩阵中值为1的元素,其值可以用边的权来权替C) 用邻接表法存储包括n个结点的图需要保存一个顺序存储的结点表和n个链接存储的边表D) 用邻接表法存储包括n条边的图需要保存一个顺序存储的结点表和n个链接存储的边表13*.在面片的数量非常大的情况下哪一个消隐算法速度最快? ( )A) 深度缓存算法(Z-Buffer)B) 扫描线消隐算法C) 深度排序算法(画家算法)D) 不知道14*.下面关于深度缓存消隐算法(Z-Buffer)的论断哪一条不正确? ( )A) 深度缓存算法并不需要开辟一个与图像大小相等的深度缓存数组B) 深度缓存算法不能用于处理对透明物体的消隐C) 深度缓存算法能并行实现D) 深度缓存算法中没有对多边形进行排序15.在用射线法进行点与多边形之间的包含性检测时,下述哪一个操作不正确? ( )A) 当射线与多边形交于某顶点时且该点的两个邻边在射线的一侧时,计数0次B) 当射线与多边形交于某顶点时且该点的两个邻边在射线的一侧时,计数2次C) 当射线与多边形交于某顶点时且该点的两个邻边在射线的两侧时,计数1次D) 当射线与多边形的某边重合时,计数1次16*、扫描消隐算法在何处利用了连贯性(相关性Coherence)?(1)计算扫描线与边的交点;(2)计算多边形在其边界上的深度;(3)计算多边形视窗任意点处的深度值;(4)检测点与多边形之间的包含性。
计算机图形学作业
计算机图形学作业(总3页) --本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--计算机图形学第一次作业计算机X班 XXX 1XXX010XXX1.你是否想用图形学的有关知识去解决一两个实际问题你想解决的问题是什么考虑如何解决答:我希望可以解决的有设计汽车外壳和制作动画。
解决方法:(1)汽车外壳使用3D MAX/AutoCAD软件进行设计。
(2)制作动画利用动画制作软件(3D MAX)在计算机上制作动画2.某彩色图形显示系统,CRT显示器的分辨率为1024×1024,它可以从2^17次方种颜色中选择出2^15次方来显示,其帧缓冲器的容量应该如何计算查色表的长度和宽度应为多少解:16b==2B因为分辨率为1024x1024所以1024*1024*2B=2MB3.采用Bresenham画线算法,绘出起点(1,3),终点为(9,18)的直线段。
解:void DrawBresenhamline(int x0, int y0, int x1, int y1){int dx = x1 - x0;中点画圆法生成圆心在(3,-2),半径为12的上半个半圆。
解:cen = [3 0];r = 3;t = linspace(0, 2*pi);x = cen(1) + r*cos(t);y = cen(2) + r*sin(t);y(y<0) = NaN;figure; box on; hold on;plot(x, y, 'r-');axis equal;plot([min(x), max(x)], [0 0], 'k-');。
计算机图形学课程实验指导书和作业
《计算机图形学》实验指导书、作业学期:2011-2012(2)班级:测绘工程10-1班姓名:汪帅学号:20100202测绘工程学院目录实验一直线段生成算法实现 (1)实验二圆生成算法的实现 (5)实验三二维图形几何变换的实现 (8)实验四直线段裁剪算法的实现 (13)实验报告1 (19)实验报告2 (26)实验报告3 (30)实验报告4 (37)实验一 直线段生成算法实现一、实验目的熟练掌握DDA 直线生成算法、中点直线生成算法、Bresenham 直线生成算法的算法思想,了解各个算法中寻找直线段上的像素点的过程。
二、实验学时 2学时三、实验类型现代实验、验证性、自立式四、实验要求1.根据指导书所给的参考代码,每人至少实现两种直线段的生成算法。
2.要求能够实现任意起始点和终止点坐标的直线段的绘制。
3.能够实现不同线型(实线、虚线、点划线)、不同线宽(单像素宽度、多像素宽度)的直线段的绘制。
五、实验原理与步骤 原理:1.数值微分法(DDA )设一直线段的起点和终点坐标分别为(xs , ys)和(xe , ye)。
则直线段在X 和Y 方向的增量分别为: △x=xe- xs ,△y= ye- ys 设△t=max(|△x|,|△y|)取时间步长为1/△t,若当前像素点坐标为(xi, yi),则下一个像素点的坐标可由以下两式确定: xi+1=xi+dx=xi+Dx/Dt yi+1=yi+dy=yi+Dy/Dt 2.中点直线生成算法:假定直线斜率0<m<1,且已确定点亮象素点P (Xi ,Yi ),则下一个与直线最接近的像素只能是P1点或P2点。
设M 为中点,Q 为交点,现需确定下一个点亮的象素。
当M 在Q 的下方-> P2离直线更近更近->取P2 。
M 在Q 的上方-> P1离直线更近更近->取P1 M 与Q 重合, P1、P2任取一点。
假设直线方程为:ax+by+c=0 其中a=y0-y1, b=x1-x0, c=x0y1-x1y0 F(x,y)=0 点在直线上面 F(x,y)>0 点在直线上方 F(x,y)<0 点在直线下方欲判断M 点是在Q 点上方还是在Q 点下方,只需把M 代入F(x,y),并检查它的符号。
吉林大学计算机图形学2008级试卷B答案
v=first(Q);//取出Q中起始点
while (next(v,Q)!=first(Q)))
//若Q中v的下一个点不是起始点
if (left(v,next(v,Q),next(next(v,Q),Q))
第二是该表示法蕴含信息的完整性,即由这种表示法所决定的数据结构是
否唯一地描述了一个实在的形体。 2分
此外还应该考虑表示方法是否简洁与便利。 1分
4消除隐藏面的算法分为两个大类,即图象空间算法和客体空间算法。1分
图象空间算法对显示设备上每一个可分辨象素进行判断,看组成物体的多个多边形表面中哪一个在该象素上可见2分;客体空间算法对每一个组成形体的表面,都要与其它各表面进行比较。2分
Point R[4],Q[4];
int i,j;
const double epsilon=0.01;
if(maxdistance(P)<epsilon)
/*maxdistance(P)为求max(d(P1,P0P3),d(P2,P0P3))的函数*/
{MoveTo(P[0].x,P[0].y);
LineTo(P[3].x,P[3].y);1分
5光照模型主要考虑的问题:照明特性、表面特性和观察角度。2分
照明特性是指可见表面被照明的情况,主要有光源的数目和性质,环境光及阴影效应等1分。表面特性主要是指表面对入射光线的反射、折射或透明的不同情形,还有表面的纹理及颜色等1分。观察角度是指观察景物时观察者相对可见表面所在的位置。1分
三.计算30分
2008级计算机图形学试卷B参考答案
一、概念每题3分共15分
计算机图形学试卷及答案
《计算机图形学》试卷及答案(总8页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--一、填空题(每空分,共 1 0 分) 1、计算机图形学中的图形是指由点、线、面、体等 和明暗、灰度(亮度)、色彩等 构成的,从现实世界中抽象出来的带有灰度、色彩及形状的图或形。
2、一个计算机图形系统至少应具有 、 、输入、输出、 等基本功能。
3、 常用的字符描述方法有:点阵式、 和 。
4、 字符串剪裁的策略包括 、 和笔划/像素精确度 。
5、 所谓齐次坐标就是用 维向量表示一个n 维向量。
6、 投影变换的要素有:投影对象、 、 、投影线和投影。
7、输入设备在逻辑上分成定位设备、描画设备、定值设备、 、拾取设备和 。
8、人机交互是指用户与计算机系统之间的通信,它是人与计算机之间各种符号和动作的 。
9、按照光的方向不同,光源分类为: , , 。
10、从视觉的角度看,颜色包含3个要素:即 、 和亮度。
二、单项选择题(每题 2分,共 30分。
请将正确答案的序号填在题后的括号内)1、在CRT 显示器系统中,( )是控制电子束在屏幕上的运动轨迹。
A. 阴极B. 加速系统C. 聚焦系统D. 偏转系统2、分辨率为1024×1024的显示器需要多少字节位平面数为16的帧缓存?( )A. 512KBB. 1MBC. 2MBD. 3MB 3、计算机图形显示器一般使用什么颜色模型?( )A. RGBB. CMYC. HSVD. HLS4、下面哪个不属于图形输入设备?( ) A. 键盘 B. 绘图仪 C. 光笔 D. 数据手套5、多边形填充算法中,错误的描述是( )。
A. 扫描线算法对每个象素只访问一次,主要缺点是对各种表的维持和排序的耗费较大 B. 边填充算法基本思想是对于每一条扫描线与多边形的交点,将其右方象素取补C. 边填充算法较适合于帧缓冲存储器的图形系统D. 边标志算法也不能解决象素被重复访问的缺点6、 在扫描线填色算法中,扫描线与顶点相交时,对于交点的取舍问题,下述说法正确的是( )。
吉大2020-2022学期《CAD、CAM》在线作业二(5)答案
吉大2020-2022学期《CAD、CAM》在线作业二(5)答案
吉大2020-2022学期《CAD、CAM》在线作业二
提醒:本科目含有多少随机试卷,请核实本套试卷是否是您需要的材料
一、单选题(共15题,60分)
1、计算机辅助工程分析简称为()。
ACAE
BCAD
CCAPP
DCAM
提示:复习课程相关知识802,并完成上述题目
[正确参考选择]:A
2、线性表是具有n个()的有限序列(n≠0)。
A表元素
B字符
C数据元素
D数据项
提示:复习课程相关知识802,并完成上述题目
[正确参考选择]:C
3、渲染三维模型时,哪种不可渲染出物体的折射效果()。
A一般渲染
B普通渲染
C照片级光线跟踪渲染
D照片级真实感渲染
提示:复习课程相关知识802,并完成上述题目
[正确参考选择]:D
4、若要计算某个图形区域的面积应使用的命令是()。
AAREA
BDREA
CBREA
DDISTANCE
提示:复习课程相关知识802,并完成上述题目
[正确参考选择]:A
5、在CAD中为一条直线制作平行线用什么命令()。
A移动
B镜像
C偏移
D旋转
提示:复习课程相关知识802,并完成上述题目。
18秋《计算机图形学》作业_1
18秋《计算机图形学》作业_1交卷时间:2019-03-20 15:35:09一、单选题1.(4分)∙ A. (A)∙ B. (B)∙ C. (C)∙ D. (D)纠错得分:4知识点:1.4 常用的图形设备收起解析答案A解析2.(4分)多边形填充算法中,错误的描述是___。
∙ A. 扫描线算法对每个像素只访问一次,主要缺点是对各种表的维持和排序的耗费较大∙ B. 边填充算法基本思想是对于每一条扫描线与多边形的交点,将其右方像素取补∙ C. 边填充算法较适合于帧缓冲存储器的图形系统∙ D. 变标志算法也不能解决像素被重复访问的缺点纠错得分:4知识点:2.4 区域填充收起解析答案D解析3.(4分)∙ A. (A)∙ B. (B)∙ C. (C)∙ D. (D)纠错得分:4知识点:8.3 透明与折射收起解析答案C解析4.(4分)∙ A. (A)∙ B. (B)∙ C. (C)∙ D. (D)纠错得分:0知识点:1.4 常用的图形设备收起解析答案D解析5.(4分)用一个n位的整数表示一个位串,用它控制线型时,可以n个像素为周期进行重复显示。
若Patten=11100101,而i表示画线程序中的第i个像素,则画线程序中的SETIXEL(X,Y,COLOR)可改写为()。
∙ A. if(pattern[i%4])setixel(x,y,color);∙ B. if(pattern[i%6])setixel(x,y,color);∙ C. if(pattern[i%8])setixel(x,y,color);∙ D. if(pattern[i%12])setixel(x,y,color);纠错得分:4知识点:2.1 画线算法收起解析答案C解析6.(4分)齐次坐标表示法就是由n+1维向量表示一个()∙ A. n-1维向量∙ B.n维向量∙ C.n+1维向量∙ D.n+2维向量纠错得分:4知识点:4.1 齐次坐标收起解析答案B解析7.(4分)对二维的齐次坐标[a b h],当h=0该齐次坐标实际上表示了()∙ A. 一个二维的无穷远点∙ B.二维空间的原点∙ C.一个任意维的无穷远点∙ D.任意维空间的原点纠错得分:4知识点:4.1 齐次坐标收起解析答案A解析8.(4分)∙ A. (A)∙ B. (B)∙ C. (C)∙ D. (D)纠错得分:4知识点:1.4 常用的图形设备收起解析答案B解析9.(4分)如果观察方向(视线方向)为Z轴负向,观察向量可设为V=(0,0,-1),则对场景中的图形表平面可判定其可见性。
计算机图形学作业及答案第三章
4,一个多边形的顶点坐标如图所示.(a)写 ,一个多边形的顶点坐标如图所示.(a 出多边形初始边界列表.(b 出多边形初始边界列表.(b)说明扫描线 y=6,7,8,9和10时,那些边会被激活. y=6,7,8,9和10时,那些边会被激活.
11 10 9 8 7 6 5 4 3 2 1 0
E5 E7 E6 E8 E1 E4 E3 E2
3,答案: (1)初始化边列表.对每个非水平边,求出 1/m(=x/ y),ymax,ymin和边的最低点的x坐标. (2)从第一条扫描线y开始. (3)如果y已超出了最后一条扫描线,则结束. (4)激活所有ymin =y的边,删除所有y> ymax的边. (5)把交点按x值排序. (6)填充每个交点之间的像素点. (7)对每个活跃边,x增加1/m. (8)y增加1,跳转到(3).
�
2,答案: (1) 计算初值:因为从(0, R)开始画圆,所以x=0,y=R, delta 计算初值:因为从(0, R)开始画圆,所以x=0,y=R, =2(1-R),并定义变量delta 1和delta 2. 2(1-R),并定义变量delta (2) 当y>=x时,在当前的(x,y)坐标画一个点. y>=x时,在当前的(x (3) 根据delta的符号进行判断. 根据delta的符号进行判断. ,并且delta 如果delta <0,则delta1=2( 如果delta <0,则delta1=2( delta + y )1,并且delta +1, 1<=0 时, delta = delta +2 x +1, x = x+1.如果delta 1>0 时, delta = delta+2*(x-y+1),x=x+1,y=y-1. delta+2*(x-y+1),x=x+1,y=y如果delta 如果delta >0,delta2= 2( delta x )1,并且delta delta2= 2( ,并且delta 2<=0 时, delta = delta+2*(x-y+1),x=x+1,y=y-1.如果 delta+2*(x-y+1),x=x+1,y=ydelta 2>0 时, delta = delta+(-2*y+1),y=y-1. delta+(-2*y+1),y=y如果delta=0, 如果delta=0, delta = delta+2*(x-y+1),x=x+1,y=y-1. delta+2*(x-y+1),x=x+1,y=y(4)转到步骤(2 (4)转到步骤(2), 直至完成圆弧
2023年计算机图形学大作业
程序大作业选题内容用VC++或者OpenGL上机编程实现如下算法,选择OpenGL编程者可以将文献综述报告选为对OpenGL图形标准和相关库函数的介绍。
程序设计报告规定用A4纸打印,规定报告规定有以下内容:1设计目的和规定2算法原理介绍3程序源代码4程序运营结果抓图5参考文献6 学习体会1.NURBS曲线的生成与显示。
规定可以演示出w权因子的变化对曲线形状的影响,以及控制顶点的变化对曲线形状的影响,有良好的程序界面,交互式地控制w因子的变化和控制顶点的变化,以示可以通过控制点和权因子来灵活地改变形状。
2.参数多项式曲面的生成与显示涉及双线性曲面、单线性曲面、双三次参数曲面片、孔斯(Coons)曲面。
3.双三次Bezier曲面的生成与显示规定用不同颜色显示双三次Bezier曲面和曲面的控制网格,并且可以取消曲面控制网格的显示,允许交互式地改变控制网格的顶点位置,以观看Bezier曲面性状的改变。
4.双三次B样条曲面的生成与显示规定用不同颜色显示双三次B样条曲面和曲面的控制网格,并且可以取消曲面控制网格的显示,允许交互式地改变控制网格的顶点位置,以观看B样条曲面性状的改变。
5.扫描曲面的生成与显示通过任意指定被运动的基体、以及基体运动的途径,显示生成的扫描曲面。
6.生成并显示Julia集和Madelbrot集的逐级放大图。
如下图所示:7.实现分形图像压缩算法。
规定可以实现图像的打开、显示和保存功能,并同时显示压缩前和压缩后的图像。
8.用随机插值模型生成并显示山的模型9.绘制Sierpinski金字塔(需要考虑多边形绘制的顺序,并使用消隐算法,才干显示对的的结果)10.绘制Sierpinski海绵(需要考虑多边形绘制的顺序,并使用消隐算法,才干显示对的的结果)11.用粒子系统模拟自然景物,例如跳动的火焰、烟雾、下雨、行云、随风摇曳的草丛等(任选其一)。
12.任意选择一种消隐算法,实现曲面物体的消隐(例如一个圆环中间放置一个球)。
作业四 计算机图形学作业
计算机图形学作业科目:计算机图形学学号:1060414014016姓名:秦红志一、作业要求1.简单种子填充提前着色。
2.扫描线种子填充。
3.多边形扫描线填充原始算法。
二、实现OnDraw部分代码及运行结果截图1.简单种子填充提前着色。
●代码:void CHw4_1View::fill(CDC* pDC,int x,int y,int OldColor,int NewColor){if(pDC->GetPixel(x,y)==OldColor){pDC->SetPixel(x,y,NewColor);fill(pDC,x,y+1,OldColor,NewColor);fill(pDC,x,y-1,OldColor,NewColor);fill(pDC,x-1,y,OldColor,NewColor);fill(pDC,x+1,y,OldColor,NewColor);}}CPen pen;int OldColor=RGB(255,255,255); //指填充区域位置的颜色,默认为白色int NewColor=RGB(255,255,0);pen.CreatePen(PS_SOLID,3,RGB(0,0,0)); //画一个笑脸CPen *pOldpen;pOldpen=pDC->SelectObject(&pen);pDC->Rectangle(50, 50, 100, 100);pDC->MoveTo(65,60);pDC->LineTo(65,70);pDC->MoveTo(85,60);pDC->LineTo(85,70);pDC->Arc(60, 80, 90, 90, 40, 85, 110,85 );int a=52; //设置种子点int b=52;fill(pDC,a,b,OldColor,NewColor);●运行结果:2.扫描线种子填充。
吉林大学2020级《运算机图形学》试卷A答案(0002)
《运算机图形学》考试试卷A答案一、填空题(每空1分,共15份)1.偶数;奇数2.一条扫描线上;相邻两条扫描线上3.有限;无穷4. 漫反射、环境光、镜面反射5. 计算、交互6. 极点7. 参数持续性、几何持续性8. 3MB二、问答题(第七小题15分,其他每题10分,共85分)1. 运算机图形学是研究如何利用运算机生成、处置和显示图形的的原理、算法、方式和技术的一门学科。
运算机图形学的要紧研究对象:景物的几何建模方式(modeling)、对模型的处置方式、几何模型的绘制技术(rendering)、图形输入和操纵的人机交互界面(user interface)。
2. 中点画线算法的大体思想如下:假设直线方程为:ax+by+c=0其中a=y0-y1, b=x1-x0, c=x0y1-x1y0构造判别式:d=F(M)=F(x p+1,y p+0.5) =a(x p+1)+b(y p+0.5)+c当d<0,M在直线(Q点)下方,取右上方P2;当d>0,M在直线(Q点)上方,取右方P1;当d=0,选P1或P2都可,约定取P1;若d>0 ->M在直线上方->取P1;现在再下一个象素的判别式为d1=d+a;增量为a若d<0->M在直线下方->取P2;现在再下一个象素的判别式为d2= d+a+b ;增量为a+b画线从(x0, y0)开始,d的初值d0= a+0.5b 由于只用d 的符号作判定,为了只包括整数运算, 能够用2d代替d来摆脱小数,提高效率。
3. 边的分类表:边的活化链表:(其中,a,b别离是扫描线y=3,y=8的表)4.视点变换指观看点的朝向和位置的变换。
模型变换指场景物体的几何形态的建模,包括位置、大小等。
投影的目的确实是概念一个视景体,使得视景体外多余的部份被裁剪掉,最终进入图像的只是视景体内的部份。
5. 产生的曲线逼近操纵点多边形,而插值是指产生的曲线通过给定操纵点。
吉林大学图像处理部分试题
图像处理部分1. 傅里叶变换(1). 1-D 傅里叶变换有连续函数f(x),等间隔采样N 次,得到了N 的函数值{f(0), f(1), f (2),…, f(N-1)},设x 为离散实变量,u 为离散频率变量,定义离散傅里叶变换和逆变换为:F {f (x )}=F (u )=1N∑f (x )e −j2πux N N−1x=0,(u =0,1,…,N −1)……①F −1{F (u )}=f (x )=∑F (u )e j2πuxN N−1u=0,(x=0,1,…,N −1)……②(e−j2πux N=cos2πux −jsin2πux )上述公式中j 是虚数单位,原函数f(x)一般为实函数,F(u)是复函数,有如下表示方法: F (u )=R (u )+jI(u)其中R 为实部,I 为虚部,写成指数形式F (u )=|F(u)|jϕ(u)|F (u )|=√R 2(u )+I 2(u )ϕ(u )=arctan(I(u)R(u))其中,ϕ(u )称为相位角,|F (u )|称为f(x)的傅里叶频谱,频谱的平方称为功率谱,记作P(u):P (u )=|F (u )|2=R 2(u )+I 2(u )(2). 2-D 傅里叶变换F {f (x,y )}=F (u,v )=1N∑∑f (x,y )e −j2π(ux+vy )N N−1y=0N−1x=0,(u,v =0,1,…,N −1)……③F −1{F (u,v )}=f (x,y )=1N∑∑F (u,v )e j2π(ux+vy )N N−1v=0N−1u=0,(x,y =0,1,…,N −1)……④频谱:|F (u,v )|=√R 2(u,v )+I 2(u,v )功率谱:P (u,v )=|F (u,v )|2=R 2(u,v )+I 2(u,v ) 相位角:ϕ(u )=arctan(I(u,v)R(u,v))2.图像增强(1).直方图均衡化图像的灰度统计直方图是一个1-D的离散函数:P f(f k)=n kn,(k=0,1,2,…,L−1)f k为图像f(x,y)的第k级灰度值,n k为图像中灰度值为f k的像素的个数,n为像素总数,表现的是图像上各种灰度的像素所占的比例或者概率,所有灰度的概率加在一起等于1.直方图均衡化就是把原始的直方图变换为均匀分布的形式,达到增加动态范围从而增强整体的对比度的效果.变换函数要满足两个条件:在0≤f≤L-1的范围内是一个单值单增函数,这是为了保证原图各级灰度在变换后仍然保持排列顺序对于0≤f≤L-1有0≤g≤L-1,这是为了保持灰度值动态范围一致.累积分布函数(CDF)可以实现这个功能:g k=∑n i nki=0=∑P f(f i)ki=0,(0≤f k≤1,k=0,1,…,L−1)CDF函数的计算方法是,先算出原始直方图P f,我们知道直方图是一个离散函数,就像一个数列一样,把它的所有项加起来等于1.当要计算原始CDF值g k时,就把原始直方图的从0到k的值累加在一起.然后计算取整,g k′=int[(L−1)g k−0.5],第三步确定映射关系,如果有多个原始的灰度概率映射到一个灰度上了,就把他们的概率加起来,这个映射关系将会用于生成均衡化之后的图像(2).直方图规定化1)直方图规定化变换能有选择的增强某个灰度值范围内的对比度.2)分为三个步骤:1.求使原始图像直方图均衡化的变换2.规定出需要的直方图,求使规定的直方图均衡化的变换,3.将原始直方图映射到规定直方图3)实例(3).滤波1)空域滤波1.线性平滑滤波线性平滑滤波器的所有系数都是正数,对于3X3的模板,最简单的是所有系数都取1,加权求和,除以9,赋值,这种方法又称为邻域平均.2.非线性平滑滤波既要消除噪声,又要保持细节,使用中值滤波,a)模板滑动,中心与某个像素重合b)读取模板下面的像素值c)将灰度值从小到大排列d)找到灰度中值e)把中值赋值给模板中间的那个像素3.线性锐化线性锐化滤波器的中心值为正数其他值为负数,例如使用3x3卷积核,中间的是8,其他位置是-1.4.非线性锐化没讲2)频域低通滤波1.理想低通滤波器设置一个截断频率,在频域上,大于该频率的完全不能通过,小于该频率的完全不受影响.物理上无法实现,效果上会使图像模糊2.巴特沃斯低通滤波器H(u,v)=11+[D(u,v)D0]2n,不会出现明显的振铃效果,能消除虚假轮廓3)频域高通滤波1.理想高通滤波器截断频率以下的频率完全不能通过,截断频率以上的完全不受影响.2.巴特沃斯高通滤波器H(u,v)=11+[D0D(u,v)]2n,增强边缘,但平滑区域内的动态范围被压缩,图像变暗4)频域带通滤波和带阻滤波1.理想带通和带阻滤波器带通滤波器允许一定频率范围内的信号通过,带阻滤波器阻止一定平率范围内的信号通过,带阻和带通滤波器必须是关于频域原点对称的(一三象限或者环状)3.图像编码(1).哈夫曼编码哈夫曼编码时无损编码的最优解,是即时码,也是唯一码,出现次数越多的符号的编码越短.构造哈夫曼编码使用哈夫曼树.哈夫曼树是从下往上画的.(2).截断哈夫曼编码取字符集合中出现概率最高的M个字符,把剩下的字符看做一个字符,出现概率为那些字符的概率之和,然后进行哈夫曼编码,编码完后,把获得的第M+1个码作为前缀,后面接上一个定长自然编码,分别为那些没有独立编码的字符编码.这样实际上只需要为M+1个符号做哈夫曼编码.(3).平移哈夫曼编码将符号按照出现概率排列,然后分成若干个长度相等的组,对于每个组中的各个元素,采用相同的编码方式,再对每个组加上专门的平移符号以区分他们,这样实际上只需要给一个组做哈夫曼编码就行了.4.图像分割(1).边缘检测边缘处往往有灰度阶跃,一阶导数会呈现一些特征,使用卷积来发现梯度:水平模板对垂直特征响应较大,垂直模板对水平特征响应较大.拉普拉斯算子是基于二阶导数的:(2).轮廓跟踪和图搜索1)轮廓跟踪也称为边缘点连接,是由梯度图中的一个边缘点出发,依次搜索并连接相邻的边缘点从而逐步检测出轮廓的方法.分为三个步骤:1.确定搜索起点,可能是一个点,也可能是多个点.2.采用合适的数据结构和搜索机制,在已经发现的轮廓点基础上确定新的轮廓点,3.确定终止条件,在满足条件的时候终止算法.2)简单轮廓跟踪先找到梯度最大的一点,在从该点的8邻域中找到梯度最大的一点,作为点C和点P,根据这两个点的相对关系,按照下图进行搜索:逆时针前进,以左侧作为内侧.搜索时为了保证连续性,只考虑灰色的三个像素,然后再把之前的C点作为P,刚找到的点作为C,继续搜索,直到回到起点形成闭合轮廓.3)图搜索在图搜索中,定义边缘为互为4近邻的两个像素之间,边缘元素的代价函数为:c(p,q)=H−[f(p)−f(q)]Pq为两个像素点,H为灰度的最大值,f(p)和f(q)代表这两个像素的灰度值,灰度差越大,代价越小,对应的梯度越大,越有可能是边界元素,方框代表一个边缘元素,方框里面的两个坐标是边缘元素两侧的两个像素的坐标,路径上的数字代表把所指向的那个节点加入边界中要增加的代价,深色的节点是终止节点,图搜索把找边界转化成了找起点到终点的最短路径问题.找到的最短路径上的边界元素连接起来就是边界.(3).阈值分割(没讲)单阈值分割会把图像二值化,大于阈值的为1,小于阈值的为0,选取阈值的方法有如下:1.极小值点阈值把直方图看成一条曲线,选取直方图的谷作为阈值2.最优阈值有时候目标和背景的灰度值有部分重叠,就希望减少分割误差,能使得分割误差最小的灰度值就可以作为阈值,这样的阈值也许会存在不止一个.图中两条曲线分别对应前景和背景的直方图,E1T和E2T面积之和就是分类错误的总概率,而使得这个值最小的灰度值就是最优阈值.3.迭代阈值首先初始开关函数将输入图像朱像素分成前景和背景,在第一遍对图像扫描结束后,平均两个积分器的值来确定一个阈值,用这个阈值控制开关在次将输入图像分成前景和背景,并用作新的开关函数,如此迭代直到开关函数不再发生变换,此时得到的前景和背景即为最终分割结果.。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
作业上交
• 上交时间:2012年5月7日~5月11日 上交时间: 年 月 日 月 日 • 741746639@
3. Ray Tracing
• • • 搜索一个Ray Tracing程序 搜索一个 程序 根据此程序画出流程图 程序要体现出递归算法,比如 程序要体现出递归算法,
– 光线与三角形网格相交 – 光线与球面相交 – 光线与长方体相 搜索一个Bezier曲线绘制程序 曲线绘制程序 搜索一个 根据程序画出流程图 程序需要描述de Casteljau算法思想 程序需要描述 算法思想
Assignment
1. Transformation
• 搜索一种 搜索一种Transformation的程序(二维即可, 的程序(二维即可, 的程序 以下情况选做一种即可) 以下情况选做一种即可)
– – – – – Translation Scaling Rotation Shear 组合变换
• 根据此程序画出流程图 • 程序中需要体现出齐次坐标系(HC)的思想 程序中需要体现出齐次坐标系( )
2. Phong Lighting Model
• • • 搜索一个Phong Lighting Model程序 搜索一个 程序 根据程序画出流程图 程序中需体现出能量守恒公式
r r n r r I p = I a K a + I i K s ( R ⋅V ) + I i K d ( L ⋅ N )
5. B-Spline Curves
• • • • 搜索一个B-Spline曲线绘制程序 曲线绘制程序 搜索一个 根据程序画出流程图 写出节点向量Knot Vector 写出节点向量 程序需要实现节点插入功能Knot 程序需要实现节点插入功能Knot Insertion
评分标准
• 优秀 优秀——完成题目 、4、5,选做题目 和题 完成题目1、 、 ,选做题目2和题 完成题目 目3之一 之一 • 良好 良好——完成任意三个题目 完成任意三个题目 • 中等 中等——完成任意两个题目 完成任意两个题目 • 及格 及格——完成任意一个题目 完成任意一个题目 • 无成绩 无成绩——不交作业或作业雷同者 不交作业或作业雷同者