Combined DWT

您所在的位置:网站首页 dct变换怎么算 Combined DWT

Combined DWT

2023-04-10 00:43| 来源: 网络整理| 查看: 265

目录前言论文创新点DCTDWTDWT 的优点分析代码getData原图水印图片代码range()np.empty()运行结果代码解析步骤提取水印 代码链接 https://github.com/diptamath/DWT-DCT-Digital-Image-Watermarking.git

前言

这篇论文是在2007年发表的,有些时间了,但是作为数字水印发展较好的时代,通过 这篇文章可以学习DCT,DWT在数字水印技术的应用,

论文创新点

结合小波变换和离散余弦变换的数字图像水印 本文将描述一种基于两种变换相结合的数字图像水印算法;DWT和DCT。水印是通过改变仔细选择的小波变换子带的小波系数,然后在选择的子带上应用离散余弦变换来实现的。

DCT

离散余弦变换:离散余弦变换是一种将信号转换成基本频率分量的技术[9]。它将图像表示为不同幅度和频率的正弦曲线的总和。对于输入图像x,根据等式计算变换输出图像y的离散余弦变换系数。1如下所示。在等式中,x是具有N×M个像素的输入图像,x(m,N)是图像的行M和列N中的像素的强度,y(u,v)是离散余弦变换矩阵的行u和列v中的离散余弦变换系数。

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 上图是x与y的关系。 这篇文章用到了基于块的离散余弦变换,现将原图分割成不重叠的块,然后对每个块做离散余弦变换,这导致给出三个频率子带:低频子带、中频子带和高频子带。

那怎么让图片的可见性不受影响呢? 刚刚我们说到图像可以分为三个频率子带:低频子带、中频子带和高频子带,大部分信号是位于位于低频子带,其中包含图像最重要的视觉部分。第二个,图像的高频成分通常通过压缩和噪声攻击来去除。因此,通过修改****中频子带的系数来嵌入水印,使得图像的可见性不会受到影响,并且水印不会通过压缩被移除

DWT

小波变换:小波是一种特殊的函数,其形式类似于傅立叶分析中的正弦和余弦,被用作表示信号的基本函数。对于二维图像,应用离散小波变换对应于通过二维滤波器在每个维度上处理图像。滤波器将输入图像分成四个不重叠的多分辨率子带LL1、LH1、HL1和HH1。子带LL1表示粗略尺度的小波变换系数,而子带LH1、HL1和HH1表示小波变换系数的精细尺度。为了获得下一个更粗尺度的小波系数,子带LL1被进一步处理,直到达到某个最终尺度N。当到达N时,我们将有3N+1个子带,由多分辨率子带LLN和LHx、HLx和HHx组成,其中x的范围从1到N

DWT 的优点

1、由于其良好的空间频率定位特性,小波变换非常适合于识别宿主图像中可以有效嵌入水印的区域 2、

分析代码

原图 在这里插入图片描述

img=Image.open('lena.jpg') #将模式转变为L就是灰度图像 img = img.convert('L') print(img) Image._show(img)

在这里插入图片描述

getData img=Image.open('lena.jpg') print(img) str=img.getdata() print(str[1]) img = img.convert('L')

在这里插入图片描述 在这里插入图片描述

原图

在这里插入图片描述

水印图片

在这里插入图片描述

代码 range() for x in range(0, 7, 8):print(x)

在这里插入图片描述

for x in range(0, 16, 8):print(x)

在这里插入图片描述

for x in range(0, 17, 8):print(x)

在这里插入图片描述

np.empty() all_subdct = np.empty((5, 5)) print(all_subdct)

在这里插入图片描述可以看出默认类型是浮点类型numpy.float64

import numpy as np import pywt import os from PIL import Image import cv2 from scipy.fftpack import dct from scipy.fftpack import idct# img11=Image.open('F:\girl.jpg') dir=os.getcwd() image = 'lena.jpg' watermark = 'boy.png'# 返回灰度图片的uint值 def convert_image(image_name, size):# 将图片转为灰度图像img = Image.open(image_name).resize((size, size), 1)img = img.convert('L')# img.save('./dataset/' + image_name)image_array = np.array(img.getdata(), dtype=np.float).reshape((size, size))print (image_array[0][0])print (image_array[10][10])return image_array # 多尺度小波变换 def process_coefficients(imArray, model, level):coeffs=pywt.wavedec2(data = imArray, wavelet = model, level = level)# print coeffs[0].__len__()coeffs_H=list(coeffs) return coeffs_Hdef embed_mod2(coeff_image, coeff_watermark, offset=0):for i in xrange(coeff_watermark.__len__()):for j in xrange(coeff_watermark[i].__len__()):coeff_image[i*2+offset][j*2+offset] = coeff_watermark[i][j]return coeff_imagedef embed_mod4(coeff_image, coeff_watermark):for i in range(coeff_watermark.__len__()):for j in range(coeff_watermark[i].__len__()):coeff_image[i*4][j*4] = coeff_watermark[i][j]return coeff_imagedef embed_watermark(watermark_array, orig_image):# 求得水印数组的大小watermark_array_size = len(watermark_array[0])#将多维数组降为一维数组watermark_flat = watermark_array.ravel()ind = 0for x in range (0, orig_image.__len__(), 8):for y in range (0, orig_image.__len__(), 8):if ind


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3