【影像分割】基於四叉樹影像分割matlab
%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');
完整程式碼新增QQ1575304183
相關文章
- 基於PaddlePadlle的影像分割の新手入門
- 演算法影像崗-影像分類與影像分割演算法
- 數字影像處理day_12 影像分割
- OSTU大津法影像分割
- 基於深度學習的影像分割在高德的實踐深度學習
- 基於百度飛漿PaddlePaddle的影像分割學習心得
- 使用LabVIEW實現基於pytorch的DeepLabv3影像語義分割ViewPyTorch
- Pixellib語義分割-影像背景替換
- 影像分割 | Context Prior CPNet | CVPR2020Context
- 50種常見的影像分割技術
- 飛槳paddlepaddle影像分割課程筆記筆記
- 物體檢測、影像分割技術概述
- 百度AI攻略:Paddlehub實現影像分割AI
- 影像語義分割資料增強——imgaug(二)
- 如何使用Mask RCNN模型進行影像實體分割?CNN模型
- MATLAB——基於影像相減的紙牌識別系統Matlab
- Ai影像分割模型PaddleSeg——自定義資料集處理AI模型
- 使用EasyCV Mask2Former輕鬆實現影像分割ORM
- 通用影像分割任務- 使用 Mask2Former 和 OneFormerORM
- matlab求影像頻譜Matlab
- 谷歌開源最新語義影像分割模型DeepLab-v3+谷歌模型
- 用影像分割製作專屬表情包?這裡有妙招!
- 基於支援向量機的影像分類系統(MATLAB GUI介面版)MatlabGUI
- [影像處理] 基於CleanVision庫清洗影像資料集
- 影像分割中的深度學習:U-Net 體系結構深度學習
- 百度飛槳PaddlePaddle影像分割7日學習收穫
- 體素科技:深鑽小資料下的醫學影像分割
- TPAMI 2024 | 自適應區域特定損失:提高影像分割效能
- 影像分割論文 | DRN膨脹殘差網路 | CVPR2017
- 醫學影像 | DualGAN與兒科超聲心動圖分割 | MICCAIAI
- 影像分割必備知識點 | Dice損失 理論+程式碼
- 基於harris角點和RANSAC演算法的影像拼接matlab模擬演算法Matlab
- 基於方塊編碼的影像壓縮matlab模擬,帶GUI介面MatlabGUI
- C#處理醫學影像(四):基於Stitcher演算法拼接人體全景脊柱骨骼影像C#演算法
- YOLOv9:在自定義資料上進行影像分割訓練YOLO
- 大盤點 | 2019年5篇影像分割演算法最佳綜述演算法
- 谷歌釋出人體影像分割工具BodyPix 2.0,可在iPhone上流暢執行谷歌iPhone
- 百度影像分割7日打卡訓練營學習筆記筆記