MATLAB程序设计基础

MATLAB程序设计基础
MATLAB程序设计基础

第三章MATLAB程序设计基础

chapter 3: Foundation of MATLAB

program design

一、数据及数据文件(Data and Data file)

1. 数据类型:(Data mode)为适应各种不同计算和处理的需求,MATLAB提供了多种数据类型,主要有:

数值数组(Numeric array)—

包括整形(int8,uint8,int16,uint16,int32,uint32)单精度

(signal), 双精度(duble)(MATLAB最常用的变量类型),

稀疏(sparce)数组。按维数分有一维、二维和多维数

组。

Int---Integrate.

Uint---Unsigned Integer data

字符数组(Character array):由字符串组成的数组

单元数组(Cell array):用不同类型和大小的数组组成的数组,同

一个元胞数组中各元胞的内容可以不同。

结构数组(Structure array):与单元数组类似,但其数据的组织能

力更强,更富于变化。

Java类(Java class):由JavaAPI或第三方定义的类函数。

函数句柄(Function handle):可以在一个参数列表中传递,并使

用feval运行.

在工作空间浏览器中不同的数据类型有着不同的图标标识。2. 数据文件(Data file)

MATLAB支持的各种数据文件(Readable file formats of MATLAB)的主要类型及其存取方法如下述:

(1)二进制数据文件:(Binary date file)以.mat为扩展名。是标准的MATLAB数据文件,以二进制编码形式存储。.mat文件可以由MATLAB提供的save和load命令直接存取。

(2)ASCⅡ码数据文件:(ASCⅡcode data file)扩展名为.txt, .dat

等,可以是在MATLAB环境下存储的,也可能是其他软件的计算结果,可以被MATLAB调用,也可以用文本编辑器打开进行观察与修改。可以用save和load命令进行读入和存取。

(3).图象文件:(Graphics file)扩展名为.bmp, .jpg .tif等,用于图形图象处理,可以用imread和imwrite命令进行读入和存取。

(4).声音文件:(Sound file) 扩展名为.wav ,用waveread和wavwrite 命令进行读入和存取。

Readable file formats.

Data formats Command Returns MAT- MATLAB workspace load Variables in file.

CSV- Comma separated numbers csvread Double array.

DAT- Formatted text importdata Double array.

DLM- Delimited text dlmread Double array.

TAB- Tab separated text dlmread Double array. Spreadsheet formats

XLS - Excel worksheet xlsread Double array and cell array.

WK1- Lotus 123 worksheet wk1read Double array and cell array.

Scientific data formats

CDF - Common Data Format cdfread Cell array of CDF

records

FITS- Flexible Image Transport System fitsread Primary or extension table data

HDF - Hierarchical Data Format hdfread HDF or HDF-EOS data set

Movie formats

A VI - Movie aviread MATLA

B movie. Image formats

TIFF - TIFF image imread Truecolor, grayscale or indexed image(s).

PNG - PNG image imread Truecolor, grayscale or indexed image.

HDF - HDF image imread Truecolor or indexed image(s).

BMP - BMP image imread Truecolor or indexed image.

JPEG - JPEG image imread Truecolor or grayscale image.

GIF - GIF image imread Indexed image.

PCX - PCX image imread Indexed image.

XWD - XWD image imread Indexed image.

CUR - Cursor image imread Indexed image.

ICO - Icon image imread Indexed image.

RAS - Sun raster image imread Truecolor or indexed.

PBM - PBM image imread Grayscale image.

PGM - PGM image imread Grayscale image.

PPM - PPM image imread Truecolor image.

Audio formats

AU - NeXT/Sun sound auread Sound data and sample rate.

SND - NeXT/Sun sound auread Sound data and sample rate.

WA V - Microsoft Wave sound wavread Sound data and sample rate.

3. 数据输入向导(Import wizard)

File 菜单下的工具Import Wizard用于将各种类型数据文件中的数据导入工作空间,称为数据输入向导。在Import 对话框中输入需要导入的数据文件名后出现Import Wizard窗口,可预观测将要导入的数据、显示图象、播放声音等。

几种数据的导入:

(1)mat数据文件( mat data file)

调入途径:File 输入文件名,也可用Browse打开文件浏览器选择输入文件;Clipboard,数据从剪贴板中调入。

窗口内容:左侧,变量名称、大小、类型。右侧观察前10行10列信息。

Next:显示数据输入向导窗口第二页。

(2)ASCⅡ码数据文件:(ASCⅡ code data file) 输入ASCⅡ数据文件名---选择显示数据内容(data)或头文本内容(textdata)---选择Next下一页进行导入内容选择(通过钩选决定将何变量导入工作空间)---- 按Finish 完成导入操作或按Cancel终止数据的导入。(3)图象数据文件:(Graphics data file)输入图形数据文件名---点击show image(可在图象上拖曳放大区域)------按Finish 完成数据导入(或按Cancel终止数据导入)。

(4)声音数据文件:(Sound data file)输入声音数据文件名---点击Play Sound弹出一个显示声音数据波形的图形窗口(按Play agine 按钮重新播放声音,按Done按钮关闭预观察窗口)------按Finish 完成数据导入(或按Cancel终止数据导入)。

(5)剪贴板的数据:(Clipboard data)需要导入已存放在系统剪贴板中的数据,点数据输入向导窗口中的Clipboard选项,--Next进入下一页--按Finish 完成数据导入(或按Cancel终止数据导入)。

二.M文件(M-file)

MATLAB 的两种工作方式:1,交互式命令操作方式(interactive mode)—通过命令窗口进行交互式操作;2,M文件(M-file)的编程工作方式(programming mode)。

1.M文件编程:(M-file program)可用普通文本编辑器编制MATLAB文件,文件由纯ASCⅡ字符组成,确定文件名后加.m扩展名,称为M文件。

MATLAB提供了一个方便的编辑/调试器,功能较多,推荐使用。建立M文件的一般步骤:(normal process of M- file creating)

(1)打开文件编辑器:(Opening the file editor)最简单的方法是在操作桌面的工具栏上选择新建文件键(New M- File)或打开已

有文件键(Open File),也可以在命令窗口输入命令edit建立新文

件或输入edit filename, 打开名为filename 的M文件;

(2)编写程序内容:(Compose the program content)编写新的文件或修改已有文件;

(3)保存文件:(save file) 文件运行前必须完成保存操作,与一般的文件编辑保存操作相同;

(4)运行文件:(running file) 在命令窗口输入文件名即可运行。如要在编辑器中直接完成运行,可在编辑器的Debug菜单下save and run选项,或按Run快捷键,最快捷的方法是直接按F5

键执行运行。

M文件有两种形式:命令(脚本)文件(Script File)和函数文件(Function File)

2. 命令文件:(Script File) M文件中最简单的一种,是可用于自动重复执行的一组MATLAB命令和函数组合,不需输出输入参数,用M 文件可以调用工作空间已有的变量或创建新的变量。运行过程中产生的变量都是全局变量。

建立一个命令文件等价于从命令窗口中顺序输入文件里的命令,程序不需要预先定义,只要依次将命令编辑在命令文件中,再将程序保存成为扩展名为.m的M文件即可。

运行命令文件时,只需在命令窗口键入文件名即可。

例:用三角函数计算画出花瓣图形。

theta=-pi:0.01:pi;

rho(1,:) =2*sin(5*theta).^2; %计算四种不同rho

rho(2,:)=cos(10*theta).^3;

rho(3,: )=sin(theta).^2;

rho(4,: )=5*cos(3.5*theta).^3;

for k = 1:4

Subplot(2,2,k),

polar(theta,rho(k,: ))

end

将程序保存成名为petals的M文件,并运行。

注:

(1)‘%‘引导注释行,不予执行;

(2)不需要用“end”作为M文件的结束标志;

