matlab实现GPC隐写算法,基于LSB信息隐藏算法的MATLAB实现

%将水印图像按最低位有效(LSB)方法嵌入到载体图像中,并把水印从载体图像中提取出来

%注:整个算法分为水印嵌入部分和水印提取部分,及hcf com down_sampled水印分析

% 程序代写&算法设计,联系qq:380238062,转载时请保留

clc %清屏

clear %清空变量

close all %关闭已打开图像

% 读入载体图像 并显示

cover_object=imread('orign.jpg');

if ndims(cover_object)==3 %如果是rbg图像,则转化为灰度图像

cover_object=rgb2gray(cover_object);

end

figure;imshow(cover_object); %显示

title('载体图像');

% 读入水印图像 并显示

message=imread('shuiyin.jpg');

if ndims(message)==3 %如果是rbg图像,则转化为灰度图像

message=rgb2gray(message);

end

[Mm,Nm]=size(message);

message=double(message);

message=round(message./256); %转化为bit信息流,以便隐写

message=uint8(message);

figure;imshow(256*message); %显示

title('待隐藏信息');

%调用yinxie函数实现信息隐写

watermarked_image=yinxie(cover_object,message);

figure;imshow(watermarked_image,[])

title('已嵌入隐写信息的图像') %显示

% 程序代写&算法设计,联系qq:380238062,转载时请保留

%调用tiqu函数实现信息提取

watermark=tiqu(watermarked_image,Mm,Nm);

figure;imshow(watermark,[])%显示提取图像

title('提取后信息')

function watermarked_image=yinxie(cover_object,message);

% 获取载体图像的大小

[Mc,Nc]=size(cover_object);

% 获取水印图像的大小

[Mm,Nm]=size(message);

length_message=Mm*Nm;%信息长度

message(Mc,Nc)=0;

watermarked_image=cover_object;

%每一比特秘密信息都用载体图像的一个像素负载,如果秘密比特与像素灰度

%值的最低位相同,则不作修改;否则,若原始灰度值为奇数,则减1,若为

%偶数,则加1

% 程序代写&算法设计,联系qq:380238062,转载时请保留

% mod(cover_object(ii,jj),2) 获取图像cover_object处像素值的最低位

for ii = 1:Mc

for jj =

1:Nc

if mod(cover_object(ii,jj),2)==message(ii,jj)%判断是否相等

continue; %若相等,不作修改

else %否则

if mod(cover_object(ii,jj),2)==0 %若为偶,则加1

watermarked_image(ii,jj)=cover_object(ii,jj)+1;

else %若为奇,则减1

watermarked_image(ii,jj)=cover_object(ii,jj)-1;

end

end

end

end

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LSB(Least Significant Bit)算法是一种简单的图像隐写术,它通过替换图像像素最低有效位(LSB)中的数据来实现信息隐藏。下面是一个简单的LSB算法MATLAB实现: ```matlab % 读取要隐藏信息的文本文件 file = fopen('secret.txt', 'r'); secret_data = fread(file); fclose(file); % 读取载体图像 carrier_image = imread('carrier_image.png'); % 获取载体图像的宽度和高度 [height, width, ~] = size(carrier_image); % 在载体图像的最后一个像素的最低有效位中写入0作为结束标志 if secret_data(end) == 0 secret_data(end) = 1; else secret_data(end) = 0; end % 将要隐藏的数据转换为二进制形式 secret_data_binary = dec2bin(secret_data); % 将二进制数据写入载体图像的最低有效位 for i = 1:length(secret_data_binary) % 计算当前像素的行和列索引 row_index = ceil(i / (width * 3)); col_index = mod(i - 1, width * 3) + 1; % 获取当前像素的RGB值并将其转换为二进制形式 pixel_value_binary = dec2bin(carrier_image(row_index, col_index), 8); % 将要隐藏的数据写入当前像素的最低有效位 pixel_value_binary(end) = secret_data_binary(i); % 将修改后的二进制像素值转换为十进制形式并写回载体图像 carrier_image(row_index, col_index) = bin2dec(pixel_value_binary); end % 将修改后的载体图像保存到新文件中 imwrite(carrier_image, 'stego_image.png'); ``` 以上实现的步骤如下: 1. 读取要隐藏的文本文件中的数据。 2. 读取载体图像。 3. 在载体图像的最后一个像素的最低有效位中写入0作为结束标志。 4. 将要隐藏的数据转换为二进制形式。 5. 将二进制数据写入载体图像的最低有效位。 6. 将修改后的载体图像保存到新文件中。 需要注意的是,这个实现只能隐藏文本数据,并且需要使用无损的图像格式(如PNG)来保存修改后的载体图像,以确保信息不会在保存过程中丢失。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值