Info
此问题已关闭。 请重新打开它进行编辑或回答。
how can i separte texte and background and compresse each one séparatelly (compression old image document)
1 次查看(过去 30 天)
显示 更早的评论
clear all;
close all;
clc;
f=imread('manuscrit1.tif'); %insérer the image.
imshow(f)
title('image originalle') %pour afficher l'image originale.
infos = whos('auto.tif');
fprintf('la taille de lmage originale est :' )
infos.bytes
%------------------------redimensionner l'image---------
BlockSize = 64; %la taille de chaque bloque
[rows1, columns1, numberOfColorChannels] = size(f);
e1=floor(rows1/BlockSize);
e2=floor(columns1/BlockSize);
h1 = e1*BlockSize;
h2 = e2*BlockSize;
J = imresize(f,[h1 h2]) ;
%----------------------------------------------------------------------
imgTSV=rgb2hsv(J); % pour tranformer l'image au systeme TSV
imshow(imgTSV)
title('en TSV') %pour afficher l'image originale.
%T Component of Colour Image
Tcom= imgTSV(:,:,1);
%S Component of Colour Image
Scom=imgTSV(:,:,2);
%V Component of Colour Image
Vcom=imgTSV(:,:,3);
%---------------------Dévision en block----------------------------------------
[rows, columns] = size(Tcom);
wholeBlockRows = floor(rows / BlockSize);
wholeBlockCols = floor(columns /BlockSize);
%---------------------dwt avec dévision------------------------
%--------------pour le composant T---------------------------
TOTAL_BLOCKS = wholeBlockRows*wholeBlockCols ;
dividedImage = zeros([BlockSize BlockSize TOTAL_BLOCKS]);
%-----_---------------------------------------------------------------------------------------------
T=BlockSize*wholeBlockCols;%on utilise ces parametre pour la partie de reconstuire l'image
image11=zeros(h1,h2,3); %create an rgb empty image
imgTSV1=rgb2hsv(image11);
Tcom1= imgTSV1(:,:,1)
%S Component of Colour Image %cette partie pour créer une image vide afin de réccuper l'avant plan
Scom1=imgTSV1(:,:,2);
%V Component of Colour Image
Vcom1=imgTSV1(:,:,3);
% pour récupeérer l'arrier plan
image22=zeros(h1,h2,3);
imgTSV2=rgb2hsv(image22);
Tcom11= imgTSV2(:,:,1);
%S Component of Colour Image
Scom11=imgTSV2(:,:,2);
%V Component of Colour Image
Vcom11=imgTSV2(:,:,3);
%---------------------------------------------------------------------------------------
row = 1;
col = 1;
%-----_---------------------------------------------------------------------------------------------
T=BlockSize*wholeBlockCols;%on utilise ces parametre pour la partie de reconstuire l'image
%---------------------------------------------------------------------------------------
for count=1:TOTAL_BLOCKS
dividedImage1(:,:,count) = Tcom(row:row+BlockSize-1,col:col+BlockSize-1);
col = col + BlockSize;
if(col >= size(Tcom,2))
col = 1;
row = row + BlockSize;
if(row >= size(Tcom,1))
row = 1;
end
end
%il est possible d'utiliser une forme simple de DWT mais la fonction BLOCKPLROC mieux pour bien préciser la taille de chaque BLOCK.
fun1 = @(block_struct) nth_output(1, @dwt2, block_struct.data,'db4');
fun2 = @(block_struct) nth_output(2, @dwt2, block_struct.data,'db4');
fun3 = @(block_struct) nth_output(3, @dwt2, block_struct.data,'db4');
fun4 = @(block_struct) nth_output(4, @dwt2, block_struct.data,'db4');
cAt = blockproc(dividedImage1(:,:,count),[BlockSize BlockSize],fun1);
cHt= blockproc(dividedImage1(:,:,count),[BlockSize BlockSize],fun2);
cVt= blockproc(dividedImage1(:,:,count),[BlockSize BlockSize],fun3);
cDt= blockproc(dividedImage1(:,:,count),[BlockSize BlockSize],fun4);
vt1=reshape(cHt,[],1); %pour regrouper la matrice LHt à un vecteur
vt2=reshape(cVt,[],1); %pour regrouper la matrice HLt à un vecteur
vt3=[vt1; vt2]; %pour linaisiser les deux premier HL et LH dans un seul vecteur
%--------------pour le composant S---------------------------
dividedImage2(:,:,count) = Scom(row:row+BlockSize-1,col:col+BlockSize-1);
col = col + BlockSize;
if(col >= size(Scom,2))
col = 1;
row = row + BlockSize;
if(row >= size(Scom,1))
row = 1;
end
end
fun5= @(block_struct) nth_output1(1, @dwt2, block_struct.data,'db4');
fun6 = @(block_struct) nth_output1(2, @dwt2, block_struct.data,'db4');
fun7= @(block_struct) nth_output1(3, @dwt2, block_struct.data,'db4');
fun8= @(block_struct) nth_output1(4, @dwt2, block_struct.data,'db4');
cAs= blockproc(dividedImage2(:,:,count),[BlockSize BlockSize],fun5);
cHs= blockproc(dividedImage2(:,:,count),[BlockSize BlockSize],fun6);
cVs= blockproc(dividedImage2(:,:,count),[BlockSize BlockSize],fun7);
cDs= blockproc(dividedImage2(:,:,count),[BlockSize BlockSize],fun8);
vs1=reshape(cHs,[],1); %pour regrouper la matrice LHt à un vecteur
vs2=reshape(cVs,[],1); %pour regrouper la matrice HLt à un vecteur
vs3=[vs1; vs2]; %pour linaisiser les deux premier HL et LH dans un seul vecteur
%--------------pour le composant V---------------------------
dividedImage3(:,:,count) = Vcom(row:row+BlockSize-1,col:col+BlockSize-1);
col = col + BlockSize;
if(col >= size(Vcom,2))
col = 1;
row = row + BlockSize;
if(row >= size(Vcom,1))
row = 1;
end
end
fun9= @(block_struct) nth_output2(1, @dwt2, block_struct.data,'db4');
fun10= @(block_struct) nth_output2(2, @dwt2, block_struct.data,'db4');
fun11= @(block_struct) nth_output2(3, @dwt2, block_struct.data,'db4');
fun12= @(block_struct) nth_output2(4, @dwt2, block_struct.data,'db4');
cAv= blockproc(dividedImage3(:,:,count),[BlockSize BlockSize],fun9);
cHv= blockproc(dividedImage3(:,:,count),[BlockSize BlockSize],fun10);
cVv= blockproc(dividedImage3(:,:,count),[BlockSize BlockSize],fun11);
cDv= blockproc(dividedImage3(:,:,count),[BlockSize BlockSize],fun12);
vv1=reshape(cHv,[],1); %pour regrouper la matrice LHt à un vecteur
vv2=reshape(cVv,[],1); %pour regrouper la matrice HLt à un vecteur
vv3=[vv1; vv2]; %pour linaisiser les deux premier HL et LH dans un seul vecteur
%-----------------on regroupe tout les HL et LH dans seul vector----------
vhr = [vt3; vs3; vv3] ;
%---------pour calculer la variance de chaque block-----------
vari = var(vhr)
%---------------------condition de seuil (threshold)---------------
seuil = 0.001 ; %inserer une valeur .
if (vari > seuil)
Av1 = dividedImage1(:,:,count) ;
Av2 = dividedImage2(:,:,count) ;
Av3 = dividedImage3(:,:,count) ;
%.-----------------reconstruire une image avant plant
if(count==1) %.-----------------reconstruire une image Tcom1
Tcom1(3:3+size(Av1,1), 3:3+size(Av1,2), :) = Av1;
else
v2=count-1;
Tcom1(BlockSize*v2+count:BlockSize*count,BlockSize*v2+count:BlockSize*count,:) = Av1;
end
if(count==1) %.-----------------reconstruire une image Tcom1
Scom1(1:BlockSize, 1:BlockSize, :) = Av2;
else
v2=count-1;
Tcom1(Blocksize*v2+count:BlockSize*count , Blocksize*v2+count:BlockSize*count, :) = Av2;
end
if(count==1) %.-----------------reconstruire une image Vcom1
Scom1(1:BlockSize, 1:BlockSize, :) = Av3;
else
v2=count-1;
Tcom3(Blocksize*v2+count:BlockSize*count , Blocksize*v2+count:BlockSize*count, :) = Av3;
end
else %--------reconstruire une image arriere plant
Av1 = dividedImage1(:,:,count) ;
Av2 = dividedImage2(:,:,count) ;
Av3 = dividedImage3(:,:,count) ;
if(count==1) %.-----------------reconstruire une image Tcom11
Tcom11(1:BlockSize, 1:BlockSize, :) = Av1;
else
v2=count-1;
Tcom11(Blocksize*v2+count:BlockSize*count , Blocksize*v2+count:BlockSize*count, :) = Av1;
end
if(count==1) %.-----------------reconstruire une image Tcom1
Scom11(1:BlockSize, 1:BlockSize, :) = Av2;
else
v2=count-1;
Scom11(Blocksize*v2+count:BlockSize*count , Blocksize*v2+count:BlockSize*count, :) = Av2;
end
if(count==1) %.-----------------reconstruire une image Tcom1
Vcom11(1:BlockSize, 1:BlockSize, :) = Av3;
else
v2=count-1;
Vcom11(Blocksize*v2+count:BlockSize*count , Blocksize*v2+count:BlockSize*count, :) = Av3;
end
end
end
tsvAVP= cat(3, Tcom1, Scom1, Vcom1); %pour aficher l'image avant plan
AVPimage=hsv2rgb(tsvAVP);
subplot(2,1,1)
imshow(AVPimage)
title('image avant plan')
tsvARP= cat(3, Tcom11, Scom11, Vcom11); %pour afficher l'image arriere plan
AVPimage=hsv2rgb(tsvARP);
subplot(2,1,2)
imshow(ARPimage)
title('image arriere plan')
2 个评论
Image Analyst
2020-5-11
Well, let's start by you attaching your image and your m-file. Then we can run your code and begin to help you. Also, please edit and format the code as code with the Code icon.
回答(0 个)
此问题已关闭。
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!