(3)若文件存放在自己的目录上,在运行文件前,应先将自己的目录设置为当前工作目录。最简单方法:在当前目录浏览器中设

置。

(4)运行后存放在工作空间的变量可以用工作空间浏览器查看。3。函数文件(Function File)

如果M文件的第一个可执行行以function开始,便是函数文件,每一个函数文件定义一个函数。函数文件区别于命令文件之处在于命令文件的变量在文件执行完成后保留在工作空间中,而函数文件内定义的变量只在函数文件内起作用,文件执行完后即被清除。

例:建立average函数用于计算矢量中单元的平均值。

function y = average(x)

%A VERAGE Mean of vector elements.

%A VERAGE(X),Where X is a vector, is the mean of vector element. %Non-vector input results in an error.

[m,n]=size(x);

if(~((m==1) | (n==1)) | (m==1& n==1))

error(' Input must be a vector')

end

y=sum(x)/length(x);

将文件存盘,缺省状态下自动存储名为average.m的函数。这样只要接受一个输入参数便可计算返回一个输出参数,与其他MATLAB函数一样使用。

例:用已建立的average函数文件求1~99的平均值。

z=1:99;

average(z)

函数文件的基本组成部分:

(1)函数定义行:(the lines for function identification)由function 引导,并定义函数名、输入参数和输出参数,函数定义行必须放在文件的第一个可执行上。可以设多个输入输出参数,如:function [x,y,z]=sphere(theta,phi,rho)

也可以没有输出参数,如:

function printresults(x)

(1)H1行:(Lines H1) lookfor查询时使用的;

(2)帮助文本:(Help text)建立在线查询信息;

(3)函数体:(Function body)包含全部的用于完成计算及给输出参数赋值等工作的语句;

(4)注释:(explanatory notes)以%起始导行尾结束部分的说明文字。可放置在程序中的任何部位。

2.局部变量与全局变量(Local variable and Global variable)

由M文件定义的一个matlab函数内部所拥有的变量为局部变量,这些变量独立于其他函数的局部变量和工作空间中的变量。可以用来共享的变量为全局变量。

用global就可以把一个变量定义为全局变量。MATLAB中变量名是区分大小写的,习惯上常将大写字母定为全局变量。如:global A B C

三.程序结构(Structure of program)

8种控制程序流程(control flow statement)的语句:for, while, if,

switch, try, continue, break, return

1。循环语句(Loop statement)

(1)for语句:

for v=表达式通常为一个矢量,形式为:m:s:n(初值:步长:終值)语句体

end

例:

n=10

for i=1:n

x(i)=(i+1).^2;

end

x

x =

4 9 16 2

5 3

6 49 64 81 100 121

例:嵌套循环:注意与end的配对。

m=3; n=4;

for i=1:m

for j=1:n

a(i,j)=1/(i+j-1);

end

end

format rat

a =

1 1/

2 1/

3 1/4

1/2 1/3 1/4 1/5

1/3 1/4 1/5 1/6

例:运用非1步长,产生0-20 以内的偶数

for i=0:2:20

a(i/2+1)=i ;

end

a

a =

0 2 4 6 8 10 12 14 16 18 20 (2).While语句:为条件循环语句。循环不确定次数,只要表达式的逻辑判断结果非零,语句体就重复执行,直到循环条件不成立为止。While 表达式

语句体

end

例:while循环,求解n!达到100位数的第一个n是多少。

n=1;

while prod(1:n)<1e100

n=n+1;

end

n

n =

70

2. 条件语句(Selection statement)

(1) if—end语句(simple if statement)

if 表达式

语句体

End

进行逻辑逻辑判断,当计算的表达式结果为真(非零)时执行语句体,否则跳过if结构。

(2)if—else--end语句

if 表达式

语句体1;

else

语句体2:

end

当计算的表达式结果为真时执行语句体1,结果为假时执行语句体2。

例:判断学生是否通过学业。

if ((attendance>=0.90) & (grade>=60))

pass=1;

else

fail=1;

end

(1)i f—elseif—end语句

if 表达式1

语句体1;

elseif 表达式2

语句体2;

else

语句体3;

end

例:用色彩区分数据点的范围。

n=100;

x=1:n;

y=randn(1,n);

hold on

for i=1:n

if y(i)<-1

plot(x(i),y(i),'*g')

elseif y(i)>=-1 & y(i)<=1

plot(x(i),y(i),'ob')

elseif y(i)>=1

plot(x(i),y(i),'xr')

end

end

hold off

(3) 分支语句:switch—case—end

通过对某个变量值的比较做各种不同的执行选择。

形式:

switch 表达式(数字或字符串)

case 数字或字符串1

语句体1;

case 数字或字符串2

语句体2;

……

otherwise

语句体n;

End

将表达式的值与各case后的值进行比较,与哪一个case的值相同就执行哪一个case下面的语句体,如所有的case值均与之不同,则执行otherwise下面的语句体。

例:检查input_num的数值.

switch input_num

case -1

disp(‘negative one’); %当input_num=-1时显示

case 0

disp(‘zero’); %当input_num= 0时显示

case 1

disp(‘positive one’); %当input_num= 1时显示otherwise

disp(‘other value’); %当input_num等于其他值时显示end

(4) 检测语句:(Detect statement)

try-catch语句用于检测错误并改变流程,形式:

try

语句体 1

catch

语句体2

end

先执行try下面的语句体1,如没有错误,就跳出该结构,如出错误,则执行catch语句下面的语句体2。可用lasterr函数查询错误信息,查询结果为空字符串时表示语句体1成功执行。

例:判断错误语句的用法

n=4;

a=magic(3)

try

a_n=a(n,:), %取a的第n 行元素

catch

a_n=a(end, : ), %如取a的第n 行出错,则改取a的最后一行end

lasterr %显示出错原因

a =

8 1 6

3 5 7

4 9 2

a_n =

4 9 2

ans =

Index exceeds matrix dimensions.

(5)其他流程控制语句:(Other control flow statement)

(a), continue语句:用于控制for循环和while循环跳过某些执行语句。在for循环和while循环中,如果出现continue语句,则跳过循环体中所有剩余的语句,继续下一次循环。

例:continue语句的用法.确定剔除空行和注释行后文件的有效行数

fid=fopen('magic.m','r'); %打开文件

count=0; %计数器置零

while ~feof(fid) %判断是否到文件末尾

line=fgetl (fid); %从文件中读行

if isempty(line) | strncmp(line,'%',1)

%判断是否为空行或注释行continue %如果是空行或注释行继续下一次循环end

count=count+1; %如果不是空行或注释行计数器加1

end

disp(sprintf('%d lines' ,count)); %显示剔除后的行数

25 lines

(b). break语句:用于终止for循环和while循环的执行.如果遇到break语句,则退出循环体,执行循环体外的下一行语句。

例:break语句的用法.

fid=fopen(‘fft.m’,’r’); %打开文件

s=’ ‘; %清空字符数组

while ~feof(fid) %判断是否为文件末尾

line=fgetl(fid); %从文件中读行

if isempty(line) %如果是空行

break %如果是空行退出循环

end

s=strvcat(s,line); %如果不是空行,将该行写入字符数组end

disp(s) %显示字符数组结果

(c )return语句:用于终止当前的命令序列,并返回到调用的函数或键盘。将return插入被调用函数的某一位置,会根据某种条件迫使被调用函数提前结束并返回调用函数。

例:return语句的用法.

function d=det(A) %定义函数det(A) 计算矩阵A的行列式if isempty(A) %如果矩阵是空的

d=1;

return %返回调用函数

else

…%计算过程略

end

四. 数据的输入与输出(Date input and output)

1.数据的输入(Data input)

常用方法:

(a)键盘输入:(keyboard input)数据少时较方便,多时不益使用;

(b)用M文件产生数据:(Generate data by M-file)使用于较多数据的输入;

