%Reversible Data hiding using Quad tree decomposition and histogrma
%shifting
%using quad tree to increase the hiding capacity
clc;
clear all;
close all;
z=1;
%--------------------reading the image------------------------
b=imread('goldhill.jpg');
I=rgb2gray(b);
figure(1);
imshow(I);
title('original image');
[m,n]=size(I);
figure(2);
imhist(I);
title('histogram of original image');
%--------------------quadtree decomposition---------------------
mindim=4;
S = qtdecomp(I,@Split,mindim,@Predicate);
%-------------------showing the block representation------------
blocks = repmat(uint8(0),size(S));
for dim = [512 256 128 64 32 16 8 4 2 1];
numblocks = length(find(S==dim));
if (numblocks > 0)
values = repmat(uint8(1),[dim dim numblocks]);
values(2:dim,2:dim,:) = 0;
blocks = qtsetblk(blocks,S,dim,values);
end
end
blocks(end,1:end) = 1;
blocks(1:end,end) = 1;
figure(3);
imshow(blocks,[]);
title('decomposed image blocks');
%-------------------showing fullimage-----------------------------------
vals1 = repmat(uint8(0),size(S));
for dim = [512 256 128 64 32 16 8 4 2 1]
[vals,r,c]=qtgetblk(I,S,dim);
numblocks = length(find(S==dim));
if (numblocks > 0)
values = repmat(uint8(1),[dim dim numblocks]);
values(2:dim,2:dim,:) = vals(2:dim,2:dim,1:numblocks) ;
vals1 = qtsetblk(vals1,S,dim,values);
end
end
figure(4);
imshow(vals1,[]);
title('decomposed image');
%----------------inputting the message/data to be hide---------------------
hide_data=input('Enter the data to be hide'); %for manual input
%cell_data=textread('myfile.txt', '%s', 'whitespace', ''); %reading data from text file
%hide_data=char(cell_data);
bin_data=convert_binary(hide_data); %calling function to convert data to binary
binary_data=bin_data';
size_binary=size(binary_data,1)*size(binary_data,2);
bin=1;
a=1;
% %-------------------embedding data in the image blocks---------------------
vals5 = repmat(uint8(0),size(S));
pd=1;
q=1;
ind=1;
rec_data(size_binary)=0;
for h=1:size_binary
rec_data(h)=0;
end
for dim = [512 256 128 64 32 16 8 4 2 1]
[vals2,r,c]=qtgetblk(I,S,dim);
numblocks = length(find(S==dim));
if (numblocks > 0)
values = repmat(uint8(1),[dim dim numblocks]);
values1 = repmat(uint8(1),[dim dim numblocks]);
full_hideimage = repmat(uint8(1),[dim dim numblocks]);
values(1:dim,1:dim,:) = vals2(1:dim,1:dim,1:numblocks) ;
%full_hideimage(1:dim,1:dim,:)=vals2(1:dim,1:dim,1:numblocks);
for i=1:size(values,3)
get_block=values(:,:,i);
newblock=values(:,:,i);
hide_image=values(:,:,i);
recover_block=values(:,:,i);
original=get_block;
l_block=length(get_block);
count(255)=0;
for h=1:255
count(h)=0;
end
for k=1:255
for l=1:l_block
for j=1:l_block
if get_block(l,j)==k
count(k)=count(k)+1;
end
end
end
end
[C,max_point]=max(count);
[C1,min_point]=min(count);
for l=1:l_block
for j=1:l_block
if (get_block(l,j)>min_point)&&(get_block(l,j)<max_point)
newblock(l,j)=get_block(l,j)+1;
elseif get_block(l,j)==(max_point+1)
newblock(l,j)=get_block(l,j)+1;
else
newblock(l,j)=get_block(l,j);
end
end
end
for l=1:l_block
for j=1:l_block
if (newblock(l,j)==max_point)
if (bin<=size_binary)
dat=binary_data(bin);
if dat==dec2bin(1)
hide_image(l,j)=newblock(l,j)+ 1;
else
hide_image(l,j)=newblock(l,j);
end
else
hide_image(l,j)=newblock(l,j);
end
bin=bin+1;
else
hide_image(l,j)=newblock(l,j);
end
end
end
full_hideimage(:,:,i)=hide_image;
end
%------------showing data hided image---------------
values(1:dim,1:dim,1:numblocks)=full_hideimage(1:dim,1:dim,1:numblocks);
vals5 = qtsetblk(vals5,S,dim,values);
end
end
figure(5);
imshow(vals5,[]);
title('data hided image');
完整代码或者代写添加QQ2449341593
往期回顾>>>>>>
【图像识别】基于matlab路面裂缝识别含GUI【含Matlab源码 009期】
【图像识别】基于matlab身份证号码识别【含Matlab源码 014期】
【图像压缩】基于matlab图像处理教程系列之图像压缩【含Matlab源码 024期】
【图像分割】基于matlab图像处理教程系列之图像分割(一)【含Matlab源码 025期】
【图像分割】基于matlab图像处理教程系列之图像分割(二)【含Matlab源码 026期】
【模式识别】基于matlab指纹识别【含Matlab源码 029期】
【模式识别】基于matlab银行卡号识别【含Matlab源码 030期】
【图像聚类】基于matlab FCM和改进的FCM脑部CT图像聚类【含Matlab源码 074期】
【图像评价】基于matlab CCF算法的图像质量评价【含Matlab源码 075期】
【图像增强】基于matlab局部对比度增强的CLAHE算法之直方图增强【含Matlab源码 076期】
【图像融合】基于matlab Frequency Partition之图像融合【含Matlab源码 077期】
【图像评价】基于matlab SVM之图像无参考质量评价【含Matlab源码 078期】
【图像处理】基于matlab DWT+DCT+PBFO改进图像水印隐藏提取含GUI【含Matlab源码 081期】
【图像变换】基于matalb DIBR-3D图像变换【含Matalb源码 082期】
【图像融合】基于matlab CBF算法的图像融合【含Matlab源码 083期】
【图像分割】基于matlab模糊聚类算法FCM的图像分割【含Matlab源码 084期】
【图像分割】基于形态学重建和过滤改进FCM算法(FRFCM)的的图像分割【Matlab 085期】
【图像去噪】基于matlab自适应形态学的图像去噪【含Matlab源码 086期】
【图像增强】基于matlab DEHAZENET和HWD的水下去散射图像增强【含Matlab 087期】
【图像增强】基于matlab PSO寻优ACE的图像增强【含Matlab源码 088期】
【图像增强】基于matlab区域相似变换函数和蜻蜓算法之灰度图像增强【含Matlab源码 089期】
【图像重建】基于matlab图像重建之ASTRA算法【含Matlab源码 090期】