图像处理与学术研究

Chapter 1 图像处理基础

1.1 概念

  • 图像是视觉信息的重要表现方式,是对客观事物相似的、生动的描述,是光能量和人类大脑相结合的产物。

  • 数字图像处理(Digital Image Processing)是利用计算机对图像进行去除噪声、增强、复原
    分割、提取特征等的理论、方法和技术,是信号处理的子类,相关理论涉及通信、计算机、电子、数学、物理等多个方面,已成为一门发展迅速的综合性学科。

1.2 图像函数

  • A = imread('filename');

    filename 指定的文件读取图像,并从文件内容推断出其格式。如果 filename 为多图像文件,则 imread 读取该文件中的第一个图像。下图为图像的返回结果。

  • imshow('filename');

    在图窗中显示灰度图像 Iimshow 使用图像数据类型的默认显示范围,并优化图窗、坐标区和图像对象属性以便显示图像。

  • imwrite(A,filename);

    将图像数据 A 写入 filename 指定的文件,并从扩展名推断出文件格式。imwrite 在当前文件夹中创建新文件。输出图像的位深取决于 A 的数据类型和文件格式。对于大多数格式来说:

    • 如果 A 属于数据类型 uint8,则 imwrite 输出 8 位值。
    • 如果 A 属于数据类型 uint16 且输出文件格式支持 16 位数据(JPEG、PNG 和 TIFF),则 imwrite 将输出 16 位的值。如果输出文件格式不支持 16 位数据,则 imwrite 返回错误。
    • 如果 A 是灰度图像或者属于数据类型 doublesingle 的 RGB 彩色图像,则 imwrite 假设动态范围是 [0,1],并在将其作为 8 位值写入文件之前自动按 255 缩放数据。如果 A 中的数据是 single,则在将其写入 GIF 或 TIFF 文件之前将 A 转换为 double
    • 如果 A 属于 logical 数据类型,则 imwrite 会假定数据为二值图像并将数据写入位深为 1 的文件(如果格式允许)。BMP、PNG 或 TIFF 格式以输入数组形式接受二值图像。

    如果 A 包含索引图像数据,则应另外指定 map 输入参数。

1
2
3
%example
I_rgb = imread("1.jpg");
imwrite(I_rgb,'2.jpg');
  • I = rgb2gray('filename');

    rgb2gray 函数通过消除色调和饱和度信息,同时保留亮度,来将 RGB 图像转换为灰度图。

  • th = graythresh(I);

    使用 Otsu 方法 [1] 根据灰度图像 I 计算全局阈值 T

    [1] Otsu, N., “A Threshold Selection Method from Gray-Level Histograms.” IEEE Transactions on Systems, Man, and Cybernetics. Vol. 9, No. 1, 1979, pp. 62–66.

    Otsu 方法选择一个阈值,使阈值化的黑白像素的类内方差最小化。全局阈值 T 可与 imbinarize结合使用以将灰度图像转换为二值图像。

  • BW = im2bw(I,level);

    基于阈值将图像转换为二值图像 BW(Black and White) 。方法是将输入图像中亮度大于 level 的所有像素替换为值 1(白色),将所有其他像素替换为值 0(黑色)。

  • subplot(m,n,p)

    将当前图窗划分为 m×n 网格,并在 p 指定的位置放置图像。MATLAB 按行号对子图位置进行编号。第一个子图是第一行的第一列,第二个子图是第一行的第二列,依此类推。

1.3 图像分类

  • 灰色图像

    灰色图像使用灰度级来表示像素点的明暗程度,数值是介于 0 到 255 之间的整数。

  • 黑白图像

    黑色图像的二维矩阵中每一个点,呈现黑色0或白色1

  • 彩色图像

在这里插入图片描述

彩色图像又叫 RGB 图像,由三个m×n的二维矩阵构成,矩阵中每一个点的值是介于0 到 255 之间的整数,从前到后依次是红分量、绿分量和蓝分量。

  • 彩色图像转换到灰度图像
1
2
3
4
5
6
7
I_rgb = imread('filename_1');
I_r = I_rgb(:,:,1); % R
I_g = I_rgb(:,:,2); % G
I_b = I_rgb(:,:,3); % B
I_GRAY = 0.299*I_r + 0.587*I_g + 0.114*I_b;
imshow(I_GRAY);
imwrite(I_GRAY,'filename_2');