(C)从ASCⅡ码文件装载数据:(Load data from ASCⅡcode file)

(c)对文本格式的数据文件可用load命令直接读入MATLAB,其内容存放在以文件名命名的变量中

(d)利用fopen, fscanf, fread及MATLAB其他低层I/O命令读取数据:用于读取其他外部应用程序建立的各种

特定格式的数据。

2。数据的输出(data output)

(a)利用diary命令输出语句: 运行diary命令可以在当前

工作目录上产生一个名为diary的日记文件,文件内容

可以输出。关闭日记文件的命令为dairy off.

(b)利用Notebook获取数据:于dairy用法相仿优点是文

字质量高,版面规范,且M-book中的命令可以随时运

行或修改,MATLAB工作空间中的数据随之改变。运

行Notebook要求计算机上装有MS-Word。

NOTEBOOK Open an m-book in Microsoft Word (Windows only). NOTEBOOK, by itself, launches Microsoft Word and creates a new m-book called "Document 1."

NOTEBOOK(FILENAME) launches Microsoft Word and opens the m-book FILENAME.

NOTEBOOK('-SETUP') runs an interactive setup function for the Notebook. The user is prompted for the version of Microsoft Word and the locations of several files.

NOTEBOOK('-SETUP', WORDVER, WORDLOC, TEMPLATELOC) sets up the Notebook using the specified information. WORDVER is the version of Microsoft Word (one of '97' or '2000' or '2002'), WORDLOC is the directory containing winword.exe, and TEMPLATELOC is a Microsoft Word template directory.

Examples: notebook

notebook c:\documents\mymbook.doc

notebook -setup

For the case in which Microsoft Word 97 (winword.exe) resides in the C:\Program Files\Microsoft Office 97\Office directory, and the Microsoft Word templates reside in the C:\Program Files\Microsoft Office 97\Templates directory: wordver = '97'; wordloc = 'C:\Program Files\Microsoft Office 97\Office'; templateloc = 'C:\Program Files\Microsoft Office 97\Templates'; notebook('-setup', wordver, wordloc, templateloc)

(c) save命令输出数据:将当前内存中的变量存到文件中去。

(d) 利用fopen, fprintf, fwrite及其他底层I/O命令输出特殊格式的数据:如需要在其他外部应用程序中使用MATLAB输出的特定格式的数据,使用此方法。

3. Save和load命令的使用(Using commend Load and Save)

(1) save(将工作空间的变量存入磁盘)命令的常用调用方法save:将工作空间所有的变量以二进制格式存入名为matlab.mat的

缺省文件;

(a) save dfile:将工作空间所有的变量以二进制格式存入dfile.mat文件,扩展名自动产生

(b) save dfile x:只把变量x以二进制格式存入dfile.mat文件,扩展名自动产生

(c) save dfile.dat x-ascii:将变量x以8位ASCⅡ码形式存入dfile.mat 文件;

(d) save dfile.dat x-ascii-double:将变量x以16位ASCⅡ码形式存入dfile.mat文件;

(e) save(fname, ‘a’, ‘-ascii’): fname是一个预先定义好的包含文件名的字符串,该用法将变量a以ASCⅡ码格式存入fname定义的文件中。

(2) load命令的常用方法(usual application of command load)

(a) load:把磁盘matlab.mat的内容读入内存;

(b) load dfile: 将磁盘文件dfile.mat内容读入内存;

(c) load dfile.dat:将磁盘文件dfile.mat内容读入内存,这是一个ASCⅡ码文件,系统自动将文件名定义为变量名;

(c)a=load(fname): fname是预先定义好的包含文件名的

字符串,将由fname定义文件名的数据文件调入a中。

附:

1、命令窗口数据直接输入输出语句(Input)

可利用语句中输入的字符串内容提示用户在命令窗口直接输入程序运行所需的某些参数,

调用格式:

R = INPUT('How many apples'):

执行后出现提示字符串,输入的内容可以是MATLAB可估值的任何表达式.输出保存在变量R中。

R = INPUT('What is your name','s'):

执行后出现提示字符串,等待字符串输入,字符串直接输出为MATLAB字符串形式。

INPUT Prompt for user input.

R = INPUT('How many apples') gives the user the prompt in the text string and then waits for input from the keyboard. The input can be any MATLAB expression, which is evaluated, using the variables in the current workspace, and the result returned in R. If the user presses the return key without entering anything, INPUT returns an empty matrix.

R = INPUT('What is your name','s') gives the prompt in the text string and waits for character string input. The typed input is not evaluated; the characters are simply returned as a MATLAB string.

The text string for the prompt may contain one or more '\n'. The '\n' means skip to the beginning of the next line. This allows the prompt string to span several lines. To output just a '\' use '\\'.

例:编制可由命令窗口输入被处理温度数据的程序。

k=input('选择转换方式(1--摄氏转换为华氏,2--华氏转换为摄氏):');

if k~=1 & k~=2

disp('请指定转换方式')

return

end

tin=input('输入待转变的温度(允许输入数组):');

if k==1

tout=tin*9/5+32; % 摄氏转换为华氏

k1=2;

elseif k==2

tout=(tin-32)*5/9; % 华氏转换为摄氏

k1=1;

end

str=[' C';' F'];

disp(['转换前的温度', ' ', '转换后的温度'])

disp([' ',num2str(tin),str(k,:), ' ',

num2str(tout),str(k1,:)])

%不同的样条插值函数应用方法:

yi=interp1(x,y,xi,‘method’)

yi=method(x,y,xi)

例:有一正弦衰减数据y=sin(x).*exp(-x/10),其中x=0:pi/5:4*pi,用三次样条法进行插值。

未插值:

x0=0:pi/5:4*pi;

y0=sin(x0).*exp(-x0/10);

plot(x0,y0)

方法1:x0=0:pi/5:4*pi;

y0=sin(x0).*exp(-x0/10);

x=0:pi/20:4*pi;

y=spline(x0,y0,x);

plot(x0,y0,'or',x,y,'b')

方法2:x0=0:pi/5:4*pi;

y0=sin(x0).*exp(-x0/10);

x=0:pi/20:4*pi;

y=interp1(x0,y0,x,’splin’)

plot(x0,y0,'or',x,y,'b')

基于Matlab的数字水印设计——基于DCT域的水印实现

摘要 数字水印(Digital Watermark)技术是指用信号处理的方法在数字化的多媒体数据中嵌入隐蔽的标记,这种标记通常是不可见的,只有通过专用的检测器或阅读器才能提取。数字水印是信息隐藏技术的一个重要研究方向。随着数字水印技术的发展,数字水印的应用领域也得到了扩展,数字水印的基本应用领域是版权保护、隐藏标识、认证和安全不可见通信。 当数字水印应用于版权保护时,潜在的应用市场在于电子商务、在线或离线地分发多媒体内容以及大规模的广播服务。数字水印用于隐藏标识时,可在医学、制图、数字成像、数字图像监控、多媒体索引和基于内容的检索等领域得到应用。数字水印的认证方面主要ID卡、信用卡、ATM卡等上面数字水印的安全不可见通信将在国防和情报部门得到广泛的应用。 本文主要是根据所学的数字图象处理知识,在MATLAB环境下,通过系统编程的方式,建立并实现基于DCT域的数字水印加密系统。该系统主要包含数字水印的嵌入与提取,仿真结果表明,数字水印算法具有有效性、可靠性、抗攻击性、鲁棒性和不可见性,能够为数字媒体信息在防伪、防篡改、认证、保障数据安全和完整性等方面提供有效的技术保障。 关键词:数字水印;MATLAB;DCT

