西电计算机视觉大作业
计算机视觉考试题库及答案

计算机视觉考试题库及答案计算机视觉是人工智能领域的重要分支,它致力于使计算机具备类似人类视觉系统的能力,从图像或视频中理解和解释信息。
随着计算机视觉的发展和应用日益广泛,许多机构和个人都对该领域的知识和技能进行考核。
为了帮助考生更好地准备和备考计算机视觉考试,本文将提供一份计算机视觉考试题库及答案,供学习和参考。
题目一:1. 请简要解释计算机视觉的定义和作用。
答案一:计算机视觉是一种模拟和复制人类视觉系统的技术与科学。
它利用计算机和相应的算法来获取、处理、分析和理解图像和视频数据,从而让计算机具备类似人类视觉系统的能力。
计算机视觉的作用包括目标检测与跟踪、图像识别与分类、场景理解与解释、三维重构与建模等。
题目二:2. 请列举计算机视觉中常用的图像处理技术,并简要说明其原理和应用场景。
答案二:(1)灰度变换:通过对图像的亮度进行变换,改变图像的对比度和亮度,常用的灰度变换包括直方图均衡化和伽马校正。
应用场景包括图像增强和色彩校正等。
(2)图像滤波:通过对图像进行空域或频域滤波,实现图像平滑或增强。
常用的图像滤波方法包括均值滤波、中值滤波和高斯滤波等。
应用场景包括图像去噪和边缘检测等。
(3)边缘检测:通过检测图像中的边缘和轮廓,获得图像的结构信息。
常用的边缘检测算法包括Sobel算子、Canny算子和Laplacian算子等。
应用场景包括目标检测和图像分割等。
(4)图像分割:将图像分成若干个具有独立意义的区域。
常用的图像分割算法包括阈值分割、基于区域的分割和基于边缘的分割等。
应用场景包括目标提取和图像分析等。
题目三:3. 请简要介绍计算机视觉中的机器学习方法,并说明其在物体识别中的应用。
答案三:计算机视觉中的机器学习方法包括监督学习、无监督学习和强化学习。
监督学习通过提供标记的训练样本来训练模型,从而实现对未知样本的判别和分类。
无监督学习通过从未标记数据中学习数据的统计特性和结构,进行数据聚类和降维等任务。
计算机视觉测试题目及答案

计算机视觉测试题目及答案在计算机视觉领域,测试题目是评估一个人对于图像处理、模式识别和计算机视觉理论的理解和应用能力的重要方法。
下面将给出一些常见的计算机视觉测试题目及其答案,希望能够帮助您更好地了解和掌握相关知识。
1. 图像处理题目:请简要说明什么是图像处理,并列举三种常见的图像处理操作。
答案:图像处理是指对于数字图像进行一系列的操作,以改善图像质量、提取图像特征或实现其他目标的过程。
常见的图像处理操作包括:灰度化、平滑滤波、边缘检测、直方图均衡化、二值化、图像加减运算、图像变换等。
2. 模式识别题目:请简要说明什么是模式识别,并列举三种常用的模式识别方法。
答案:模式识别是指通过对输入模式进行学习和分类,从而实现对未知模式的自动识别的过程。
常用的模式识别方法包括:最近邻算法(K-Nearest Neighbor,KNN)、支持向量机(Support Vector Machine,SVM)、人工神经网络(Artificial Neural Network,ANN)、决策树(Decision Tree)、隐马尔可夫模型(Hidden Markov Model,HMM)等。
3. 计算机视觉理论题目:请简要说明什么是计算机视觉,并介绍计算机视觉的应用领域。
答案:计算机视觉是指通过计算机模拟人类视觉系统的信息处理机制,实现对数字图像或视频的自动分析、理解和处理的学科。
计算机视觉的应用领域非常广泛,包括目标检测与跟踪、人脸识别、视频监控、机器人导航、医学影像分析、自动驾驶等。
4. 图像特征提取题目:请简要说明什么是图像特征提取,并列举三种常用的图像特征。
答案:图像特征提取是指通过对图像进行一系列数学或统计操作,提取出图像中携带有重要信息的特征表示的过程。
常用的图像特征包括:颜色直方图、纹理特征(如灰度共生矩阵)、形状特征(如边缘直方图、轮廓描述子)以及局部特征(如SIFT、SURF等)。
5. 图像分类题目:请简要说明什么是图像分类,并介绍图像分类的主要步骤。
计算机视觉笔试题库及答案大全

