如何在频域中加水印?

问题描述

我是Matlab的新手,我有一项作业要求使用DCT变换对图像加水印:

  • 读取Lin.jpg彩色图像并应用DCT。
  • 将logo.jpg(水印)阈值化为二进制和强度的10倍,然后将其添加到变换的Lin图像的系数中。

这是两张图片:

enter image description here

enter image description here

我有三个问题:

  1. 我是否应该将 Lin.jpg 分成8x8的块并将 logo.jpg 分成2x2的块?还是没有必要?
  2. 这是什么意思:“力量的十倍”?那只是乘以10吗?
  3. 如何获取变换后的 Lin.jpg 图片的系数?

这是我尝试过的:

EventContent

解决方法

结合离散余弦变换分量的水印图像

在这种情况下,我发现在此示例中使用padarray()(强度因子)为30会显示出更出色的结果。添加水印的管道如下:

•使用dct2()功能对水印图像进行零填充以匹配要加水印的图像的大小,或者放大图像。
•将图像和水印图像拆分为其RGB通道/分量。
•使用idct2()函数对所有色彩通道进行离散余弦变换(DCT)。
•将水印图像的离散余弦变换(DCT)分量乘以强度因子。
•根据颜色通道添加相应的离散余弦变换(DCT)分量。
•使用Image = imread('Lin.jpg'); Watermark = imread('njit_logo.jpg'); %Grabbing the image and watermark dimensions% [Image_Height,Image_Width,~] = size(Image); [Watermark_Height,Watermark_Width,~] = size(Watermark); %Padding the watermark to match the size of the image to be watermarked% Side_Padding = (Image_Width - Watermark_Width)/2; Top_And_Bottom_Padding = (Image_Height - Watermark_Height)/2; Watermark_Padded = padarray(Watermark,[Top_And_Bottom_Padding Side_Padding],'both'); %Binary image of watermark% Watermark_Binary = imbinarize(Watermark_Padded); %Converting the watermark image to frequency domain using DCT% Watermark_Strength = 30; Red_Channel_Watermark_DCT = Watermark_Strength*dct2(Watermark_Binary(:,:,1)); Blue_Channel_Watermark_DCT = Watermark_Strength*dct2(Watermark_Binary(:,2)); Green_Channel_Watermark_DCT = Watermark_Strength*dct2(Watermark_Binary(:,3)); %Converting the image to frequency domain using DCT% Red_Channel_Image_DCT = dct2(Image(:,1)); Blue_Channel_Image_DCT = dct2(Image(:,2)); Green_Channel_Image_DCT = dct2(Image(:,3)); %Adding the frequency components together% Combined_Red_Channel = Red_Channel_Watermark_DCT + Red_Channel_Image_DCT; Combined_Blue_Channel = Blue_Channel_Watermark_DCT + Blue_Channel_Image_DCT; Combined_Green_Channel = Green_Channel_Watermark_DCT + Green_Channel_Image_DCT; %Inversing the combined frequency domain image% Combined_Image(:,1) = idct2(real(Combined_Red_Channel)); Combined_Image(:,2) = idct2(real(Combined_Blue_Channel)); Combined_Image(:,3) = idct2(real(Combined_Green_Channel)); %Displaying combined image% Combined_Image = uint8(Combined_Image); imshow(Combined_Image); 函数对3个结果离散余弦变换(DCT)分量求逆。
•组合逆分量以在空间域中创建水印图像。

Watermarked Image

df_main = df_main.set_index('Timestamp')
df_temp = df_temp.set_index('Timestamp')

for index in df_temp.index:
 for j  in range (60):
    a = df_temp._get_value(index,"Temperature")
    df_main._set_value(index + timedelta(minutes=j),"Temp",a )

使用MATLAB R2019b运行

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...