目录 1 课程设计目的 (1) 2 课程设计要求 (2) 3 数字水印技术基本原理 (3) 3.1 数字水印基本框架 (3) 3.2 算法分类 (3) 3.2.1 DCT法 (4) 3.2.2 其他方法 (4) 3.3 实际需要考虑的问题 (4) 3.3.1 不可见性 (4) 3.3.2 鲁棒性 (5) 3.3.3 水印容量 (5) 3.3.4 安全性 (5) 4 基于DCT变换仿真 (6) 4.1 算法原理 (6) 4.1.1 准备工作 (6) 4.1.2 选取8*8变换块 (7) 4.1.3 边界自适应 (7) 4.1.4 DCT变换与嵌入 (7) 4.1.5 恢复空域 (8) 4.2 嵌入算法扩展 (8) 4.2.1 RGB彩色图像三个矩阵的划分 (8) 4.2.2 八色彩色水印 (8) 4.3 水印的提取 (9) 4.4 仿真程序 (9) 5 结果分析 (14) 结束语 (16) 参考文献 (17)

数字水印技术及基于MATLAB的快速实现

2011年3月刊计算机工程应用技术信息与电脑 China Computer&Communication 1. 引言 多媒体及网络的迅速发展使得多媒体信息的交流和传输变得更 加简单和快捷,然而,这也使盗版者能以低廉的成本复制及传播未经 授权的数字产品,这种对数字产品保护和信息安全的迫切需求,导致 了数字水印技术成为多媒体信息安全领域的一个热点问题。数字水印 技术是在不影响宿主媒体主观质量的情况下,在宿主媒体(文本、图 像、视频、音频)中嵌入不易被人察觉的标识信息,用以证明原创作 者对其作品的所有权,并作为鉴定、起诉非法侵权的证据。 2. 数字水印的特征 一般认为数字水印应具有以下特征: (1) 安全性。数字水印应该是安全、难以被篡改的。当数字作品 发生变化时,数字水印应当也相应发生变化;同时,未经授权的个人 不得修改水印,理论上是未经授权的用户不能检测到产品中是否含有 水印。 (2) 鲁棒性。当被保护的数据在经过攻击后,嵌入的水印信息仍 能保持好的完整性并能以一定的正确概率被检测到。这些可能的攻击 包括噪声、滤波、剪切、旋转和编码等。 (3) 不可感知性。数字水印的嵌入不应使得原始作品发生可以感 知的变化,也不能使得被保护数据在质量上发生可以感觉到的失真。 (4) 可证明性。在多媒体作品的实际应用过程中可能需要多次加 入水印,这时水印系统必须能够允许水印被多次嵌入到被保护的数 据,而且每个水印均能独立地被证明。 (5) 无歧义性。恢复出的水印或对水印判决结果能够表明版权的 惟一,不会发生多重版权纠纷问题。 3. 数字水印的基本原理 通用的水印技术包含两个方面:水印的嵌入和水印的提取或检 测,如图1和图2所示。 图1 水印信号嵌入 图2 水印信号提取或检测 4. 数字水印的研究现状 4.1 文本水印 文本水印就是将代表著作人身份的信息(水印)嵌入到电子出版物 中,在产生版权纠纷时来验证版权的归属。其主要分为三大类:基于 文档结构的水印方法、基于自然语言处理技术的水印方法、基于传统 图像的水印方法。 基于文档结构的各种水印方法都只是提留在文本的表层,无法抵 抗对于文本结构和格式的攻击,简单的重新录入攻击就能使之失效, 因此这些水印方法普遍存在鲁棒性差的缺点。自然语言文本水印方法 相对提高了抗攻击的能力,但普遍存在容量不足的问题。基于传统图 像的文本水印普遍存在鲁棒性不高、操作复杂的缺点。 4.2 图像水印 根据水印的实现过程,图像水印算法可分为空域算法和变换域算 法。空域算法是通过直接改变原始图像的像素值来嵌入水印,通常具 有较快的速度,但鲁棒性差,且水印容量也会受到限制;变换域算法 是通过改变某些变换系数来嵌入水印,通常具有很好的鲁棒性和不可 见性。其实现一般是基于图像变换,如DCT、DFT、DWT等。重点介 绍一下变换域算法。 4.2.1 离散傅里叶变换 (DFT) 该方法是利用图像的DFT来嵌入信息。通信理论中调相信号的抗 干扰能力比调幅信号的抗干扰能力强,同样在图像中利用相位信息嵌 入的水印也比用幅值信息嵌入的水印更稳健。实验表明该方法的抗压 缩能力比较弱。 4.2.2 离散余弦变换 (DCT) DCT能把空间域的图像转换到变换域上进行研究,从而能很容易 了解到图像的各空间频域成分,进行相应处理。基于DCT的水印方法 与基于DFT的水印方法相比有较好的鲁棒性,但是无法做到对图像信 号内容的自适应,因此往往会造成对图像特征的明显损害,不可感知 性不是最佳。 4.2.3 离散小波变换 (DWT) DWT是一种时间---频率信号的多分辨率分析方法,在时频两域 都具有表征信号局部特征的能力。实验表明,与DCT、DFT变换相比 较,基于DWT的水印算法的鲁棒性最优,且与JPEG2000、MPEG4压 缩标准兼容,利用DWT产生的水印具有良好的视觉效果和抵抗多种 攻击的能力,且不可感知性最好。 4.3 音频水印 音频水印利用音频文件的冗余信息和人耳听觉系统的特点来嵌入 水印,其可以保护声音数字产品不被随意复制和篡改,如CD唱片, 广播电台的节目内容等。音频水印的三种基本方法:扩频嵌入方 法、回声隐藏方法和相位编码方法。 4.4 视频水印 视频水印是通过对视频载体的时间和空间冗余来嵌入水印,其既 不影响视频质量,又能达到保护节目制作者的合法权益和控制数字产 品的复制。视频水印从算法要求上同图像水印有许多相似之处,但视 频水印也有一些独特之处,如能够在压缩和未压缩的格式下实时完成 水印的检测,对MPEG压缩、A/D和D/A转换等都有较好的稳健性。 数字水印技术涉及到通信理论、编码理论、噪声理论、视听觉 感知理论、扩频技术、信号处理技术、数字图像处理技术、多媒体技 术、模式识别技术、算法设计等理论,用到经典的DFT离散傅立叶变数字水印技术及基于MATLAB的快速实现 张 巍1 时宏伟2 (1.78179部队,四川成都 610011;2. 川大智胜,四川成都 610045) 摘要:数字水印是近几年来出现的数字产品版权保护技术,是当前国际学术界的研究热点.该文论述了数字水印的提出及研究现状、水印的基本原理和算法、水印的分类等情况,并介绍了一种可以快速上手的高效的实用语言——MATLAB,同时给出了一个用MATLAB工具在静止图像上嵌入水印的实例。 关键词:数字水印;MATLAB;DCT 中图分类号:TP39 文献标识码:A 文章编号:1003-9767(2011)03-0130-02

基于MATLAB的数字水印算法实现

数字水印作为一门新的学科, 自 1993 年 Tirkel 等人正式提出到现在十几年里, 国内外对数字水印的研究都引起了极大的关注, 从最初的版权保护, 已扩展到多媒体技术, 广播监听, in-ternet 等多个领域。数字水印是永久镶嵌在其他数据( 主要指宿主数据) 中具有可鉴别性的数字信号或数字模式, 其存在不能影响宿主数据的正常使用。为了使数字水印技术达到一定的设计要求, 当前水印数据一般应具备不可感知性(imperceptible) 、鲁棒性(Robust) 、可证明性、自恢复性和安全保密性等特点。在数字水印技术中, 水印的数据量和鲁棒性构成了一对基本矛盾。理想的水印算法应该既能隐藏大量数据, 又可以抗各种信道噪声和信号变形。然而在实际中, 这两个指标往往不能同时实现, 实际应用往往只偏重其中的一个方面。如果是为了隐蔽通信, 数据量显然是最重要的, 由于通信方式极为隐蔽, 遭遇敌方篡改攻击的可能性很小, 因而对鲁棒性要求较为不高。但对保证数据安全来说, 情况恰恰相反, 各种保密的数据随时面临着被盗取和篡改的危险, 对鲁棒性的要求很高, 而对隐藏数据量的要求则居于次要地位。典型的数字水印系统至少包含两个组成部分- - 水印嵌入单元和水印检测与提取单元。将水印信息进行预处理后加入到载体中, 称为嵌入。从水印化数据中提取出水印信息或者检测水印信息的存在性称为水印的提取和检测。数字水印算法主要

