【图像分割】基于matlab四叉树图像分割【含Matlab源码 091期】

一、源代码

%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期】

你可能感兴趣的:(matlab,图像处理)