计算机视觉笔试题库及答案大全计算机视觉是人工智能领域的重要分支,致力于使计算机获得类似于人类视觉的能力。
在计算机视觉的学习和应用过程中,对于不同的考察知识点和技术要求,往往需要通过笔试题来测试学生对于相关知识的掌握和理解程度。
为了帮助广大学习计算机视觉的学生更好地备考,本文结合了大量的计算机视觉笔试题,并提供了相应的答案和解析,以供参考和学习之用。
以下将为您介绍一些常见的计算机视觉笔试题及其答案大全。
一、问题描述:1. 什么是计算机视觉?答案:计算机视觉是指通过计算机和数学算法对图像或视频进行分析、处理和解释,最终使计算机能够模拟并实现人类视觉的一种科学与技术。
2. 请简要描述计算机视觉的应用领域。
答案:计算机视觉广泛应用于人脸识别、目标检测与跟踪、图像与视频分析、医学影像处理、无人驾驶、虚拟现实等领域。
3. 什么是图像分割?答案:图像分割是指将一副图像分割成多个具有相似特征的区域或对象,常用于图像识别、目标检测、图像处理等领域。
4. 什么是卷积神经网络(CNN)?答案:卷积神经网络是一种深度学习模型,通过卷积操作和神经网络的结合,能够有效处理图像数据,并在图像识别、目标检测等任务中取得显著的成果。
5. 请简要描述目标检测与跟踪的区别。
答案:目标检测旨在确定图像中目标的位置和类别,而目标跟踪则是在连续视频帧中跟踪目标的位置和运动轨迹。
二、请回答以下问题:1. 在图像识别中,主要使用哪些特征描述子进行图像匹配?答案:在图像识别中,主要使用SIFT(尺度不变特征变换)、SURF(加速稳健特征)等特征描述子进行图像匹配。
2. 什么是非监督学习?请举例说明。
答案:非监督学习是一种无监督训练模型的机器学习方法。
例如,K-means聚类算法就属于非监督学习,它能够将数据集划分为若干个簇,每个簇内的样本具有相似的特征。
3. 请简要描述图像增强的方法。
答案:图像增强的方法包括灰度变化处理、滤波操作、直方图均衡化、锐化和模糊处理等,旨在提高图像的质量和清晰度。
西电最优化上机报告(大作业)

上机报告一.最速下降法算法简述:1.在本例中,先将最速下降方向变量赋一个值,使其二范数满足大于ε的迭代条件,进入循环。
2.将函数的一阶导数化简,存在一个矩阵,将其hesse矩阵存在另一个矩阵。
依照公式求出α,进而求出下一任迭代的矩阵初值。
循环内设置一个计数功能的变量,统计迭代次数。
3.求其方向导数的二范数,进行判别,若小于ε,则跳出循环,否则将继续迭代。
4.显示最优解,终止条件,最小函数值。
心得体会:最速下降法的精髓,无疑是求梯度,然后利用梯度和hesse矩阵综合计算,求解下一个当前最优解。
但是,要求函数是严格的凸函数,结合严格凸函数的大致图像,这就给初值的选取提供了一点参考。
例如在本例中,由于含有两个变量的二次方之和,结合大致图像,想当然的,初值的选取应当在原点附近;又因为变量的二次方之和后面,还减去了变量的一次形式和一次混合积,所以初值的选取应该再向第一象限倾斜。
综合以上考量,第一次选取(1,1)作为初值,判别精度方面,取到千分位,暂定为0.001。
运行以后,结果显示迭代了25次,最优解为(3.9995,1.9996),终止条件为5.4592e-04,目标函数为-8.0000。
这个结果已经相当接近笔算结果。
整体的运行也比较流畅,运算速度也比较快。
第二次取值,决定保留判别精度不变,将初值再适当向第一象限倾斜,取(2,2)作为初值,运行后,显示只迭代了11次!最优结果显示(3.9996,1.9997),终止条件为3.6204e-04,最优解-8.0000。
可见,最优结果更接近理想值,终止条件也变小了,最关键的是,迭代次数减少至第一次的一半以下!这说明以上初选取的方向是对的!第三次再进行初值细化,判别精度仍然不变,初值取(3,3)。
结果令人兴奋,只迭代了四次!最优解已经显示为(4.0000,2.0000),终止条件为2.4952e-04,目标函数-8.0000。
第四次,判别精度不变,取初值(4,4)。
电子科技大学计算机视觉作业答案

