陈 青,宗偲琦
(上海理工大学 光电信息与计算机工程学院,上海 200093)
近几年来,网络系统的迅速发展使得医学图像的传播交流越来越便捷.与此同时也带来了许多的隐患.不法分子可能会窃取或破坏完整的图像以获取不正当的利益,这对医学图像的完整性、机密性和真实性[1]造成了很大的影响.为了使的众多医学数字图像能够符合医学数字影像和通讯(DICOM)标准[2],许多科学有效的方案相继被提出,而数字图像水印是其中最有效的方法之一.为了能让医学数字图像能够在网络上安全地传输,人们根据数字水印的标准提出了许多数字水印方案.这些标准包括不可见性和鲁棒性等.除此之外,更专业的数字水印还要求能够帮助判断和定位图像被篡改的区域[3],如脆弱水印[4]等.水印要求越高,所用的算法计算难度就越高.除此之外,对医学图像的感兴趣区域(ROI)划分有助于帮助医师判别病情,同时也有助于医学水印信息的划分[5].现有的一些医学图像数字水印算法由于需要预处理或是繁琐的计算过程并不适用于批量处理图像数据.
目前常见的ROI自动划分方法包括模板定位法和纹理分析法.ShunZhang[6]等人通过计算图像上物体的面积,将最大面积标记为ROI并腐蚀出ROI形状作为模板,在接收端通过将模板与图像相乘达到自动选取ROI的目的.该方法仅适用于图案紧凑、纹理简单的医学图像,且ROI模板需另行存储,对文件传输带来一定负担.N.Aherrahrou[7]等人使用局部差分法(PDE)、DWT和DFT方法将医学图像分为结构区、纹理区和噪声区,计算出医学图像纹理最为复杂的区域并将其设为ROI.该方法适用于纹理分布集中且变化明显的医学图像,但
计算方法较为复杂.在选择水印嵌入方案时,针对医学图像要求水印嵌入方案可逆、对原图质量影响小,结合水印的鲁棒性和不可见性等要求,现有的数字水印嵌入算法一般选择将水印嵌入至变换域中,以此来提高水印的隐蔽性和抗攻击能力.小波变换(WT)、离散余弦变换(DCT)等频域变换一直都是研究的热点,而轮廓波(Contourlet)变换[8]由于具有良好的方向性和各向异性[9]而被认为是能够完整描述图像特性的变换方法.此外,由于图像在轮廓域经过多次分解可以得到一个逼近子图和多个带通方向子带,这就为水印的嵌入位置带来多种选择方式,一定程度上扩展了数字水印的负载能力.
本文将提出一种基于特征值提取的医学图像双水印算法.该算法利用Harris角点法[10]从图像中提取出特征值信息,利用其中最稳定的特征点坐标定位图像ROI区域,实现接收端自动选取ROI的功能.病人信息和从ROI提取出的特征点像素值经过压缩编码后将以二进制的形式嵌入至轮廓波分解后的RONI中频子带和高频子带中.选取认证水印,将ROI图像经过轮廓波分解后,使用SVD奇异值分解法[11]将水印嵌入到ROI区域的逼近子图内完成图像版权认证.通过验证接收端得到图像和原图特征点匹配程度可以鉴别图像是否遭到篡改.本文在大量实验基础上选定合适的特征值数量值,并选取最稳定的特征值以保证在接收端对特征区域的提取与原图特征区域提取相匹配.结合轮廓波分解和SVD奇异值分解的优点,保证了水印的不可见性和鲁棒性.实验结果表明该方法操作简单,对原图影响小,篡改探测精确度高.
Contourlet变换,又称轮廓波变换,是由Do和Vetterli首先提出的一种多尺度、多方向的信号表示方法[12].轮廓波分解具有很好的方向性和各向异性,能准确地将图像的边缘捕获到不同尺度、不同方向的子带中[13],因此能够很好地满足医学图像处理要求.图像经过轮廓波分解时,首先由拉普拉斯金字塔滤波器(Laplasse Pyramid,LP)分解出低频逼近子图,描述图像大致轮廓,再经过方向滤波器组(Directional Filter Bank,DFB)分解出方向子带,用于描述图像细节信息[14].轮廓波变换过程如图1所示.图像经过一次轮廓波分解后可以得到一个低频逼近子图、一个中频子图以及两个高频方向子带,可根据水印特性选择不同的子带进行嵌入.
图1 轮廓波分解示意图Fig.1 Contourlet transform
本文使用Harris角点法提取医学图像特征点.角点包括局部窗口移动变化较大的点和局部曲率突变的图像点两类[15].医学图像特征点主要分布于图案交界处以及纹理复杂区域,这些区域通常聚集着图像关键信息.一张图像角点有多个,本算法需要提取出特征点用于ROI定位,因此要求筛选出具有很高的重复检测率,以及对噪声和攻击具有鲁棒性的角点作为特征点.检测算法的步骤如下:
1) 对原图分别进行X和Y方向上的高斯滤波.此步骤目的为改进Harris角点法的精度.对滤波后的像素矩阵求解其自相关矩阵,再次进行高斯滤波,得到由经过两次滤波后的像素值组成的矩阵M.
2) 构建与原图尺寸大小一致的零矩阵用于存放计算出的权值R(i,j).R(i,j)的计算公式为
R(i,j)=det(M)-k×(tr(M))2
(1)
矩阵R中最大像素值为Rmax,阈值T的计算公式为T=0.08Rmax,其中0.08为经过多次实验后得到的经验常数.当R(i,j)>T时则判定该位置为一个候选角点.
3) 对初步计算出的角点进行局部非极大值抑制计算(NMS)[16].
4) 去掉图像边缘处的角点.
5) 将图像划分为8×8的小块,对每个子块进行编号并记录每个子块的中心点坐标.
6) 根据子块中心点位置与图像中心点的距离和每个子块内角点的数量对每个子块进行排序,选取距图像中心最近的且角点数量最多的N个子块作为特征块用于ROI的定位.子块的数量N由水印图像大小来决定.
7) 划定ROI区域,该区域需包含所有选定的子块,因此分别计算每个子块中心点横坐标、纵坐标与图像中心点横、纵坐标的差值,取其中最大值M作为ROI区域长宽值,得到大小为M×M的正方形ROI区域.接收端可通过重新检测特征角点步骤重新获取ROI.具体ROI选取步骤如下:
a) N个特征块坐标分别为(r1,l1), (r2,l2),…,(rn,ln),图像中心点坐标为O(o1,o2),计算R=(r1-o1,r2-o1,…rn-o1),L=(l1-o2,l2-o2,…ln-o2)和差值绝对值R′=(|r1-o1|,|r2-o1|,…|rn-o1|), L′=(|l1-o2|,|l2-o2|,…|ln-o2|).
b) 将R和L中元素按从大到小排序,计算两个数组中最大元素与最小元素的差值r和l. 比较两者大小,取M=max(r,l).
c) 将R′和 L′元素从大到小排列,分别取与中心点横坐标和纵坐标差值最大的横坐标rm和lm,若rm-o1>0,则取横坐标从rm至rm±M,纵坐标lm±M(rm-o1和lm-o2大于0时取-,小于0时取+)的所有坐标点的像素值构成ROI区域图像矩阵IR.
水印内容包含用于鉴别篡改的ROI信息、病人信息和版权认证信息.从ROI 提取出的稳定特征点将作为鉴别篡改的依据.认证水印为二值图像.详细步骤如下:
2) 选取认证水印图像IA,图像尺寸为N1×N2.对IA进行k次Arnold置乱[17].
4) 计算Qij=round(S(1,1)∕q),round为四舍五入运算,q为可调节的水印嵌入强度系数,计算Ti=mod(Q+wi,j,2),其中wi,j为水印像素值,再根据以下公式计算嵌入水印后的奇异值
(2)
6) 从原图RONI部分选取M×M尺寸的区域IN,记录区域所在位置.对IN进行一次轮廓波变换,得到逼近子图、中频子带IN1和高频子带IN2.
8) 将嵌入水印后的RONI和ROI重新拼合,得到嵌入水印后的图像.
图2 特征块的选取及ROI和RONI的划分Fig.2 Characteristic blocks and dividing ROI
特征块和ROI选取如图2所示.整体方案流程见图3.
在水印提取之前先要对嵌入水印的图像进行特征值提取,还原ROI和RONI的划分.水印提取即为水印嵌入的逆过程,具体步骤如下:
(3)
4) 定位RONI水印嵌入位置IN,对其进行一次轮廓波变换,使用步骤3和步骤4中的方法从中频和高频子带中提取出病人信息和ROI特征值.
图3 水印嵌入流程图Fig.3 Flow chart of watermark embedding
本文提出的算法以Matlab2016为运行平台,实验需验证特征点提取稳定性能、嵌入水印后图像PSNR值以及篡改检测性能.实验选取了临床上常见的医学CT扫描图像为载体图像,认证水印图像为64×64二值图像并经过Arnold置乱,嵌入到经过轮廓波分解后的ROI低频子图内.同时将病人信息嵌入RONI中频子带,选取30个特征点嵌入RONI高频子带区域用于鉴别篡改.当特征点匹配率小于90%时即认为图像遭到篡改.原图像及嵌入水印图像如图4所示.
图4 原始图像、水印图像及嵌入水印后的图像Fig.4 Original images,watermark image, watermark-embedded images
根据PSNR值计算公式
(4)
对三张嵌入水印的图像进行PSNR值计算,值分别为42.43db,43.82db,43.98db,可见水印嵌入对原图影响不大.对嵌入水印后的图像进行添加噪声、JEPG压缩、剪切等常见攻击,在接收端仍然可以提取出水印信息.未受攻击和遭到攻击时提取水印实验结果如图5所示,提取的水印NC值实验结果如表1所示.由实验结果可见水印具有较好的鲁棒性.
图5 未受攻击和遭到攻击时提取的水印图像
Fig.5 Extracted watermark images without and under attack
验证特征点的稳定性,实验对多组原始图像和嵌入水印后图像进行特征值提取,将两者结果进行比对,考虑到存在噪声的情况,设定两者像素差值小于10%即认为两者相匹配.实验结果如表2所示.可见在没有遭受攻击的情况下,两者特征点匹配率均大于92%.
表1 水印算法鲁棒性实验结果
表2 篡改鉴别实验结果
本文算法通过对医学图像特征值的提取,完成了ROI区域自动选择和篡改鉴别.实验数据表明,该算法提取特征点准确、特征点重复检测率高,且不需要复杂的图像预处理程序,实际应用中可提高批量处理图像效率.使用奇异值分解法将认证水印、病人信息以及篡改鉴别信息分别嵌入至轮廓波分解后的不同子带中,提高了原图水印负载能力.提取接收端图像的水印并计算与原水印的NC值来验证水印具有较好鲁棒性,通过PSNR值计算证明水印嵌入对原图质量影响较小.在篡改鉴定阶段,为了验证篡改鉴定的性能,分别对真实篡改图像和添加噪声图像进行特征值提取匹配实验,实验结果证明了算法探测篡改的精度较高、误差率较小.在算法实现设计阶段,将提取图像特征值数量设计为可控,以便后续对特征点数量进行调整.理论上特征值数量越多,篡改探测的精度越高,且还可以用作篡改恢复.但考虑到水印容量以及批量处理图像效率问题,今后还需要在探测精度和处理效率两者间寻求平衡,这也是后续研究的重点之一.