数安实验1—图像处理基础
实验1:图像处理基础及数字水印软件认识实验
1. 实验类别
设计型实验:熟悉matlab在多媒体内容特别是图像处理方面的操作,并给出实验结果。
2. 实验目的
了解matlab有关图像的基本操作,如图像的读写,显示等。掌握二维DFT变换、离散余弦变换及其物理意义。
了解数字水印的原理,体验一些典型的数字水印软件,完成基于Bmp图像、Wav音频文件的水印嵌入和提取。
3. 实验条件
- Windows等操作系统;
- Matlab软件;
- 图像库;
- 音频文件。
4. 实验原理
点击查看
Matlab是广泛使用的一种可视化科学计算软件,它具有语法结构简单、数值计算高效、图形功能完备和图像处理方便的特点,是信号处理和信息隐藏处理中使用最多的软件。离散傅里叶变换、离散余弦变换和离散小波变换是图像、音视频信号处理的基础操作。时域信号转换到不同变换域以后,会导致不同程度的能量集中。自然形式下的图像是不能直接由计算机进行分析的,一幅图像在用计算机分析前必须先转化为数字形式。一幅二维平面图像可用一个二元函数I=f(x,y)来表示,(x,y)表示二维空间坐标系中的一个坐标点的位置,f表示相应实际物体在该点的某个性质的度量值,所有点的度量值的有序集合构成图像I。例如,对于一幅灰度图像,f表示灰度值,即相应物体在每个坐标点的明暗程度。一般认为,I=f(x,y)所表示的图像是连续的。为了能用计算机对图像处理,则将f,x,y的值域从实数域映射到整数域,离散化之后即为数字图像。离散化的方法就是从水平和垂直两个方向上同时进行采样,这些采样点称为像素。因此,可以用一个数字阵列来表示一幅图像。像素是构成图像的最小基本单位,图像的像素有两个基本的属性:像素位置和像素值两个属性。像素位置由像素所在的行和列的坐标值决定,即(x,y);像素值即该像素对应的亮度值。
根据像素值的取值可以分为二值图像、灰度图、彩色图。二值图即黑白图,每个像素值取两个离散值(0或1)中的一个,0表示黑色,1表示白色。灰度图是包含灰度级的图像,灰度即亮度,一般用一个字节来表示,即灰度值的取值范围为0-255(0为黑色,255为白色,中间为灰色)。对于彩色图片,一个像素都用R、G、B三个分量来表示,每个分量都有256个亮度级,所以每个像素需要用3个字节来表示。因此,一个彩色图像可表示为I=f(x,y,z)(z=1时表示R分量,z=2时表示G分量,z=3时表示B分量)。
5. 实验要求
5.1.Matlab图像读取操作
熟悉MATLAB语言中对图像数据读取,显示等基本函数。特别需要熟悉下列命令:熟悉imread()函数、imwrite()函数、size()函数、Subplot()函数、Figure()函数。
将文件夹中的lena_256.tiff图像文件读出。用到imread,imfinfo等函数,观察一下图像数据,了解一下数字图像在MATLAB中的处理就是处理一个矩阵。将这个图像显示出来(用imshow)。将新图像存储成bmp, png格式并显示出来(imwrite)
1
2
3
4
5
6
7img = imread('lena_256.tiff');%读取
info = imfinfo('lena_256.tiff');%img详细信息
imshow(img)%窗口展示
imwrite(img,'../图片自操/lena_256.bmp')%相应位置将img存储为bmp格式
imwrite(img,'../图片自操/lena_256.png')%相应位置将img存储为png格式
imshow('../图片自操/lena_256.bmp')
imshow('../图片自操/lena_256.png')
将文件夹中的lena.bmp图像文件读出,用rgb2gray()将其转化为灰度图像,在同一窗口显示原图像与灰度图像。并在同一窗口输出原图像及R, G, B三个分量图像。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16figure('NumberTitle', 'off', 'Name', '图像变换:灰度图即RGB分量')
img_bmp = imread('lena.bmp');
img_gray = rgb2gray(img_bmp);
img_R = img_bmp(:,:,1);%红色分量
img_G = img_bmp(:,:,2);%绿色分量
img_B = img_bmp(:,:,3);%蓝色分量
imwrite(img_gray,'../图片自操/img_gray.bmp');
imwrite(img_R,'../图片自操/img_R.bmp');
imwrite(img_G,'../图片自操/img_G.bmp');
imwrite(img_B,'../图片自操/img_B.bmp');
%subplot(231)表示窗口分为2行3列第1格中
subplot(231),imshow(img_bmp),title('原图');
subplot(232),imshow(img_gray),title('灰度图');
subplot(233),imshow(img_R),title('R分量');
subplot(234),imshow(img_G),title('G分量');
subplot(235),imshow(img_B),title('B分量');读取两幅图像,进行加,减,乘,除运算,并显示原图像与运算结果。
ADD=imadd(I1,I2); %两个图像相加
SUB=imsubtract(I1,I2);%两个图像相减
MUL=immultiply(I1,I1);%两个图像相乘
DIV=imdivide(I1,I2);%两个图像相除
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19figure('NumberTitle', 'off', 'Name', '图像变换:四则运算 ')
%读取
M = imread('lena_256.tiff');
N = imread('gold_contrast.tiff');
%图之间做运算需要有相同分辨率
M = imresize(M,[256,256]);
N = imresize(N,[256,256]);
%运算
ADD= imadd(M,N);%两个图像相加
SUB=imsubtract(M,N);%两个图像相减
MUL=immultiply(M,N);%两个图像相乘
DIV=imdivide(M,N);%两个图像相除
%窗口
subplot(321),imshow(M),title('原图1');
subplot(322),imshow(N),title('原图2');
subplot(323),imshow(ADD),title('加');
subplot(324),imshow(SUB),title('减');
subplot(325),imshow(MUL),title('乘');
subplot(326),imshow(DIV),title('除');把灰度图转换为二值图,取阈值为0.7、0.5、0.4、0.2将lena_256.tiff图像转换为二值图像,并在同一窗口输出原图像及对应二值图。I2 = im2bw(I1, 0.5);%I1为原图,0.5为阈值,I2为转换后的二值图。
1
2
3
4
5
6
7
8
9
10
11
12
13
14figure('NumberTitle', 'off', 'Name', '图像变换:二值图 ')
%读取
I1 = imread('lena_256.tiff');
%生成二值图
I7 = im2bw(I1,0.7);
I5 = im2bw(I1,0.5);
I4 = im2bw(I1,0.4);
I2 = im2bw(I1,0.2);
%窗口
subplot(231),imshow(I1),title('灰度图');
subplot(232),imshow(I7),title('阈值为0.7的二值图');
subplot(233),imshow(I5),title('阈值为0.5的二值图');
subplot(234),imshow(I4),title('阈值为0.4的二值图');
subplot(235),imshow(I2),title('阈值为0.2的二值图');灰度直方图描述了一副图像的灰度级统计信息。从数学角度来说,图像直方图描述图像各个灰度级的统计特性,它是图像灰度值的函数,统计一幅图像中各个灰度级出现的次数或概率。给出lena_256.tiff图像的灰度直方图。
1
2
3
4
5
6
7
8figure('NumberTitle', 'off', 'Name', '图像变换:灰度直方图 ')
%读取
I1 = imread('lena_256.tiff');
%计算直方图
I1_hist=imhist(I1);
%窗口
subplot(121),imshow(I1);
subplot(122),bar(I1_hist);
5.2.Matlab图像变换操作
在Matlab workspace中生成一幅大小为512×512像素的8位灰度图, 背景为黑色,中心有一个宽40像素高20像素的白色矩形。如下图所示:
将这幅图像保存为文件test.bmp。
从文件test.bmp中读出图像到变量I。
在Matlab图形界面中显示变量I所代表的图像。
对I分别作二维DFT变换,结果保存到变量F。注意将频域原点调整至中心位置。fftshift
将傅立叶频谱,即|F|的取值范围调整为0-255并显示。abs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20figure('NumberTitle', 'off', 'Name', 'Matlab图像变换操作 ');
%零矩阵
array = zeros(512,512);
%按照x,y要求给中间赋值为255,即为白色
array(256-10:256+10,256-20:256+20)=255;
%图像矩阵的归一化操作,每个元素在0,1之间
img = mat2gray(array);
%保存,读取到I,显示变量I
imwrite(img,'../图片自操/test.bmp');
I = imread('../图片自操/test.bmp');
subplot(221),imshow(I),title('变量I的图像');
%对I分别作DFT变换
F = fft2(I);
%将变换的原点移动到频域矩阵的中心
F = fftshift(F);
%将傅立叶频谱,即|F|的取值范围调整为0-255并显示
subplot(222),imshow(log(abs(F)),[1,10]),title('傅立叶频谱');
%三维
subplot(223),mesh(abs(F));
subplot(224),imshow(I);对频谱图的物理意义作简要说明。
图像的频率是表征图像中灰度变化剧烈程度的指标,是灰度在平面空间上的梯度。傅里叶频谱图上看到的明暗不一的亮点,实际上图像上某一点与邻域点差异的强弱,即梯度的大小,也即该点的频率大小(可以这么理解,图像中的低频部分指低梯度的点,高频部分相反)。一般来讲,梯度大则该点的亮度强,否则该点亮度弱。这样通过观察傅里叶变换后的频谱图,也叫功率图,首先就可以看出图像的能量分布,如果频谱图中暗的点数更多,那么实际图像是比较柔和的(因为各点与邻域差异都不大,梯度相对较小),反之,如果频谱图中亮的点数多,那么实际图像一定是尖锐的,边界分明且边界两边像素差异较大的。对频谱移频到原点以后,可以看出图像的频率分布是以原点为圆心,对称分布的。变换之后的图像在原点平移之前四角是低频,最亮,平移之后中间部分是低频,最亮,亮度大说明低频的能量大(幅角比较大)。
5.3.Matlab图像变换操作
使用离散傅里叶变换、离散余弦变换对lena_256.tiff图像进行操作(dct2、idct2),观察这些变换的结果。将离散余弦变换后的图像只保留前40*40子矩阵,其余子矩阵赋值为0,在此基础上执行离散余弦逆变换得到压缩后的图,在同一窗口中将原图与压缩后的图显示出来,观察结果。
1 | figure('NumberTitle', 'off', 'Name', 'Matlab图像变换操作5.3 '); |
5.4.数字水印软件Hide4Pgp
水印嵌入
在cmd命令窗口下输入命令
Hide4PGP datafile secretfile
。其中:datafile为载体文件,可以为bmp图片、wav音频。secretfile 为水印信息文件,可以为任意文件。水印提取
在cmd命令窗口下输入命令
Hide4PGP –x datafile secretfile
。其中:datafile为嵌入水印后的载体文件。secretfile 为提取出水印的保存文件。结果验证
验证在水印嵌入后,原载体文件在视觉和听觉上是否发生了变化。验证在水印提取后,提取出的水印是否正确。
图片操作:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15Users>cd C:\Users\86159\Desktop\学习\4-数字内容安全实验\实验一\H4PGP20W
H4PGP20W>Hide4PGP 1.bmp secret.txt
Hide4PGP v2.0 - hides secret files in BMP/WAV/VOC
(c) 1996-2000 by Heinz Repp
Bitmap format <Windows 3.x> detected, True Color (16.7 Mio colors).
Steganographic operation finished.
H4PGP20W>Hide4PGP -x 1.bmp out_secret_pic.txt
Hide4PGP v2.0 - hides secret files in BMP/WAV/VOC
(c) 1996-2000 by Heinz Repp
Bitmap format <Windows 3.x> detected, True Color (16.7 Mio colors).
Steganographic operation finished.软件目录下查到生成txt内容:
视频操作:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17Users>cd C:\Users\86159\Desktop\学习\4-数字内容安全实验\实验一\H4PGP20W
H4PGP20W>Hide4PGP 北京邮电大学Hide4PGP 北京邮电大学线上考试考场规则-宣传部录音版.wav secret.txt
Hide4PGP v2.0 - hides secret files in BMP/WAV/VOC
(c) 1996-2000 by Heinz Repp
Microsoft RIFF / subtype WAVE format detected.
Sample resolution: 16 bit.
Steganographic operation finished.
H4PGP20W>Hide4PGP -x 北京邮电大学线上考试考场规则-宣传部录音版.wav out_secret_wav.txt
Hide4PGP v2.0 - hides secret files in BMP/WAV/VOC
(c) 1996-2000 by Heinz Repp
Microsoft RIFF / subtype WAVE format detected.
Sample resolution: 16 bit.
Steganographic operation finished.软件目录下查到生成txt内容:
6.可选实验:离散小波变换
使用离散小波变换对lena_256.tiff图像进行操作,观察变换的结果。[cA1, cH1, cV1, cD1] = dwt2(I, 'bior3.7');
说明:dwt2函数对输入参数进行二维一级离散小波变换并返回近似分量,水平细节分量,垂直细节分量和对角线细节分量。
二维离散小波逆变换,在命令行中输入下述命令:xsync = uint8(idwt2(cA1, cH1, cV1, cD1, 'bior3.7'));
说明:idwt2函数对输入参数进行二维离散小波逆变换并返回其系数。可以尝试仅使用近似分量,水平细节分量,垂直细节分量或对角线细节分量重构图像。
1 | figure('NumberTitle', 'off', 'Name', '离散小波变换 '); |
鸣谢❀参考大佬文章
感谢波波,锋锋,轩轩的订正。