I_GRAY = 0.2989*I_r + 0.5870*I_g + 0.1140*I_b;三个系数和为一,心理学家发现取这三个系数更加符合人的感官。

故灰度图像到彩色图像、黑白图像到灰度图像的过程是不可逆的,过程丢失了关键的数据。

1.4 图像大小

  • 数据单位

    • 1byte (字节) = 8bit(比特/位)
    • 对于黑白图像存储每一个像素点需要1 bit,对于灰度图像这个大小是1 byte = 8 bit,而对于彩色图像这个值是3 byte。
  • 分辨率
    • 图像总像素的多少,如 640 × 480 = 307200,代表30万像素分辨率。
    • 拍摄分辨率:4K:4096 × 2160 像素,1080p:1920 × 1080 像素
  • 图像压缩:JPG是压缩后的图像数据,BMP是未压缩的。

1.5 图像格式

  • BMP

    BMP取自位图Bitmap的缩写,也称为DIB(与设备无关的位图),是一种独立于显示器位图数字图像文件格式。BMP文件通常是不压缩的,所以它们通常比同一幅图像的压缩图像文件格式要大很多。例如,一个800×600的24位几乎占据1.4MB空间。因此它们通常不适合在因特网或者其他低速或者有容量限制的介质上进行传输。

    图像通常保存的颜色深度有2(1bit)、16(4bit)、256(8bit)、65536(16bit)和1670万(24bit)种颜色(其中bit是表示每点所用的数据位)。

  • GIF

    图像互换格式(英语:Graphics Interchange Format,简称GIF)是一种位图图形文件格式,以8bit色深(即256种颜色)重现真彩色的图像。它实际上是一种压缩文档,采用LZW压缩算法进行编码,压缩率在50%左右,有效地减少了图像文件在网络上传输的时间。它是目前万维网广泛应用的网络传输图像格式之一。

  • JEPG

    JPEG或称JPG,是一种针对照片影像而广泛使用的有损压缩标准方法,以牺牲一部分图像数据达到较高的压缩率,由联合图像专家小组(英语:Joint Photographic Experts Group)开发。

    由于JPEG优良的品质,被广泛应用于互联网和数码相机领域,网站上80%的图像都采用了.JPEG压缩标准。

  • TIFF

    标签图像文件格式Tagged Image File Format,简写为TIFF)是一种灵活的位图格式,主要用来存储包括照片和艺术图在内的图像。

    TIFF最初的设计目的是为了1980年代中期桌面扫描仪厂商达成一个公用的扫描图像文件格式,而不是每个厂商使用自己专有的格式。在刚开始的时候,TIFF只是一个二值图像格式,因为当时的桌面扫描仪只能处理这种格式。随着扫描仪的功能愈来愈强大,并且桌面计算机的磁盘空间越来越大,TIFF逐渐支持灰阶图像和彩色图像。

  • PNG

    便携式网络图形(英语:Portable Network Graphics,PNG)是一种支持从LZ77派生的无损压缩算法的位图图形格式,支持索引、灰度RGB三种颜色方案以及Alpha通道等特性。PNG的开发目标是改善并取代GIF作为适合网络传输的格式而不需专利许可,所以被广泛应用于互联网及其他方面上。

Chapter 2 图像分割技术

2.1 研究背景

人脸识别、指纹识别、车牌识别

图像分割是图像处理到图像分析的关键步骤。

基于阈值的图像分割

  • 直方图法、迭代法和OTSU算法

基于区域的图像分割算法

  • 把具有某种相似性的像素连通,将图像分成很多一致性强的小区域,再按照一定规则将小区域融合成大区域,达到分割图像的目的

基于边缘检测的图像分割算法

  • 检测图像的边缘信息实现对图像的分割

基于特定理论的图像分割算法

2.2 直方图法

  • 直方图(Histogram)是在图像中像素灰度级与对应灰度级像素的二维统计关系。