是指水印的嵌入算法, 而提取算法往往被看成是嵌入算法的逆变换。 当前典型的嵌入算法主要被分为空间域水印算法和变换域水印算法。DCT 变换域算法是数字水印算法的典型代表, 也是数字水印中较为常用的一种稳健的算法。其算法思想是选择二值化灰度图像作为水印信息, 根据水印图像的二值性来选择不同的嵌入系数, 并将载体图像 ( 原始图像) 进行 8×8 的分块, 再将灰度载体图像( 原始图像) 进行 DCT变换。然后, 将数字水印信息的灰度值直接植入到载体灰度图像的 DCT 变换域中, 实现水印的嵌入。而后, 将嵌入了水印信息灰度图像进行 IDCT( 逆离散的余弦变换) 变换, 得到含有了嵌入水印信息的图像, 嵌入过程完毕。水印的提取、检测过程为嵌入过程的逆过程, 其方法和嵌入方法有所雷同不再进行介绍。 下面以 MATLAB 为工具, 给出一个在频域嵌入和提取黑白二值水印图像的实现过程。(1) 水印图像的预处理: 将水印信息图像进行灰度处理, 然后再将转换后的图像进行二值转换。而这些都是为了提高水印信息的安全性对图像所做的处理。(2) 读取原始公开图像(大小为 256×256) 和黑白水印图像(大小为 32×32, 模式为灰度) 到二维数组 I 和 J。(3) 将原始公开图像I 分割为互不覆盖的图像块, 每块大小为 8×8, 共分为 32×32 块。然后对分割后的每个小块Block- dct(x,y) 进行 DCT 变换, 得到变换后的小块 Block-dct(x, y)。(4) 取黑白水印图像中的一个元素 J(p, q) , 通过嵌入算法嵌入到原始公开图像块的中频系数中。(5) 对嵌入水印信息后的图像块Block- dct (x, y) 进行逆DCT 变换, 得到图像块 Block(x′, y′)。

数字水印技术DCT算法MATLAB源代码

%Name: Chris Shoemaker %Course: E ER-280 - Digital Watermarking %Project: Block DCT Based method, using comparision between mid-band coeffcients % Watermark Embeding clear all; % save start time start_time=cputime; k=50; % set minimum coeff difference blocksize=8; % set the size of the block in cover to be used for each bit in watermark % read in the cover object file_name='_lena_std_bw.bmp'; cover_object=double(imread(file_name)); % determine size of cover image Mc=size(cover_object,1); %Height Nc=size(cover_object,2); %Width % determine maximum message size based on cover object, and blocksize max_message=Mc*Nc/(blocksize^2); % read in the message image file_name='_copyright.bmp'; message=double(imread(file_name)); Mm=size(message,1); %Height Nm=size(message,2); %Width % reshape the message to a vector message=round(reshape(message,Mm*Nm,1)./256); % check that the message isn't too large for cover if (length(message) > max_message) error('Message too large to fit in Cover Object') end % pad the message out to the maximum message size with ones message_pad=ones(1,max_message); message_pad(1:length(message))=message; % generate shell of watermarked image watermarked_image=cover_object;

matlab程序设计与应用(第二版)第三章部分课后答案

第三章1. (1)A=eye(3) (2)A=100+100*rand(5,6) (3)A=1+sqrt(0.2)*randn(10,50) (4)B=ones(size(A)) (5)A+30*eye(size(A)) (6)B=diag(diag(A)) 2. B=rot90(A) C=rot90(A,-1) 3. B=inv(A) ;A的逆矩阵 C=det(A) ;A的行列式的值 D=A*B E=B*A D=E 因此A与A-1是互逆的。 4. A=[4 2 -1;3 -1 2;12 3 0]; b=[2;10;8]; x=inv(A)*b x = -6.0000 26.6667 27.3333 5. (1) diag(A) ;主对角线元素 ans = 1 1 5 9 triu(A) ;上三角阵

ans = 1 -1 2 3 0 1 -4 2 0 0 5 2 0 0 0 9 tril(A) ;下三角阵 ans = 1 0 0 0 5 1 0 0 3 0 5 0 11 15 0 9 rank(A) ;秩 ans = 4 norm(A) ;范数 ans = 21.3005 cond(A) ;条件数 ans = 11.1739 trace(A) ;迹 ans = 16 (2)略 6. A=[1 1 0.5;1 1 0.25;0.5 0.25 2] A = 1.0000 1.0000 0.5000 1.0000 1.0000 0.2500 0.5000 0.2500 2.0000

[V,D]=eig(A) V = 0.7212 0.4443 0.5315 -0.6863 0.5621 0.4615 -0.0937 -0.6976 0.7103 D = -0.0166 0 0 0 1.4801 0 0 0 2.5365

音频数字水印报告+matlab程序

音频数字水印 目录 1课题背景与现状 (2) 2研究的目的和意义 (4) 3方案设计和实施计划 (8) 4研究的主要内容 (10) 5创新点和结论 (10) 6成果的应用前景 (11) 7附录:个人工作总结 ................................................................................................ 错误!未定义书签。

1课题背景与现状 数字时代的到来,多媒体数字世界丰富多彩,数字产品几乎影响到每一个人的日常生活。信息媒体的数字化为信息的存取提供了极大的便利,同时也显著地提高了信息表达的效率和准确度。计算机网络通信技术特别是互联网的蓬勃发展,使得数据的交换和传输变成了一个相对简单且快捷的过程。人们借助于计算机、数字扫描仪、打印机等电子设备可以方便、迅速地将数字信息传达到世界各地,在国际互联网上发布自己的作品,传递重要的信息,进行各种学术交流和电子商务活动等等。如何保护这些与我们息息相关的数字产品,如版权保护、信息安全、数据认证以及访问控制等等,已受到日益重视并变得迫切需要了,因此数字水印在今天的计算机和互联网时代大有可为。 数字水印技术是近十年才发展起来的,它是信息隐藏学的一个分支。随着国内信息化程度的提高和电子商务逐渐走向实用,数字水印技术将会拥有更加广阔的应用前景。鉴于信息隐藏与数字水印技术的应用前景,众多知名研究机构如麻省理工学院的多媒体实验室、剑桥大学的多媒体实验室、IBM数字实验室、日立、NEC、SONY,PHILIPS、微软等都加入到信息隐藏和数字水印技术的研究和应用并取得了一定的成果。1996年5月,第一届国际信息隐藏学术研讨会(CIHW)在英国剑桥牛顿研究所召开,至今该研讨会已举办了四届。另外,在IEEE

MATLAB程序设计基础

