介绍
本节对了解信息隐藏中最常用的LSB算法特点和原理,设计并实现一种基于图像的LSB隐藏算法。
原理描述
替换技术就是利用人的感观系统对特定的随机noise不敏感原理,通过使用秘密信息比特替换随机noise,从而实现信息隐藏。图像高位平面对图像感官质量起主要作用,去除图像最低几个位平面并不会造成画面质量的明显下降。利用这个原理可用水印信息替代载体图像低位平面以实现信息嵌入。
本算法选用最低位平面来嵌入水印信息。最低位平面对图像的视觉效果影响最轻微,但很容易受noise影响和攻击,可采用冗余嵌入的方式来增强robustness加以解决,即在一个区域中嵌入相同的信息,提取时根据此区域中的所有像素判断。在此,贴出隐藏算法和提取算法源代码,作为参考。
参考代码
隐藏算法hisd_lsb:
function o = hide_lsb(block,data,I) si =size(I); lend =length(data); %image sparce of N*M N =floor(si(2)/block(2)); M =min(floor(si(1)/block(1)),ceil(lend/N)); o =I; for i =0:M-1 rst =i*block(1)+1; red =(i+1)*block(1); for j =0:N-1 idx= i*N+j+1; if(idx>lend) break; end; bit = data(idx); cst =j*block(2)+1; ced = (j+1)*block(2); o(rst:red,cst:ced) =bitset(o(rst:red,cst:ced),1,bit); end; end;
提取算法dh_lsb
function out = dh_lsb(block,I) si =size(I); %image sparce of N*M N =floor(si(2)/block(2)); M =floor(si(1)/block(1)); out = []; thr = ceil((block(1)*block(2)+1)/2); idx =0; for i = 0:M-1 rst = i*block(1)+1; red =(i+1)*block(1); for j =0:N-1 idx = i*N+j+1 cst = j*block(2)+1; ced = (j+1)*block(2); tmp = sum(sum(bitget(I(rst:red,cst:ced),1))); if(tmp>=thr) out(idx) =1; else out(idx) =0; end; end; end;
关于Computer Vision&Image Engineering更多讨论与交流,敬请关注本博客和新浪微博songzi_tea.