⎛ 0.0028 − 0.0003 0.2182⎞
⎜
⎟
H = ⎜ 0.0009 − 0.0048 0.0759⎟
⎜⎝ 0.0000 − 0.0000 0.0011⎟⎠
对输入的图像采用矩阵的逆矩阵,可以得到以下的结果,从这个结果可以看到,图像的失真
表现为尺寸的拉伸。
使用同样的方法和以下数据点处理 edwardVI.pgm:
r=4; z0=40; x0=40; f=24; x=f*((r*sin(phi).*cos(theta)+x0).)/(r*cos(phi)+z0); y=f*((r*sin(phi).*sin(theta)).)/(r*cos(phi)+z0);
plot(x,y,'b') 所以在透视映射下球的投影不是圆。
u = [0,607,0,170]; v = [0,0,170,170]; x = [200,0,200,0]; y = [200,200,0,0];
可以得到以下图像,从这副图可以看到,失真表现为图像朝向观察者方向的拉伸。
类似的,使用这个方法和以下数据处理 Checkerboard.pgm:
u = [113,114,504,471]; v = [305,183,295,174]; x = [0,0,200,200]; y = [0,100,0,100];
u = [183,361,205,358];
v = [109,155,917,805];
x = [0,91,0,91];
y = [182,182,0,0];
这些点在本文中定义为一个 8*9 的矩阵,矩阵的特征向量对应的最小特征值定义为所要求的 H 矩阵。把 H 矩阵重构为一个 3*3 的矩阵可以得到:
西电算法设计大作业

算法设计大作业寻找多数元素班级:021151学号:02115037姓名:隋伟哲(1)问题提出:令A[1,2,…n]是一个整数序列,A中的整数a如果在A中出现的次数多余⎣n/2⎦,那么a称为多数元素。
例如在序列1,3,2,3,3,4,3中,3是多数元素,因为在7个元素中它出现了四次。
有几个方法可以解决这个问题。
蛮力方法是把每个元素和其他各个元素比较,并且对每个元素计数,如果某个元素的计数大于⎣n/2⎦,就可以断定它是多数元素,否则在序列中就没有多数元素。
但这样比较的次数是n(n-1)/2=Θ(错误!未找到引用源。
),这种方法的代价太昂贵了。
比较有效的算法是对这些元素进行排序,并且计算每个元素在序列中出现了多少次。
这在最坏情况下的代价是Θ(n 错误!未找到引用源。
).因为在最坏情况下,排序这一步需要Ω(n 错误!未找到引用源。
)。
另外一种方法是寻找中间元素,就是第⎡n/2⎤元素,因为多数元素在排序的序列中一定是中间元素。
可以扫描这个序列来测试中间元素是否是多数元素。
由于中间元素可以在Θ(n)时间内找到,这个方法要花费Θ(n)时间。
有一个漂亮的求解方法,它比较的次数要少得多,我们用归纳法导出这个算法,这个算法的实质是基于下面的观察结论。
观察结论:在原序列中去除两个不同的元素后,原序列的多数元素在新序列中还是多数元素。
这个结论支持下述寻找多数元素候选者的过程。
将计数器置1,并令c=A[1]。
从A[2]开始逐个扫描元素,如果被扫描的元素和c相等。
则计数器加1,否则计数器减1.如果所有的元素都扫描完并且计数器的值大于0,那么返回c作为多数元素的候选者。
如果在c和A[j](1<j<n)比较式计数器为0,那么对A[j+1,…n]上的过程调用candidate过程。
算法的伪代码描述如下。
(2)算法Input: An array A[1…n] of n elements;Output: The majority element if it exists; otherwise none;1. c←candidate(1);2. count←0;3. for j←1 to n4. if A[j]=c then count←count+1;5. end for;6. if count>⎣n/2⎦ then return c;7. else return none;candidate(m)1. j←m; c←A[m]; count←1;2. while j<n and count>03. j←j+1;4. if A[j]=c then count←count+1;5. else count←count-1;6. end while;7. if j=n then return c;8. else return candidate(j+1);(3)代码//Majority.cpp#include<iostream>using namespace std;int Candidate(int *A, int n, int m);int Majority(int *A, int n);int main(){int n;cout << "please input the number of the array: ";cin >> n;int *A;A = (int *) malloc(n*sizeof(int) );cout << "please input the array: ";for (int i = 0; i < n; i++)cin >> A[i];if (Majority(A, n) != 'N')cout << "the majority is: " << Majority(A, n);elsecout << "the majority element do not exist! ";free(A);cin.get();cin.get();return 0;}int Majority(int *A, int n){int c = Candidate(A, n, 0), count = 0;for (int j = 0; j < n; j++)if (A[j] == c)count += 1;if (count > n / 2)return c;else return'N';}int Candidate(int *A, int n, int m){int j = m, c = A[m], count = 1;while (j < n && count>0){j += 1;if (A[j] == c)count += 1;else count -= 1;}if (j == n)return c;else return Candidate(A, n, j + 1); }(4)运行结果(5)设计实例首先输入数据的个数n=7,然后依次读入n个数(1,3,2,3,3,4,3)。
西电电院人工智能课程大作业。