第三章MATLAB程序设计基础 chapter 3: Foundation of MATLAB program design 一、数据及数据文件(Data and Data file) 1. 数据类型:(Data mode)为适应各种不同计算和处理的需求,MATLAB提供了多种数据类型,主要有: 数值数组(Numeric array)— 包括整形(int8,uint8,int16,uint16,int32,uint32)单精度 (signal), 双精度(duble)(MATLAB最常用的变量类型), 稀疏(sparce)数组。按维数分有一维、二维和多维数 组。 Int---Integrate. Uint---Unsigned Integer data 字符数组(Character array):由字符串组成的数组 单元数组(Cell array):用不同类型和大小的数组组成的数组,同 一个元胞数组中各元胞的内容可以不同。 结构数组(Structure array):与单元数组类似,但其数据的组织能 力更强,更富于变化。 Java类(Java class):由JavaAPI或第三方定义的类函数。 函数句柄(Function handle):可以在一个参数列表中传递,并使 用feval运行. 在工作空间浏览器中不同的数据类型有着不同的图标标识。2. 数据文件(Data file) MATLAB支持的各种数据文件(Readable file formats of MATLAB)的主要类型及其存取方法如下述: (1)二进制数据文件:(Binary date file)以.mat为扩展名。是标准的MATLAB数据文件,以二进制编码形式存储。.mat文件可以由MATLAB提供的save和load命令直接存取。 (2)ASCⅡ码数据文件:(ASCⅡcode data file)扩展名为.txt, .dat

数字水印技术LSB算法MATLAB源代码

close all clear all; % save start time start_time=cputime; % read in the cover object file_name='E:\Phd\My Paper\Second paper -- Experiment\Experiment\Cover and Secret Image\lena.bmp'; [cover_object,map]=imread(file_name); % read in the secret image file_name='E:\Phd\My Paper\Second paper -- Experiment\Experiment\Cover and Secret Image\hat.bmp'; [secret,map1]=imread(file_name); secret1=secret; % convert to double for normalization, then back again secret=double(secret); secret=fix(secret./2); %rounds the elements of A toward zero, resulting in an array of integers secret=uint8(secret); % determine size of cover object Mc=size(cover_object,1); %Height Nc=size(cover_object,2); %Width % determine size of secret object Mm=size(secret,1); %Height Nm=size(secret,2); %Width % title the secret object out to cover object size to generate watermark for ii = 1:Mc for jj = 1:Nc if (secret(ii,jj)>75) watermark(ii,jj)=255; else watermark(ii,jj)=0; end end end % now we set the lsb of cover_object(ii,jj) to the value of watermark(ii,jj) watermarked_image=cover_object;

基于LSB的数字水印算法及MATLAB实现

基于LSB的数字水印算法及MATLAB实现 加密算法 宗岳,王恺 山东科技大学 山东,中国 ggxxsol@https://www.360docs.net/doc/996441993.html, 摘要—LSB是一种简单传统的信息隐藏算法,属于数字水印技术中的一种。本文首先介绍了LSB 技术的原理和特点,然后讨论了基于LSB的数字水印算法。最后利用MATLAB 2010 b2对这一算法的加密过程进行了仿真。 关键词:LSB 数字水印信息隐藏MATLAB I.介绍 随着计算机应用逐渐广泛、网络技术的迅速发展,使音频、视频等多媒体信息都能以数字形式传输和播放,从而使大规模非授权拷贝成为了可能,而这样会损害音乐、电影、书籍和软件等出版业的发展,为了保护知识产权引发了一个很有意义的研究方向:信息隐藏。本文首先介绍了了数字水印技术的原理和分类,接着对LSB算法原理及LSB算法实现进行了介绍,最后使用MATLAB 对其加密过程进行了仿真。 II.数字水印技术的基本原理 数字水印的主要目的是将特定的信息加入到需要保护的媒体信息中,加入的信息一般是能够代表媒体信息版权的内容,如公司标志、媒体作者、特定代码等,而且要保证数字水印能够抵抗一定的攻击,而不被轻易的破坏和修改,同时数字水印要能够被提取或者能够被检测到。数字水印的具体内容、算法、提取或检测过程根据实际应用有不同的要求。数字水印的嵌入和提取过程如图1,图2所示。 图1 数字水印的嵌入过程 图2 数字水印的提取过程 图1是数字水印的嵌入过程,加入密钥可以提高数字水印的隐蔽性、抗攻击性,而并非是必须的。根据用途不同,,嵌入的水印有些是需要还原的,而有些则只需验证水印的存在性,前者需要数字水印的提取算法,而图2需要数字水印的检测算法,根据具体的水印算法,嵌入或提取的过程可能有所不同。 III.数字水印的分类 数字水印技术可以从不同的角度进行分类,因此有多种分类方法。 按数字水印的特性可分为鲁捧数字水印和脆弱数字水印。鲁棒数字水印主要用于标识数字媒体信息的版权信息,它要求嵌入的水印能够抵抗对媒体的常规编辑和恶意攻击,在对媒体进行如:裁剪、旋转、缩放、压缩的变换后水印信息不受到较大损害。而脆弱水印相反,它对攻击敏感,可以根据脆弱水印的状态判断原始信息是否被修改过。 按数字水印所附载的媒体可分为图像水印、音频水印、视频水印和文本水印等。每一种数字化的媒体都有相应的水印算法,这也造成了数字水印算法的复杂性。 按数字水印隐藏的位置划分可以分为空(时)域数字水印、频域数字水印、时/频域数字水印和时间/度数字水印。原始信息通常在空域或者时域上表示,根据信号处理理论有多种变换将信号变化到另外的域上,每一种域上

图像数字水印+matlab程序

第三章图像数字水印的方案 3.1 图像数字水印的技术方案 在数据库中存储在国际互联网上传输的水印图像一般会被压缩,有时达到很高的压缩比。因此,数字水印算法所面临的第一个考验就是压缩。JPEG和EZW(Embedded Zero-Tree Wavelet)压缩是最常见的两种压缩方法。JPEG是基于离散余弦变换域的压缩方法,而EZW是基于小波变换域的压缩方法。前人的研究证明采用与压缩算法相同的变换域水印方法,对于压缩的稳健性较强。因此,我研究图像文件水印算法主要集中在变换域算法及利用人眼视觉特性上。 数字水印的嵌入要求即要考虑视觉透明性,又要保证嵌入水印后图像的稳健性,这两个方面存在着矛盾。保证视觉透明性,就要将水印嵌入到人眼不敏感区,也就是嵌入到图像的高频分量中。而多数图像处理方法对于图像高频部分的损坏程度较高,如有损压缩、高频滤波等。水印很容易在经历图像处理的过程中丢失。这样,则无法保证图像数字水印的稳健性。如果要获得很好的稳健性,数字水印应加在人眼敏感的低频部分,图像的大部分能量集中在低频部分,如果对于低频部分进行处理,水印固然会失去,而图像也没有了利用价值,然而,水印的嵌入会对图像的质量有非常大的影响,这又无法保证视觉透明性。 数字水印算法的实现基本分为三个部分:宿主图像的变换,水印的嵌入和水印的检测,分别描述如下。 3.2 基于DCT域的图像数字水印技术 离散余弦变换(Discrete Cosine Transform)属于正交变换图像编码方法中的一种。正交变换图像编码始于1968年。当时安德鲁斯(Andrews)等人发现大多数自然图像的高频分量相对幅度较低,可完全舍弃或者只用少数码字编码,提出不对图像本身编码,只对其二维傅立叶(DFT)系数进行编码和传输。但DFT是一种正交变换,运算量很大,常常使实时处理发生困难,第二年他们就用Walsh-Hadamard变换(WHT)取代DFT可以使运算量明显减少,这是因为WHT变换只有加减法而无需乘法。但是更有意义的是离散余弦变换和离散正旋变换的出现,它们具有快速算法,精确度高。其中最重要的是1974年提出的DCT,因为其变换矩阵的基向量很近似于托伯利兹矩阵的特征向量,而托伯利兹矩阵又体现了人类语言及图像信号的相关性。因此,DCT常常被认为是语音与图像信号变换的准最佳变换。 图像是二维的,所以在研究时主要用到二维DCT,以及二维IDCT来对图像进行处理。

数字水印matlab程序