2.2.1 单阈值分割法
  • 又称全局阈值法,即在整幅图中使用一个阈值

  • 整幅图像分成两个区域,即目标(黑/白色)和背景(白/黑色)

  • 对于目标和背景对比较明显的图像,其灰度直方图为双峰形状,可选择两峰之前的波谷对应的像素值作为全局阈值。

  • 对于物体和背景对不明显的图像,直方图为单峰形状,采用全局阈值法不太合适。
2.2.2 双阈值分割法

处理方法:

1
2
3
4
5
6
7
8
9
10
11
for i = 1:m
for j = 1:n
if I_gray(i,j) > 50 && I_gray(i,j) < 150
I_BW(i,j) = 1;
else
I_BW(i,j) = o;
end
end
end
figure;
imshow(I_BE);

2.2.3 多个阈值分割法
2.2.4 半阈值分割法

2.3 迭代法

迭代法是通过迭代的方法来求最佳阈值,具有一定的自适应性

  • 步骤一:

设定阈值精度参数 T ,并选取一个初始阈值 T (通常可选取图像平均灰度值)

  • 步骤二:

用阈值 T_1分割图像。将图像分成两部分:G_1由灰度值大于T_1的像素组成,G_2由灰度值小于或等于T_1的像素组成。

  • 步骤三:

计算G_1和G_2中所有像素的平均值u_1和u_2。

  • 步骤四:

计算新的阈值 T_1 = (u_1 + u_2) / 2

  • 步骤五:

如果 |T_2 - T_1| < T_0 则推出T_2为最佳阈值;否则,将T_2赋值给T_1,并重复执行步骤直到获得最佳阈值。

2.4 OSTU法

OTSU法是在1980年日本人OTSU提出的,又称为最大类间方差法。基本思想是将直方图处理分割成两组,当被分成两类的方差为最大时,决定阈值。
当对象和背景的灰度值的差异具有一定大小的时候,OTSU法是很有效的。

  • 设原始灰度图像灰度级为L,灰度级为i的像素点数为n_i,则图像的全部像素数为:
  • 归一化直方图:
  • 按灰度级用阈值 t 划分为两类:
  • 因此这两类的出现概率以及总均分值分别有下列各式:

2.5 数字识别

  • 一种古旧的算法
    • 字符轮廓定义:将数字的整体轮廓分解为顶部、底部、左侧和右侧四个方向的轮廓特征来描述。
    • 结构基元:利用轮廓一阶微分变化趋势,定义构成字符轮廓的 5 个基本基元。竖直、左斜、右斜、圆弧和突变。

Chapter 3 图像水印技术

3.1 研究背景

图像水印(Image Watermark):在不影响图像内容、价值和使用的前提下,通过一定的规则将一些身份识别信息嵌入图像内容中,并且嵌入后的图像不能被人的视觉系统察觉或注意到,只有通过专用的提取算法或检测器才能提取。

图像水印算法包括:水印生成、水印嵌入和水印检测。

  • 水印生成

伪随机序列:具有类似白噪声的性质,可以人为产生,如混沌序列,二维条形码。

有特定含义的水印信息:具有特定含义的字符串或图像。

  • 水印嵌入

空间域算法频域算法,后者是主流。

水印嵌入前,宿主图像需要通过 DCT 和 DWT 等变换从空域变换到频域。

  • 水印检测

水印检测是水印嵌入的逆过程。

明检测:在提取水印的过程中需要提供宿主图像。

盲检测:在提取水印的过程中不需要宿主图像。该算法是主流,操作方便,实用性强。

3.2 LSB算法

最低有效位(Least Significant Bit, LSB),LSB算法是一种经典的时空域水印算法。

原理:利用像素值的 8 个比特位对像素值贡献的差异,将水印信息嵌入到像素值的最后 5-8 个位平面。

PNG文件中的图像像素数一般由RGB三基色(红、绿、蓝)组成。每种颜色占8位,取值范围从0x000xFF,即有 256 种颜色,共包含 256 的三次方。因此总共有 16777216 种颜色。

人眼可以区分大约 1000 万种不同的颜色,这意味着人眼无法区分剩下的 600 万种颜色。LSB隐写是修改 RGB 颜色分量的最低二进制位(LSB),每种颜色会有 8 位,LSB 隐写是修改像素数中的最低位,这种变化前后人眼是不会注意到的,每个像素可以携带 3 位信息。