西电人工智能大作业八数码难题一.实验目的八数码难题:在3×3的方格棋盘上,摆放着1到8这八个数码,有1个方格是空的,其初始状态如图1所示,要求对空格执行空格左移、空格右移、空格上移和空格下移这四个操作使得棋盘从初始状态到目标状态。
例如:(a) 初始状态 (b) 目标状态图1 八数码问题示意图请任选一种盲目搜索算法(深度优先搜索或宽度优先搜索)或任选一种启发式搜索方法(A 算法或 A* 算法)编程求解八数码问题(初始状态任选),并对实验结果进行分析,得出合理的结论。
本实验选择宽度优先搜索:选择一个起点,以接近起始点的程度依次扩展节点,逐层搜索,再对下一层节点搜索之前,必先搜索完本层节点。
二.实验设备及软件环境Microsoft Visual C++,(简称Visual C++、MSVC、VC++或VC)微软公司的C++开发工具,具有集成开发环境,可提供编辑C语言,C++以及C++/CLI 等编程语言。
三.实验方法算法描述:(1)将起始点放到OPEN表;(2)若OPEN空,无解,失败;否则继续;(3)把第一个点从OPEN移出,放到CLOSE表;(4)拓展节点,若无后继结点,转(2);(5)把n的所有后继结点放到OPEN末端,提供从后继结点回到n的指针;(6)若n任意后继结点是目标节点,成功,输出;否则转(2)。
流程图:代码:#include <stdlib.h>#include <stdio.h>typedef struct Node {int num[9]; //棋盘状态int deepth; //派生的深度 g(n)int diffnum; //不在位的数目 h(n)int value; //耗散值 f(n)=g(n)+h(n)struct Node * pre;struct Node * next;struct Node * parent;}numNode; /* ---------- end of struct numNode ---------- */int origin[9]; //棋盘初始状态int target[9]; //棋盘目标状态int numNode_num,total_step;numNode *open,*close; //Open表和Close表numNode *create_numNode(){return (numNode *)malloc(sizeof(numNode));}numNode *open_getfirst(numNode *head); //返回第一项,并从Open表中删除void open_insert(numNode *head,numNode *item); //向Open表中按序插入新节点void close_append(numNode *head,numNode *item); //向Close表中插入新节点int expand(numNode *item); //扩展节点int print_result(numNode *item); //打印结果numNode *copy_numNode(numNode *orgin);char isNewNode(numNode *open,numNode *close,int num[9]);//是否在Open表或Close表中void print_num(int num[9]); //打印棋盘状态int diff(int num[9]); //求不在位棋子的个数void init(); //初始化,获得棋盘初始状态和目标状态void swap(int *a,int *b);int operate(int num[],int op);void free_list(numNode *head);/** Name: 主函數* Description: 程序入口*/Int main ( int argc, char *argv[] ){//初始化Open表和Close表open=create_numNode();close=create_numNode();open->pre=open->next=close->pre=close->next=NULL; init(); //由用户输入初始和目标状态//初始化初始节点numNode *p1;p1=create_numNode();p1->parent=NULL;p1->deepth=0;int i=0;for ( i=0; i<9; i++){p1->num[i]=origin[i];}open_insert(open,p1);numNode_num=1;p1=open_getfirst(open);while (p1!=NULL){close_append(close,p1);if(expand(p1))return EXIT_SUCCESS;p1=open_getfirst(open);}printf("No solution!\n");return EXIT_SUCCESS;} /* ---------- end of function main ---------- */voidinit ( ){while(1){printf("Please input opriginal status:\nFor example:123456780 stands for\n""1 2 3\n""4 5 6\n""7 8 0\n");char temp[10];scanf("%s",&temp);int i=0;for ( i=0;i<9 && temp[i]-'0'>=0 && temp[i]-'0'<=8; i++){origin[i]=temp[i]-'0';}printf("Please input target status:\n");scanf("%s",&temp);int j=0;for ( j=0; j<9 && temp[j]-'0'>=0 && temp[j]-'0'<=8; j++){target[j]=temp[j]-'0';}system("cls");if ( i==9&&j==9){break;}}} /* ----- end of function init ----- */voidopen_insert (numNode *head,numNode *item){numNode *p,*q;p=head->next;q=head;while ( p!=NULL && item->value > p->value ){q=p;p=p->next;}q->next=item;item->pre=q;item->next=p;if(p!=NULL){p->pre=item;}} /* ----- end of function open_insert ----- */numNode *open_getfirst (numNode *head){numNode *p;if ( head->next == NULL ){return NULL;}p=head->next;head->next=p->next;if ( p->next != NULL ){p->next->pre=head;}p->pre=NULL;p->next=NULL;return p;} /* ----- end of function open_getfirst ----- */voidclose_append (numNode *head,numNode *item){item->next=head->next;item->pre=head;head->next=item;if ( item->next!=NULL ){item->next->pre=item;}} /* ----- end of function close_append ----- */intexpand (numNode *p1){numNode * p2;int op=1;for ( op=1; op<=4; op++){p2=copy_numNode(p1);operate(p2->num,op);if(isNewNode(open,close,p2->num)=='N'){p2->parent=p1;p2->deepth=p1->deepth+1;p2->diffnum=diff(p2->num);p2->value=p2->deepth+p2->diffnum;if(p2->diffnum==0){total_step=print_result(p2);printf("Total step: %d\n",total_step); free_list(open);free_list(close);return 1;}else{numNode_num++;open_insert(open,p2);}}elsefree(p2);}return 0;} /* ----- end of function expand ----- */intoperate(int m[], int op){int blank;blank=0;while (m[blank]!=0 && blank<9 )++blank;if (blank==9)return 1;switch (op) {case 1: /* up */if (blank>2)swap(m+blank,m+blank-3);break;case 2: /* down */if (blank<6)swap(m+blank,m+blank+3);break;case 3: /* left */if (blank!=0 && blank!=3 && blank!=6) swap(m+blank,m+blank-1);break;case 4: /* right */if (blank!=2 && blank!=5 && blank!=8) swap(m+blank,m+blank+1);break;default : return 1;}return 0;}voidswap(int *a, int *b){int c;c=*a;*a=*b;*b=c;}numNode *copy_numNode (numNode *origin){numNode *p;p=create_numNode();p->deepth=origin->deepth;p->diffnum=origin->diffnum;p->value=origin->value;int i;for ( i=0; i<9; i++){(p->num)[i]=(origin->num)[i];}return p;} /* ----- end of function copy_numNode ----- */intdiff (int num[9]){int i,diffnum=0;for(i=0;i<9;i++)if(num[i]!=target[i])diffnum++;return diffnum;} /* ----- end of function diff ----- */charisNewNode (numNode *open,numNode *close,int num[9]) {numNode *p;int i=0;p=open->next;while ( p!=NULL ){for ( i=0; i<9; i++){if(p->num[i]!=num[i])break;}if(i==9)return 'O'; //Openp=p->next;}p=close->next;while ( p!=NULL ){for ( i=0; i<9; i++){if(p->num[i]!=num[i])break;}if(i==9)return 'C'; //Closep=p->next;}return 'N';} /* ----- end of function isNewNode ----- */voidfree_list (numNode *head){numNode *p,*q;p=head->next;while ( p!=NULL ){q=p->next;free(p);p=q;}free(head);} /* ----- end of function free_list ----- */voidprint_num (int num[9]){int i;for ( i=0; i<9; i++){printf("%d\t",num[i]);if((i%3)==2)printf("\n");}} /* ----- end of function print_num ----- */intprint_result ( numNode *item){numNode *p;int step;p=item;if(p!=NULL){step=print_result(p->parent);printf("\nStep %d:\n",step+1);print_num(p->num);return step+1;}else{return -1;}}四.结果:下图实验结果中,一步代表一层的搜索结果中的最优解;八数码难题的宽度优先搜索树:五.实验分析宽度优先搜索属于一种盲目搜索算法,可以系统的展开所有节点,理论上一定能达到搜寻目的。
计算机视觉试题及答案