clear all; close all; clc; V=double(imread('D:\lena\lena.jpg')); imshow(mat2gray(V)); [i u]=size(V); %计算V的规格 r=100; %设置分解矩阵的秩 W=rand(i,r) %初始化WH,为非负数 H=rand(r,u) maviter=100; %最大迭代次数 for iter=1:maviter W=W.*((V./(W*H))*H'); %注意这里的三个公式和文中的是对应的 W=W./(ones(i,1)*sum(W)); H=H.*(W'*(V./(W*H))); end img_V=W*H; figure; imshow(mat2gray(img_V)); 首先读入原始图象并设置参数,然后嵌入水印信息,程序代码如下:clear % size=256;block=8;blockno=size/block;LENGTH=size*size/64; Alpha1=0.02; Alpha2=0.1; T1=3; I=zeros(size,size); D=zeros(size,size); BW=zeros(size,size); block_dct1=zeros(block,block); %产生水印序列并对其排序 randn('seed',10);watermark1=randn(1,LENGTH); subplot(2,2,1);plot(watermark1);title('watermarc:Gaussian noise');

subplot(2,2,3); title('edge of origine image') [Y0,I0]=sort(watermark1); % %读入原图象 trueImage=imread('H:\Documents and Settings\sunhw\My Documents\My Pictures\biaozhun.bmp'); alfa=.1; LENGTH=2500; subplot(2,2,2); imshow(trueImage); title('origine image:I'); % %对原图象进行DCT变换 dctF1=dct2('H:\Documents and Settings\sunhw\My Documents\My Pictures\biaozhun.bmp'); [m,n]=size(dctF1); % %找出水印嵌入位置(幅值较大的n个频域成分) A=dctF1(:); [Y1,I1]=sort(A); x=m*n; k=LENGTH; M=zeros(x,1); % %修改幅值较大的n个频域成分的幅值,嵌入水印(因为两个问题不同,所以有两个注释符) for i=1:x if k>=1 M(x)=Y1(x)*(1+alfa*Y0(k)); k=k-1; else M(x)=Y1(x); end x=x-1; end N=zeros(x,1);

数字水印算法(包含完整程序)

课程设计任务书 学生姓名: 专业班级: 指导教师:工作单位:武汉理工大学 题目: 数字水印算法设计 初始条件: (1)Matlab应用软件的基本知识以及基本操作技能。 (2)高等数学、信号与系统等基础运算知识。 要求完成的主要任务: (1)掌握一种数字水印的嵌入与提取算法原理。 (2)编写出水印嵌入算法的matlab程序,并给出水印嵌入前后的版权图像,并对嵌入效果进行分析说明。 (3)编写出水印提取算法matlab程序,并给出水印原图和提取出的水印图像,并对水印的提取效果进行分析说明。 (4)进行水印的抗攻击实验,噪声攻击,剪切攻击,缩放攻击,压缩攻击等。 测定提取前后水印的峰值信噪比(PSNR)和相关性(NC)。 时间安排: 6月20日到6月27日理论设计与仿真 6月28日到7月3日撰写报告 7月4日答辩 指导教师签名:年月日 系主任(或责任教师)签名:年月日

目录 摘要 (2) ABSTRACT (3) 1.数字水印技术概述 (4) 1.1 数字水印技术提出的背景 (4) 1.2 数字水印的基本特点 (4) 1.3 数字水印的应用 (5) 1.MATLAB软件的介绍 (7) 2.1 MATLAB研究数字水印的优点 (7) 2.2 MATLAB函数介绍 (8) 3.傅立叶域水印理论基础 (10) 3.1 傅立叶变换简述 (10) 3.1.1 一维离散傅立叶变换DFT (10) 3.1.2 快速傅立叶变换 FFT (11) 3.1.3 二维离散傅立叶变换 (12) 3.2 傅立叶变换性质 (13) 3.2.1 空间域平移性 (13) 3.2.2 旋转不变性 (14) 3.2.3 比例缩放性 (14) 4.基于傅立叶域相关性检测的半盲水印 (15) 4.1 引言 (15) 4.2 基于Arnold 变换的图像置乱算法 (15) 4.3 水印算法 (17) 4.3.1 算法原理 (17) 4.3.2 算法的matlab 实现步骤 (20) 4.4 算法的matlab 实现及结果分析 (21) 5.总结与心得体会 (26) 6.参考文献 (27) 附录 (28)

信息隐藏与数字水印matlab实现

网络与信息安全专题研究题目信息隐藏与数字水印原理与matlab实现 姓名 XXX 院系信息与技术学院 年级专业 XX级计本班 指导教师 XXX 2015年6月15日

目录 第一章摘要 (2) 第二章信息隐藏原理 (3) 2.1信息隐藏技术的特点 (3) 2.1.1不可感知性 (3) 2.1.2鲁棒性 (3) 2.1.3隐藏容量 (4) 2.2数字水印的特点 (5) 2.2.1安全性: (5) 2.2.2隐蔽性: (5) 2.2.3鲁棒性: (5) 2.2.4水印容量: (5) 2.3数字水印的基本原理 (6) 第三章数字水印实现 (7) 3.1matlab实现程序 (7) 3.2水印前图片 (8) 3.3嵌入文件后的图片 (9) 3.4 RSA的MATLAB实现 第四章结语 (11) 【参考文献】 (12) 【特别致谢】 (13)

信息隐藏与数字水印原理与matlab实现 【关键词】水印技术隐藏嵌入 【内容摘要】 随着计算机应用逐渐广泛、网络技术的迅速发展,使图文、音频、视频等多媒体信息都能以数字形式传输、阅读和播放,从而使大规模非授权拷贝成为了可能,而这样会损害音乐、电影、书籍和软件等出版业的健康发展。为了保护知识产权,引发了一个很有意义的研究方向:信息隐藏。

第一章摘要 本文首先介绍了数字水印技术的原理和分类 所谓的信息隐藏是利用媒体信息普遍存在的冗余特性,将秘密信息隐藏在其他媒体信息中。其首要目标就是使加入隐藏信息后的媒体目标的质量下降,尽可能地小,使人无法觉察到隐藏的数据,或者知道它的存在,但未经授权者无法知道它的位置,并不像传统加密过的文件一样,看起来是一堆会激发非法拦截者破解机密资料动机的乱码,而是看起来和其它非机密性的一般资料无异,因而十分容易逃过非法拦截者的破解。其道理如同生物学上的保护色,巧妙地将自己伪装隐藏于环境中,免于被天敌发现而遭受攻击。被人们誉为历史学之父的古希腊历史学家希罗多德(Herodotus,486-425),在其著作中讲述了这样一则故事:一个名叫Histaieus的人筹划着与他的朋友合伙发起叛乱,里应外合,以便推翻波斯人的统治。他找来一位忠诚的奴隶,剃光其头发并把消息刺在头皮上,等到头发义长起来了,把这人派出去送“信”,最后叛乱成功了。

MATLAB程序设计基础介绍

第一讲MATLAB编程基础 随机计算技术的发展,各种各样的应用软件越来越多,比如能够支持数学计算的软件就有多种:MATLAB、Mathmatica、Scilab等。MATLAB以其强大的矩阵计算能力使它在科学计算与工程设计中更具备竞争力,MATLAB集成了众多基本的数据处理功能,可以完美支持数值与非数值运算,本小节学习基于MATLAB的基本编程语法。 1、M文件 由MATLAB语句构成的程序通常作为文件保存在后缀为.m的文件中,称为M文件,可以使用任何一种文本编辑器来编写M文件。M文件的文件名不能用汉字,也不能用数字开头,只能用英文字符开头,后缀数字等,长度可达255个字符。M文件一般有两种类型:script文件(称为正本文件)与function文件(称为函数文件)。 1.1正本文件 正本文件是由用户编写的一个包含一系列MATLAB正本的文本文件,在MATLAB工作空间的命令行提示符“>>”后敲入这个M文件的文件名就可以依次执行这个M文件中的每条语句。当需要从命令行中执行多条命令时可以使用script文件,为此你只需要将希望执行的命令逐行写入script文件中,并保存在MATLAB工作目录下。概括起来正本文件有如下特点:(1)不需要任何实参代入,也不能返回任何输出参数;(2)其中的变量作用于整个工作空间; (3)使用工作空间中的数据;(4)不需要用到任何MATLAB关键字,直接在其中写可以执行的MATLAB语句;(5)可以利用百分号作注释。(6)不能包含任何自定义函数。