Example

PicoCTF_2017: Little School Bus

Description:

Can you help me find the data in this Little-School-Bus?

Hint:

Look at least significant bit encoding!!

Solution

As the Hint suggests the problem is related to LSB Encoding, The leftmost digit in binary is called the LSB digit

As mentioned earlier LSB encoding is done by changing the LSB bit of the colour, however, this slight variation is not noticeable. Thus by changing the LSB bit, we can hide data inside a file.

xxd -b ./littleschoolbus.bmp | head -n 20

Gives,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
00000000: 01000010 01001101 11100010 01001011 00000010 00000000  BM.K..
00000006: 00000000 00000000 00000000 00000000 00110110 00000000 ....6.
0000000c: 00000000 00000000 00101000 00000000 00000000 00000000 ..(...
00000012: 11111100 00000000 00000000 00000000 11000111 00000000 ......
00000018: 00000000 00000000 00000001 00000000 00011000 00000000 ......
0000001e: 00000000 00000000 00000000 00000000 10101100 01001011 .....K
00000024: 00000010 00000000 00000000 00000000 00000000 00000000 ......
0000002a: 00000000 00000000 00000000 00000000 00000000 00000000 ......
00000030: 00000000 00000000 00000000 00000000 00000000 00000000 ......
00000036: 11111110 11111111 11111111 11111110 11111110 11111111 ......
0000003c: 11111111 11111110 11111110 11111111 11111111 11111110 ......
00000042: 11111111 11111111 11111110 11111110 11111110 11111111 ......
00000048: 11111111 11111110 11111110 11111110 11111110 11111111 ......
0000004e: 11111110 11111111 11111111 11111110 11111110 11111111 ......
00000054: 11111111 11111111 11111110 11111111 11111111 11111111 ......
0000005a: 11111111 11111110 11111111 11111111 11111110 11111111 ......
00000060: 11111111 11111111 11111110 11111110 11111111 11111110 ......
00000066: 11111110 11111111 11111111 11111110 11111110 11111111 ......
0000006c: 11111110 11111111 11111110 11111111 11111111 11111110 ......
00000072: 11111111 11111111 11111110 11111111 11111110 11111111 ......

Taking the LSB bit after the many zero,
1
2
3
4
00000036: 11111110 11111111 11111111 11111110 11111110 11111111  ......
0000003c: 11111111 11111110 11111110 11111111 11111111 11111110 ......
00000042: 11111111 11111111 11111110 11111110 11111110 11111111 ......
00000048: 11111111 11111110 11111110 11111110 11111110 11111111 ......

8 bit gives

01100110 01101100

Which in ascii is fl?
Now we script ,

1
2
3
4
5
6
7
8
binary_data = open("littleschoolbus.bmp","rb") # Open the file binary mode
binary_data.seek(54) #seek to 54 bytes these bytes does not contain any data
data = binary_data.read() # read the binary data
l = []
for i in data:
l.append(bin(i)[-1]) #make a list of LSB bit
for i in range(0,500,8):
print(chr(int(''.join(l[i:i+8]),2)),end='') # print the character

Which gives the flag !!
flag{remember_kids_protect_your_headers_afb3}

3.3 DCT算法

  1. 对宿主图像分割成$8*8$的小图像块
  2. 对$8*8$的小块进行 DCT 变换,得系数 B
  3. 对处理后的DCT系数,进行DCT逆变换,得$8*8$的小图像块
  4. 对$8*8$的小块进行组合,得含水印图像

3.4 Secure spread spectrum watermarking for multimedia

I. J. Cox, J. Kilian, F. T. Leighton and T. Shamoon, “Secure spread spectrum watermarking for multimedia,” in IEEE Transactions on Image Processing, vol. 6, no. 12, pp. 1673-1687, Dec. 1997, doi: 10.1109/83.650120.

1997年,Ingemar J. Cox等人首次提出了扩频(Spread Spectrum,SS)水印算法, 按照嵌入规则不同, 分为:

  1. 加性扩频(Additive Spread Spectrum,ASS)水印算法
  2. 乘性扩频(Multiplicative Spread Spectrum,MSS)水印算法

3.5 评价指标

  1. 透明性

    • 客观评价 峰值信噪比
    • Peak Signal-to-Noise Ratio, PSNR
    • 它是定量客观地评价水印算法透明性的指标
    • 它反映了水印嵌入前后图像整体的改变程度
    • PSNR 越小,则表示图像的质量下降越多
    • PSNR 越大,说明水印算法的透明性越好

定义

为衡量嵌入水印图像和原始图像之间的差别,定义峰值信噪比为:

$X$是宿主图像, $X_{W}$是含水印图像, 保证$PSNR>38 dB$,是水印透明性基本要求

  1. 鲁棒性

当含水印图像在经过常规信号处理操作后能够检测出水印的能力。常规操作包括空间滤波、JPEG压缩、剪切攻击、打印与复印、几何变形和噪声攻击等

  1. 安全性

安全性指水印能够抵抗各种破坏水印功能的行为的能力,即未授权者不能去除、嵌入和检测水印

同时,水印信息应该很难被他人所复制和伪造

  1. 嵌入容量

指在一幅图像中能够嵌入水印的数据量

Chapter 4 图像加密技术

4.1 基于现代密码体制的图像加密

Wikipedia

密码学(英语:Cryptography)可分为古典密码学和现代密码学

1
2
3
4
5
6
7
8
9
现代密码学大致可被区分为数个领域。对称金钥密码学指的是传送方与接收方都拥有相同的金钥。直到1976年这都还是唯一的公开加密法。

现代密码学重视区块加密法与串流加密法的研究及应用。区块加密法在某种意义上是阿伯提的多字元加密法的现代化。区块加密法取用明文的一个区块和金钥,输出相同大小的密文区块。由于讯息通常比单一区块还长,因此有了各种方式将连续的区块编织在一起。DES和AES是美国联邦政府核定的区块加密法标准(AES将取代DES)。尽管将从标准上废除,DES依然很流行(三重资料加密演算法变形仍然相当安全),被使用在非常多的应用上,从自动交易机、电子邮件到远端存取。也有许多其他的区块加密被发明、释出,品质与应用上各有不同,其中不乏被破解者。

串流加密法,相对于区块加密,制造一段任意长的金钥原料,与明文依位元或字元结合,有点类似一次一密密码本(one-time pad)。输出的串流根据加密时的内部状态而定。在一些串流加密法上由金钥控制状态的变化。RC4是相当有名的串流加密法。

密码杂凑函式(有时称作讯息摘要函式,杂凑函式又称杂凑函式或杂凑函式(Hash))不一定使用到金钥,但和许多重要的密码演算法相关。它将输入资料(通常是一整份档案)输出成较短的固定长度杂凑值,这个过程是单向的,逆向操作难以完成,而且碰撞(两个不同的输入产生相同的杂凑值)发生的机率非常小。

讯息认证码或押码(Message authentication codes, MACs)很类似密码杂凑函式,除了接收方额外使用秘密金钥来认证杂凑值。

Analysis

该方法的安全性体现在

  • 破译的成本超过加密信息的价值
  • 破译的时间超过该信息有用的生命周期

4.2 基于矩阵变换的图像加密

基本原理

对图像矩阵进行有限次的初等矩阵变换,可有效地打乱输入明文的次序,进而有效地掩盖明文信息,达到加密的目的

Arnoldi iteration

  • Arnold矩阵变换的基本思路,将原图像中的点从(x,y)移动到(x’,y’)从而实现了对图像中像素点的移动

  • 用Arnold变换算法对图像中所有的像素点进行处理,就完成了一次图像的Arnold变换

  • Arnold 变换具有周期性

  • 在网络平台下,图像传输涉及到接收(Bob)、发送(Alice)双方

Analysis

  • 算法简单,易于实现,具有周期性
  • 算法仅置乱像素位置,未改变像素值,所以置乱前后图像的直方图无改变,难以抵制统计攻击
  • 矩阵变换的周期往往较短,该类算法的密钥空间小,无法抵制密钥穷尽攻击
  • 在设计算法时,要把图像矩阵变换和其它加密手段有效地结合,在置乱像素位置的同时,进一步改变像素值

4.3 基于混沌的图像加密

基本原理

  • 混沌是某些非线性系统出现的一种无法精确重复的、貌似随机的运动的现象
  • 混沌理论、相对论和量子力学一起被称为20世纪物理学的三大的革命
  • 混沌具有初值和参数敏感性、类随机性、非周期性和不可预测性等特征

算法原理:通常把混沌系统的初始值和参数视为密钥,利用密钥和混沌系统产生实数混沌序列,并量化为整数混沌序列。将其与原始图像以某种可逆的规则相互作用,实现对图像的加密

常用混沌系统

  • Logistic映射
  • Tent映射

4.4 基于频域的图像加密

基本原理

  • 按照加密对象不同,图像加密算法可分为空间域加密和变换域加密,它们的加密对象分别为像素和变换系数
  • 利用离散余弦变换(DCT)、小波变换(DWT)等变换可实现图像空间域和变换域之间的转换
  • DCT和DWT变换具有低频功率集中、高频功率较小的特性

4.5 基于DNA编码的图像加密

基本原理

图像DNA编码时,A编码为00,T编码为01,C编码为10,G编码为11。这种编码组合总共有24个,不过符合$Watson-Crick-Rules$的编码对目前只有8种。

流程:
在经典框架中,融入DNA编码和DNA运算
算法流程1:原始图像→DNA编码→DNA码置乱→DNA运算→DNA解码→加密图像
算法流程2:原始图像→像素置乱→ DNA编码→DNA运算→DNA解码→加密图像
算法流程3:原始图像→DNA编码→DNA码置乱→DNA解码→像素扩散→加密图像

4.6 评价指标

密钥空间

密钥空间是指密钥所有可能的取值范围。一个好密码算法的密钥空间应该足够大,以抵抗穷举攻击。目前,密码学界公认密码空间小于$2^{100}$是不安全的

像素相关性

图像的重要特征是相邻像素高度相关,特别是8个相邻域的像素。像素相关性指标可反映图像置乱的程度。相邻像素的相关性越大,置乱效果越差,反之置乱效果越好

明文敏感性

为抵制差分攻击,一个好的图像加密算法应该具有很少比特的原始图像改变将影响尽可能多的加密图像的性质

直方图

一个好的图像加密算法,其加密图像的直方图分布十分均匀

密钥敏感性

密钥敏感性指加密密钥的微小变化,将产生两幅完全不同的加密图像,或者解密密钥的微小变化,将导致无法正确解密

信息熵

最理想的加密图像是一个完全随机的图像,即每个灰度级都等概率出现,此时信息熵为8。因此,当加密图像的信息熵接近8时,表明加密算法具备足够安全地抵制统计攻击的能力

加密效率

加密耗时不仅跟图像大小有关系,而且还与程序具体的运行环境(硬件环境,如内存和硬盘大小、CPU主频;软件环境,如系统正在运行的进程数目,采用的编程语言)密切相关

Chapter 5 中文科技论文检索

5.1 中国知网

  • CNKI
  • www.cnki.net
5.1.1 检索方法
  • 一框式检索
    • 多个检索词需要使用符合运算
    • $\times$, $+$, $-$分别表示与或非逻辑运算
    • 复合运算符与前后两个之间需加空格
    • 在检索结果中搜索使用“在结果中检索”
  • 高级检索
  • 专业检索

    • 按照特定语法,将检索字段和检索词构成一个检索式进行检索的方式

    • 检索字段:

      SU=主题,TI=题名,KY=关键词, AB=摘要FT=全文,AU=作者,FI=第一责任人,RP=通讯作者,AF=机构, JN=文献来源RF=参考文献,YE=年,FU=基金,CLC=分类号,SN=ISSN,CN=统一刊号,IB=ISBN,CF=被引频次

    • 匹配运算符

    • 比较运算符

  • 句子检索

    • 在全文范围内的同一句和同一段话中进行检索,句子检索不支持空检

5.2 万方维普

  • Wanfang Data Knowledge Service Platform
  • www.wanfangdata.com.cn
5.2.1 检索方法
  • 一框式检索

  • 高级检索