计算机视觉试题及答案第一部分:选择题1. 在计算机视觉中,图像处理主要通过哪些操作来提取有用的图像特征?a) 噪声抑制b) 边缘检测c) 特征提取d) 图像拼接答案:c2. 在计算机视觉中,常用的图像拼接算法是什么?a) 最近邻插值b) 双线性插值c) 双三次插值d) 原始图像拼接答案:b3. 在目标检测中,常用的算法是什么?a) Haar特征级联分类器b) SIFT算法c) SURF算法d) HOG特征描述子答案:a4. 在图像分割中,哪种算法可以将图像分割成不同的区域?a) K均值聚类算法b) Canny边缘检测算法c) 霍夫变换d) 卷积神经网络答案:a5. 在计算机视觉中,图像识别是通过什么来实现的?a) 特征匹配b) 图像分割c) 图像去噪d) 图像增强答案:a第二部分:填空题1. 图像的分辨率是指图像中的______。
答案:像素数量(或像素个数)2. 图像的直方图能够表示图像中不同______的分布情况。
答案:像素值(或亮度值)3. 图像处理中常用的边缘检测算子有______。
答案:Sobel、Prewitt、Laplacian等(可以列举多个)4. 在计算机视觉中,SURF算法中的SURF是什么的缩写?答案:加速稳健特征(Speeded-Up Robust Features)5. 在图像分割中,常用的阈值选择算法有______。
答案:Otsu、基于聚类的阈值选择等(可以列举多个)第三部分:问答题1. 请简述计算机视觉的定义及其应用领域。
答:计算机视觉是利用计算机对图像和视频进行理解和解释的研究领域。
它主要包括图像处理、图像分析、目标检测与跟踪、图像识别等技术。
应用领域包括机器人视觉、自动驾驶、安防监控、医学影像处理等。
2. 请简要描述图像处理中常用的滤波器有哪些,并说明其作用。
答:图像处理中常用的滤波器包括均值滤波器、中值滤波器、高斯滤波器等。
均值滤波器用于去除图像中的噪声,通过取邻域像素的平均值来减少噪声的影响;中值滤波器通过取邻域像素的中值来去除图像中的椒盐噪声;高斯滤波器通过对邻域像素进行加权平均来模糊图像,并且能够有效抑制高频噪声。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、引言
随着互联网广泛普及的应用,各种各样的数据资源包括文本、图片、音频、视频等放在网络服务器上供用户访问。但是这种网络资源的幵放也带了许多弊端,比如一些用户非法下载、非法拷贝、恶意篡改等,因此数字媒体内容的安全和因特网上的侵权问题成为一个急需解决的问题。数字水印作为一项很有潜力的解决手段,正是在这种情况下应运而生。
(2)噪声攻击下的提取
图3.2LSB噪声攻击下水印提取(左:高斯噪声,右:椒盐噪声)
通过实验结果,可以知道高斯噪声下提取的水印并没有在椒盐噪声下提取的清晰,但依然能够获取水印信息,说明LSB算法具备一定的抗噪效果。
(3)剪切攻击下的提取
剪切攻击是一种空间上的攻击手段,一般采用剪切嵌入水印图像的一部分,然后再利用残缺的图像来还原嵌入的信息。
图2.1两层多分辨率小波分解示意图
每一级分解都把图像分解为四个频带水平(HL)、垂直(LH)、对角(HH) 和低频,其中低频(LL)部分还可以进行下一级的分解,从而构成了小波的塔式分解。一幅图像经过分解之后,图像的主要能量主要集中于低频部分,图像的高频部分即图像的细节部分所含能量较少,分布在三个子图中,主要包含了原图的边缘和纹理部分信息。
彩色水印提取的具体步骤 :
(1)对嵌有水印的彩色图片降维得到RGB三个分量上的水印图片;
(2)对RGB三个分量上的水印图片在变换域进行分块提取;
(3)对水印图像进行重构,得到RGB三个分量上的水印图片;
(4)对得到的RGB三个分量上的水印图片进行合成得到彩色水印图片。
2.2.2、设计方法和实施过程
(1)水印的嵌入
图2.3 水印提取流程图
(3)攻击方式
1高斯噪声攻击
使用matlab自带函数:
nosie=fspecial('gaussian',3,indensity);
embedImage=filter2(nosie,Image);
2椒盐噪声攻击
使用matlab自带函数:
embedImage=imnoise(Image,'salt & pepper',indensity) ;
3图像剪切攻击
利用矩阵运算对图像进行剪切。
(4)指标评价
1峰值信噪比(PSNR)
峰值信噪比,如以下公式。用来作为评价水印算法嵌入的平均指标
2相似度(NC)
相似度即归一化相似系数,如以下公式。用来对比水印与提取水印的相关性,作为水印算法提取的评价指标。
2.2、彩色图像水印
2.2.1基本原理
彩色水印嵌入的原理具体步骤 :
二.算法原理
2.1、灰度图像水印
2.1.1基本原理
处理灰度图像数字水印,采用了LSB(最低有效位)、DCT变换域、DWT变换域三种算法来处理数字水印。在此过程中,处理水印首先将其预处理转化为二值图像,简化算法。
(1)LSB算法原理:最低有效位算法(Least Sig nificant Bit , LSB)是很常见的空间域信息隐藏算法,该算法就是通过改变图像像素最不重要位来达到嵌入隐秘信息的效果,该方法隐藏的信息在人的肉眼不能发现的情况下,其嵌入方法简单、隐藏信息量大、提取方法简单等而获得广泛应用。LSB信息嵌入过程如下:
数字水印(技术是将一些代表性的标识信息,一般需要经过某种适合的变换,变换后的秘密信息(即数字水印),通过某种方式嵌入数字载体(包括文档、音频、软件等)当中,但不影响原载体的使用价值,也不容易被人的知觉系统(如视觉或听觉系统)觉察或注意到。通过这些隐藏在载体中的信息,可以达到确认内容创建者、购买者、传送隐秘信息或者判断载体是否被篡改等目的。在发生产权和内容纠纷时,通过相应的算法可以提取该早已潜入的数字水印,从而验证版权的归属和内容的真伪。
[6]胡德明、杨杰、王明照.基于DCT的视频数字水印技术研究[J].武汉理工大学学报(交通科学与工程版),2004-08(第28卷第4期):600-603.
从结果得出,离散小波变换的数字水印抗高斯噪声能力很强,在受到0.2强度的高斯噪声下,相似度依然能够达到99%。但是抗椒盐噪声却没有那么好的效果。
(3)置换加密效果图
图3.9置换加密处理
通过matlab中的随机数函数给水印嵌入与提取置换加密处理,需要输入正确的密钥才能成功提取水印,从而提高了水印的安全性。
图3.3LSB剪切攻击下的提取
从结果来看,剪切攻击使得水印完全提取不出来,由此可以看出LSB抗剪切能力较差,像素的丢失使得最低有效位信息丢失,从而导致了水印丢失。
3.2DCT算法嵌入提取水印
(1)无攻击下的提取
图3.4DCT无攻击下的提取
DCT变换域下的水印嵌入与提取,从实验结果来看,鲁棒性比LSB算法明显提高。
五、总结
本文在水印的嵌入、提取和攻击时,分别采用了空域LSB算法,变换域中的DCT算法,DWT算法;选择评价指标时,为了确保结果的准确性,选择了不同的指标。在嵌入中使用PSNR峰值信噪比来体现透明性,在提取中使用NC相似度来体现鲁棒性;在GUI中将参数(攻击强度参数和嵌入强度参数)设置为可变的,使设计更加灵活;在安全性方面利用MATLAB中随机数函数加入了置乱和水印嵌入及提取的密钥,大大提高水印安全性。在攻击性方面,采用了高斯噪声攻击,椒盐噪声攻击以及图像剪切等多种攻击手段。从实践中可以看出并没有一种完美的水印手段,每一算法都具有针对性,不具有普遍性。
3.3DWT算法嵌入提取水印
(1)无攻击下的提取
通过离散小波变换得嵌入的水印在没有任何攻击手段的提取下,能够很好的提取出水印信息,同时隐蔽性也很强。可以说DWT变换域下的水印算法鲁棒性较好,相似能够达到100%。如图3.6所示。
图3.7DWT无攻击下的提取
(3)高斯噪声攻击下的提取
图3.8DWT噪声攻击下的提取(左:高斯噪声,右:椒盐噪声)
(2)噪声攻击下的提取
图3.5DCT噪声攻击下的提取(左:高斯噪声,右:椒盐噪声)
从实验结果来看,DCT变换域下的水印算法在抗低强度高斯噪声攻击下能力很强。DCT变换域下的水印算法在椒盐噪声攻击下水印失真,但信息还可以辨别。
(3)图像剪切攻击下的提取
图3.6DCT剪切攻击下的提取
从实验结果来看,DCT变换域下的水印算法抗剪切攻击能力很强。在64*64的剪切攻击下,并不受影响。
小波变换的这些性质为数字图像的局部特性(如边缘,纹理等)提供了很好的空间一尺度定位,同时由于其多分辨率的表示,可以直接对图像进行分级处理,这一特性更可以实现水印的渐进解码和传输。
上述快速算法,是在已知原始二维函数在某一尺度空间的展开系数矩阵 基础之上进行计算的。初始矩阵的选取是二维快速算法中的一个重要问题,严格的讲,初始矩阵应使用公式:
上式的含义是任何M×N 的矩阵A 都可以表示为一系列具有下面形式的函数的和:
这些函数称为 DCT 变换的基函数。这样, 就可以看成是应用于每个基函数的加权。Matlab中直接调用dct2函数对图像的分块进行离散余弦变换。
(3)DWT嵌入算法原理:小波变换是时间(空间)频率的局部化分析,它通过伸缩平移运算对信号(函数)逐步进行多尺度细化,最终达到高频处时间细分,低频处频率细分,能自动适应时频信号分析的要求,从而可聚焦到信号的任意细节,解决了Fourier变换的困难问题,成为继Fourier变换以来在科学方法上的重大突破。
其中,上标表示尺度,下标表示两个方向的位移, 为小波函数计算获得。对于初始矩阵的选取,工程上有一种简化的方法,即直接将原始二维函数的离散矩阵看作为初始矩阵 ,本文采用db小波函数进行了一级分解,在小波变换高频系数中进行嵌入。
2.1.2、设计方法和实施过程
(1)水印的嵌入
图2.2水印嵌入流程图
(2)水印的提取
DCT 变换利用傅立叶变换的性质,采用图像边界褶翻将图像变换为偶函数形式,然后对图像进行二维傅立叶变换,变换后仅包含余弦项,所以称之为离散余弦变换。
二维离散余弦变换DCT(Discrete Cosine Transform)的定义为,假设矩阵A 的大小为M ×N。
其中, 称为矩阵A 的DCT 系数。DCT 是一种可逆变换,离散反余弦变换定义如下:
当alpha=1/10000时,峰值信噪比为40.3485,相似度为0.86473,提取的水印失真程度大;因此提取的水印嵌入强度越大,透明性越差,鲁棒性越好;嵌入强度越小,透明性越好,鲁棒性越差。
4.2高斯噪声攻击下的水印提取
图4.3高斯攻击下的提取
该彩色图像分三层使用DWT算法嵌入水印。如图4.3,DWT算法依然对高斯噪声有着较强的鲁棒性,提取的水印并没有受到噪声影响。
参考文献
[1]阮秋琦. 数字图像处理学[M]. 北京:电子工业出版社,2001.
[2]龚声蓉,刘纯平,王强等. 数字图像处理与分析[M]. 北京:清华大学出版社,2006.
[3]王炳锡、陈琦、邓峰森.数字水印技术[M].西安:西安电子科技大学,2004.
[4]陈桂明. 应用MATLAB语言处理数字信号与图像处理[M]. 北京:科学出版社,2000.
图2.4彩色图像数字水印嵌入流程图
(2)水印的提取
图2.5彩色图像数字水印提取流程图
三、灰度图像实验结果
3.1LSB算法嵌入提取水印
(1)无攻击下的提取
图3.1LSB无攻击下水印提取
从实验结果可以看出最低有效位算法的PSNR偏高,说明图像透明性非常好,但是相似度较低,说明LSB算法和水印图像进行降维处理,提取各自的RGB值,这样原来的三维数组就变成了三个独立的二维数组;
(2)设定嵌入强度alpha值,利用DCT变换对提取的RGB三个分量在变换域进行分块嵌入;
(3)对各块进行IDCT变换,然后对图像进行重构,得到RGB三个分量上的嵌入水印之后的图片;
(4)对得到的RGB三个分量上的嵌入水印之后的图片进行合成得到带水印的彩色图片。
四、彩色图像实验结果