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

⛄一、获取代码方式

获取代码方式1:
完整代码已上传我的资源:【图像分割】基于matlab四叉树图像分割【含Matlab源码 091期】
点击上面蓝色字体,直接付费下载,即可。

获取代码方式2:
付费专栏Matlab图像处理(初级版)

备注:
点击上面蓝色字体付费专栏Matlab图像处理(初级版),扫描上面二维码,付费29.9元订阅海神之光博客付费专栏Matlab图像处理(初级版),凭支付凭证,私信博主,可免费获得1份本博客上传CSDN资源代码(有效期为订阅日起,三天内有效);
点击CSDN资源下载链接:1份本博客上传CSDN资源代码

⛄二、四叉树图像分割简介

1 图割概述
图像分割问题从本质上来说是像素分配的问题, 也可以说是像素的标记问题。给定一个标签集合L, 图像中的一个像素为Pi (i=1, 2, …, n) , 图像分割就是对图像中的每一个像素分配一个标签Pi∈Lo或者Pi∈Lp (Lo为目标, Lp为背景) 的过程。图割是基于图论的一种方法, 首先将一幅图像映射为一个网络图G= (V, E) , 在这个图中有两类节点, 即普通节点Pi, 端节点S和T, 其中S为前景目标, T为背景目标。边E={ (u, v) |u∈P, v∈P}表示图中边的集合, 一般的图割方法中只有相邻的节点间才存在边, 每条边上都有权值ω (u, v) 。所要解决的问题就是在已知能量函数的前提下, 如何将这个图切割开, 并且隔开后所花的代价最小。G1, G2为被割开后的子图。

2 四叉树分割方法
令G表示一幅图像, 将G分割成n个子区域G1, G2, ···, Gn的过程就叫分割, 满足的条件如下:
在这里插入图片描述
(2) Gi (i=1, 2, …, n) 是一个连通域;
在这里插入图片描述
(5) P (Gi∪Gj) =FALSE, 对于任意相邻像素Gi和Gj。
其中, P (Gi) 是定义在集合Gi的点上的逻辑谓词, 表示空集。
四叉树的分解步骤如下:
(1) 将原图像分成几个 (一般为4个) 大小相同的区域。
(2) 将所分图像的每个区域依次判定是否满足判定标准, 如果不满足, 就将这个区域继续细分, 直到所有的区域都满足这个评判标准为止。使用的评判标准为, 同一区域内像素值的方差不超过某个阈值, 即S (Ri) <A, A越小, 分割的区域精度就越高, 算法执行的时间也就越长, 反之亦然。
(3) 使用像素点合并的方法, 合并孤立的像素点。
(4) 迭代重复上述过程, 直到所有的区域都符合评判标准。

⛄三、部分源代码

%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’);

⛄四、运行结果

在这里插入图片描述
在这里插入图片描述

⛄五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]胡志立,郭敏.基于四叉树分解与图割的彩色图像快速分割[J].计算机工程与科学. 2015,37(02)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

  • 20
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Matlab领域

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值