利用LSB算法隐藏文字信息的MATLAB实现

LSB算法——隐藏文字信息


LSB(Least Significant Bit)最低有效位,指二进制中最低位数值。
详见WiKi:https://en.wikipedia.org/wiki/Least_significant_bit


隐写术

隐写术是一种关于信息隐藏的技术,通常利用位图的RGB三种颜色值(0~255)在微小改变的情况下难以被人眼察觉的特点。每种颜色值都可以用8位二进制来表示,而最低有效位LSB技术就是通过修改最低几位的数值来将信息嵌入到图片中去。
详见WiKi:https://en.wikipedia.org/wiki/Steganography


相关方法

LSB方面的论文有很多,在此利用以下这篇

Chan C K, Cheng L M. Hiding data in images by simple LSB substitution[J]. Pattern recognition, 2004, 37(3): 469-474.
http://www.sciencedirect.com/science/article/pii/S003132030300284X

其具体的思路如下:
1. 设图像像素为 MC×NC M C × N C C C 表示原8-bit图像

C = { x i j | 0 i < M C , 0 j < N C , x i j { 0 , 1 , . . . , 255 } }
M M 为n-bit待隐藏的消息
  • 17
    点赞
  • 165
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
LSB算法可以用来实现数字水印的隐藏。下面是一个简单的LSB算法隐藏水印的MATLAB实现: ```matlab % 读取载体图像和水印图像 carrier_image = imread('carrier_image.png'); watermark_image = imread('watermark_image.png'); % 获取载体图像的宽度和高度 [height, width, ~] = size(carrier_image); % 将水印图像转换为灰度图像,并将其缩放到与载体图像相同的大小 watermark_image = imresize(watermark_image, [height, width]); watermark_image = rgb2gray(watermark_image); % 将水印图像中的每个像素转换为一个二进制,组成一个长向量 watermark_bits = reshape(de2bi(watermark_image), [], 1); % 在载体图像的最后一个像素的最低有效中写入0作为结束标志 carrier_image(end, end, :) = 0; % 将水印向量中的每个写入载体图像的最低有效 for i = 1:length(watermark_bits) % 计算当前像素的行和列索引 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) = num2str(watermark_bits(i)); % 将修改后的二进制像素值转换为十进制形式并写回载体图像 carrier_image(row_index, col_index) = bin2dec(pixel_value_binary); end % 将修改后的载体图像保存到新文件中 imwrite(carrier_image, 'watermarked_image.png'); ``` 以上实现的步骤如下: 1. 读取载体图像和水印图像。 2. 将水印图像转换为灰度图像,并将其缩放到与载体图像相同的大小。 3. 将水印图像中的每个像素转换为一个二进制,组成一个长向量。 4. 在载体图像的最后一个像素的最低有效中写入0作为结束标志。 5. 将水印向量中的每个写入载体图像的最低有效。 6. 将修改后的载体图像保存到新文件中。 需要注意的是,这个实现只能在无损的图像格式(如PNG)中隐藏水印,因为在图像压缩过程中会导致信息的丢失。此外,该实现虽然简单,但对水印图像的嵌入效果并不理想,还有可能受到图像处理操作的影响而失效。更加高效和鲁棒的数字水印嵌入算法还需要进一步的研究。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值