如何解决如何在频域中加水印?
我是Matlab的新手,我有一项作业要求使用DCT变换对图像加水印:
这是两张图片:
我有三个问题:
这是我尝试过的:
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)分量求逆。
•组合逆分量以在空间域中创建水印图像。
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运行
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。