例题1本例说明一个script文件。如下语句计算一些三角函数在不同弧度时的函数值,并绘制花瓣的图象。由于语句较多,不方便在命令行中一条一条地执行,现在将这些语句利用文本编辑器逐行写入一个M文件petals.m 中,则形成了一个典型的script文件,并把它保存在MATLAB工作目录下。%文件名:petals.m theta=-pi:0.01:pi;%角大小 rho(1,:)=2*sin(5*theta).^2;%第一个花瓣 rho(2,:)=cos(10*theta).^3;%第二个花瓣 rho(3,:)=sin(theta).^2;%第三个花瓣 rho(4,:)=5*cos(3.5*theta).^3;%第四个花瓣 for k=1:4 polar(theta,rho(k,:))%Graphics output pause end 在命令行提示符后敲入文件名petals,则可以执行其中的每一条语句,结果产生四幅花瓣图象,见图1。如果你在命令行中敲入whos并回车,则可以看到这个文件中的所有变量,这说明script文件中的变量作用域为整个MATLAB工作空间。

《MATLAB程序设计》复习题

《MATLAB程序设计》复习题 一填空题 1 已知A=[ 2 5 6;1 7 8];B=[1 4 3;4 7 0];写出下列各指令运行的结果。 A & B 的运行结果为[1 1 1;1 1 0] 。 A== B的运行结果为[0 0 0 ;0 1 0] 。 2 产生3阶单位阵的命令为eye(3) ;产生4阶全1方阵的命令为ones(4)。 3 A=rand(5,8);b=size(A);c=length(A);则b和c的值分别为[5,8]和8。 4 求矩阵的特征值的指令为eig 。 5符号;可以使命令行不显示运算结果,% 用来表示该行为注释行。6在线形图型格式的设置中,字符r表示什么颜色(红色) 7fix函数四舍五入对数组[3.17,5.34,8.90,2.52]取整,结果为[3 5 8 2] 。 8 P, Q分别是个多项式的系数矢量,求P对应的多项式的根,使用的命令是roots(P) 9使2个plot的图形在同一个坐标显示,使用hold on 命令进行图形保持,使用grid on 命令为图形添加网格。 10 数据拟合采用___polyfit___函数;求不定积分采用___ int ___函数。 11 A=rand(2,5);b=size(A);c=length(A);则b和c的值分别为_2 5和5__ 12已知A是矩阵,求A的对角矩阵函数是___diag(A)____,求A的下三角矩阵函数是__tril(A)____。 13条形图由函数__bar___来实现。 14已知s=‘显示“hey”’,则s的元素个数是9 二解答题 1、A=[71,3,-8; 2,-9,8; 0,4,5] B=A’

matlab数字水印算法及实现和源代码

摘要:数字水印技术作为数字媒体版权保护的有效办法,近年来在国内外引起了人们极大的兴趣。但是由于数字水印技术涉及到的知识面比较广,即使是专业人员有时也感到力不从心,那么如何选择一种有效的编程工具便成为一个亟待解决的问题。本文从数字水印技术本身的特点、一般模型和典型算法出发,简要地介绍了一种可以快速上手的高效的实用语言——Matlab。最后,作者给出一个用Matlab实现数字水印实例。 关键词:数字水印Matlab Visual C++6.0DWT DCT 1引言 作为传统加密系统的有效补充办法,从1993年Caronni正式提出数字水印到现在短短几年里,无论是在国内还是在国外对数字水印的研究都引起了人们极大的关注。但数字水印技术的发展还很不成熟,应用也处于初级阶段。在我国,知识产权问题是一个敏感的话题,只有深入开展数字水印技术的研究,尽快制定我国的版权保护水印标准,才能使我们在未来可能的国际知识产权纠纷中取得主动权。那么掌握高效的工具,便成为一个必须解决的问题。本文就针对数字水印本身的特点,介绍了一种高效的实用工具——MATLAB。 2数字水印技术 2.1数字水印技术的复杂性 数字水印技术涉及到通信理论、编码理论、噪声理论、视听觉感知理论、扩频技术(Sprea d Spectrum)、信号处理(Signal Processing)技术、数字图像处理(Digital Image Pr ocessing)技术、多媒体(Multimedia)技术、模式识别(Pattern Reorganization)技术、算法设计(Algorithm Design)等理论,用到经典的D FT(Discrete Fourier Transform)、DCT(Discrete Cosine Transform)变换和近代最先进的数学工具----小波(Wavelet)。数字水印又是一个横跨计算机科学、生理学、密码学、数字、数字通信等多门学科,并与I nternet的发展密切相关的交叉科学。数字水印的多学科性导致数字水印技术研究的难度和复杂性。所以,针对数字水印技术本身的跨学科特点,找出一种合适的编程工具,往往可以起到事半功倍的效果。下面我们从数字水印的一般模型出发,来逐步介绍MATLAB。 2.2数字水印的一般模型 数字水印的一般模型如图1所示: 频域法加入数字水印的原理是首先将原始信号(语音一维信号、图像二维信号)变换到频域,常用的变换一般有DWT、DCT、DFT、WP和分形。然后,对加入了水印信息的信号进行频域反变换(IDWT、IDCT、DFT、WP),得到含有水印信息的信号。 频域法检测水印的原理是将原始信号与待检测信号同时进行变换域变换,比较两者的区别,进行嵌入水印的逆运算,得出水印信息。如果是可读的水印,那么就此结束,如果是不可读水印,如高斯噪声,就将得出的水印与已知水印作比较,由相关性判断,待检测信号含不含水印,故水印的检测有两个结束点。 2.3数字水印技术的常用算法 数字水印算法一般可分为两种空域法和频域法,频域法有以下优点:1)嵌入的水印信号能量可以分布到空域的所有像素上,有利于保证水印的不可见性;2)视觉系统(HVS)的某些特性(如频率的掩蔽特性)可以更方便地结合到水印编码过程中;3)频域法可与国际数据压缩标准兼容,从而实现在压缩域(compressed domain)内的水印编码。所以我们也以频域法为主介绍MATLAB在数字水印技术中的使用。

MATLAB程序设计与应用

实验一 MATLAB 运算基础 第二题:已知 A=??????????7653877344-3412 B=??? ? ??????72-33021-31 求下列问题: 1) A+6*B 和A-B+I 2) A*B 和A.*B 3) A^3 A.^3 4) A/B B\A 5) [A,B] [A(1,3),:B.^2] 解: >> A=[12 34 -4;34 7 87;3 65 7]; B=[1 3 -1;2 0 3;3 -2 7]; I=[1 0 0;0 1 0;0 0 1]; (1) >> A+6*B ans = 18 52 -10 46 7 105 21 53 49 >> A-B+I ans = 12 31 -3 32 8 84 0 67 1 (2) >> A*B ans = 68 44 62 309 -72 596 154 -5 241 >> A.*B

ans = 12 102 4 68 0 261 9 -130 49 (3) >> A^3 ans = 37226 233824 48604 247370 149188 600766 78688 454142 118820 >> A.^3 ans = 1728 39304 -64 39304 343 658503 27 274625 343 (4) >> A/B ans = 16.4000 -13.6000 7.6000 35.8000 -76.2000 50.2000 67.0000 -134.0000 68.0000 >> B\A ans = 109.4000 -131.2000 322.8000 -53.0000 85.0000 -171.0000 -61.6000 89.8000 -186.2000 (5) >> [A,B] ans =

相关文档
最新文档