@ -0,0 +1,176 @@ |
|||||
|
#define _CRT_SECURE_NO_DEPRECATE |
||||
|
|
||||
|
#include <stdio.h> |
||||
|
#include <stdlib.h> |
||||
|
#include <string.h> |
||||
|
#include <malloc.h> |
||||
|
#include <math.h> |
||||
|
#include "constant.h" |
||||
|
#include "global.h" |
||||
|
#include "algo.h" |
||||
|
|
||||
|
void Erreur(char * chaine,int numero) |
||||
|
{ |
||||
|
fprintf(stderr,chaine); |
||||
|
fprintf(stderr,"\nerreur %d\n",numero); |
||||
|
exit(numero); |
||||
|
} |
||||
|
|
||||
|
int LireVecteurs (void) |
||||
|
{ |
||||
|
int k; |
||||
|
if((ent=fopen(noment,"rb"))==NULL) |
||||
|
return 1; |
||||
|
fread(&M,sizeof(int),1,ent); |
||||
|
fread(&dimvec,sizeof(int),1,ent); |
||||
|
fread(&dico,sizeof(int),1,ent); |
||||
|
fread(&numiter,sizeof(int),1,ent); |
||||
|
if((vecteurs=(float**)calloc(M,sizeof(float *)))==NULL) |
||||
|
return 3; |
||||
|
for(k=0;k<M;k++) |
||||
|
{ |
||||
|
if((vecteurs[k]=(float*)calloc(dimvec,sizeof(float)))==NULL) |
||||
|
return 4; |
||||
|
} |
||||
|
for(k=0;k<M;k++) |
||||
|
fread(vecteurs[k],sizeof(float),dimvec,ent); |
||||
|
fclose(ent); |
||||
|
return 0; |
||||
|
} |
||||
|
|
||||
|
int InitDictionnaire(void) |
||||
|
{ |
||||
|
int k; |
||||
|
if((vecteurs_classes=(float**)calloc(dico,sizeof(float *)))==NULL) |
||||
|
return 1; |
||||
|
for(k=0;k<dico;k++) |
||||
|
{ |
||||
|
if((vecteurs_classes[k]=(float*)calloc(dimvec,sizeof(float)))==NULL) |
||||
|
return 2; |
||||
|
} |
||||
|
if((vecteurs_final=(float**)calloc(dico,sizeof(float *)))==NULL) |
||||
|
return 3; |
||||
|
for(k=0;k<dico;k++) |
||||
|
{ |
||||
|
if((vecteurs_final[k]=(float*)calloc(dimvec,sizeof(float)))==NULL) |
||||
|
return 4; |
||||
|
} |
||||
|
if((index_final=(int*)calloc(M,sizeof(int)))==NULL) |
||||
|
return 5; |
||||
|
if((popul_final=(int*)calloc(dico,sizeof(int)))==NULL) |
||||
|
return 6; |
||||
|
if((index_classes=(int*)calloc(M,sizeof(int)))==NULL) |
||||
|
return 7; |
||||
|
if((popul_classes=(int*)calloc(dico,sizeof(int)))==NULL) |
||||
|
return 8; |
||||
|
return 0; |
||||
|
} |
||||
|
|
||||
|
int CalculDictionnaire(void) |
||||
|
{ |
||||
|
int n,k,p,index; |
||||
|
double energie_prec,distance,distancemin; |
||||
|
char fini; |
||||
|
for(k=0;k<dico;k++) |
||||
|
{ |
||||
|
index=(int)floor(((double)(M-1)*(double)(rand()))/(double)RAND_MAX); |
||||
|
for(n=0;n<dimvec;n++) |
||||
|
vecteurs_classes[k][n]=vecteurs[index][n]; |
||||
|
} |
||||
|
energie=0.0; |
||||
|
etape=0; |
||||
|
fini=0; |
||||
|
while(!fini) |
||||
|
{ |
||||
|
memset(popul_classes,0,dico*sizeof(int)); |
||||
|
energie_prec=energie; |
||||
|
energie=0.0; |
||||
|
for(k=0;k<M;k++) |
||||
|
{ |
||||
|
index=0; |
||||
|
distancemin=0.0; |
||||
|
for(n=0;n<dimvec;n++) |
||||
|
{ |
||||
|
distancemin+= |
||||
|
(vecteurs[k][n]-vecteurs_classes[0][n])* |
||||
|
(vecteurs[k][n]-vecteurs_classes[0][n]); |
||||
|
} |
||||
|
for(p=1;p<dico;p++) |
||||
|
{ |
||||
|
distance=0.0; |
||||
|
for(n=0;n<dimvec;n++) |
||||
|
{ |
||||
|
distance+= |
||||
|
(vecteurs[k][n]-vecteurs_classes[p][n])* |
||||
|
(vecteurs[k][n]-vecteurs_classes[p][n]); |
||||
|
} |
||||
|
if(distance<distancemin) |
||||
|
{ |
||||
|
distancemin=distance; |
||||
|
index=p; |
||||
|
} |
||||
|
} |
||||
|
index_classes[k]=index; |
||||
|
popul_classes[index]+=1; |
||||
|
energie+=distancemin; |
||||
|
} |
||||
|
for(p=0;p<dico;p++) |
||||
|
{ |
||||
|
if(popul_classes[p]) |
||||
|
{ |
||||
|
memset(vecteurs_classes[p],0,dimvec*sizeof(float)); |
||||
|
} |
||||
|
} |
||||
|
for(k=0;k<M;k++) |
||||
|
{ |
||||
|
index=index_classes[k]; |
||||
|
if(popul_classes[index]) |
||||
|
{ |
||||
|
for(n=0;n<dimvec;n++) |
||||
|
{ |
||||
|
vecteurs_classes[index][n]+=vecteurs[k][n]; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
for(p=0;p<dico;p++) |
||||
|
{ |
||||
|
if(popul_classes[p]) |
||||
|
{ |
||||
|
for(n=0;n<dimvec;n++) |
||||
|
{ |
||||
|
vecteurs_classes[p][n]/=popul_classes[p]; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
if(etape!=0) |
||||
|
{ |
||||
|
if(((energie_prec-energie)/energie)<SEUIL) |
||||
|
fini=1; |
||||
|
} |
||||
|
etape++; |
||||
|
} |
||||
|
return 0; |
||||
|
} |
||||
|
|
||||
|
int SauveClasses(void) |
||||
|
{ |
||||
|
int k; |
||||
|
if((sor=fopen(nomsor,"wb"))==NULL) |
||||
|
return 1; |
||||
|
fwrite(&dimvec,sizeof(int),1,sor); |
||||
|
fwrite(&dico,sizeof(int),1,sor); |
||||
|
for(k=0;k<dico;k++) |
||||
|
fwrite(vecteurs_final[k],sizeof(float),dimvec,sor); |
||||
|
fwrite(popul_final,sizeof(int),dico,sor); |
||||
|
fclose(sor); |
||||
|
return 0; |
||||
|
} |
||||
|
|
||||
|
int SauveCode(void) |
||||
|
{ |
||||
|
if((cod=fopen(nomcod,"wb"))==NULL) |
||||
|
return 1; |
||||
|
fwrite(index_final,sizeof(int),M,sor); |
||||
|
fclose(sor); |
||||
|
return 0; |
||||
|
} |
||||
@ -0,0 +1,6 @@ |
|||||
|
void Erreur(char *,int); |
||||
|
int LireVecteurs(void); |
||||
|
int InitDictionnaire(void); |
||||
|
int CalculDictionnaire(void); |
||||
|
int SauveClasses(void); |
||||
|
int SauveCode(void); |
||||
@ -0,0 +1,10 @@ |
|||||
|
#define NOM 50 |
||||
|
#define SEUIL 1e-5 |
||||
|
|
||||
|
typedef struct |
||||
|
{ |
||||
|
int index; |
||||
|
int popul; |
||||
|
float * vecteur; |
||||
|
} |
||||
|
TRI; |
||||
@ -0,0 +1,4 @@ |
|||||
|
function [image]=data_set(i, n) |
||||
|
|
||||
|
|
||||
|
end |
||||
@ -0,0 +1,28 @@ |
|||||
|
function [coeff,num]=descripteurfouriernorm(z,cmax) |
||||
|
cmin=-cmax; |
||||
|
z_moy=mean(z); |
||||
|
longc=length(z); |
||||
|
% on calcule les coefficients de Fourier |
||||
|
TC=fft(z-z_moy)/longc; |
||||
|
num=cmin:cmax; |
||||
|
% on sélectionne les coefficients entre cmin et cmax |
||||
|
coeff=zeros(cmax-cmin+1,1); |
||||
|
coeff(end-cmax:end)=TC(1:cmax+1); |
||||
|
coeff(1:-cmin)=TC(end+cmin+1:end); |
||||
|
|
||||
|
% on retourne la séquence si le parcours est dans le |
||||
|
% sens inverse du sens trigonométrique |
||||
|
if abs(coeff(num==-1))>abs(coeff(num==1)) |
||||
|
coeff=coeff(end:-1:1); |
||||
|
end |
||||
|
|
||||
|
% corrections de phase pour normaliser |
||||
|
% par rapport à la rotation et l'origine |
||||
|
% du signal z |
||||
|
Phi=angle(coeff(num==-1).*coeff(num==1))/2; |
||||
|
coeff=coeff*exp(-1i*Phi); |
||||
|
theta=angle(coeff(num==1)); |
||||
|
coeff=coeff.*exp(-1i*num'*theta); |
||||
|
|
||||
|
% correction pour normaliser la taille |
||||
|
coeff=coeff/abs(coeff(num==1)); |
||||
@ -0,0 +1,25 @@ |
|||||
|
#define _CRT_SECURE_NO_DEPRECATE |
||||
|
|
||||
|
#include <stdio.h> |
||||
|
#include "constant.h" |
||||
|
|
||||
|
char noment[NOM]; |
||||
|
char nomsor[NOM]; |
||||
|
char nomcod[NOM]; |
||||
|
int dimvec,M,dico,numiter; |
||||
|
|
||||
|
FILE * ent,* sor,* cod; |
||||
|
|
||||
|
float ** vecteurs; |
||||
|
float ** vecteurs_classes; |
||||
|
int * index_classes; |
||||
|
int * popul_classes; |
||||
|
float ** vecteurs_final; |
||||
|
int * index_final; |
||||
|
int * popul_final; |
||||
|
int etape; |
||||
|
double energie; |
||||
|
double energieminimale; |
||||
|
|
||||
|
TRI * buftri; |
||||
|
|
||||
@ -0,0 +1,25 @@ |
|||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
extern char noment[NOM]; |
||||
|
extern char nomsor[NOM]; |
||||
|
extern char nomcod[NOM]; |
||||
|
extern int dimvec,M,dico,numiter; |
||||
|
|
||||
|
extern FILE * ent,* sor,* cod; |
||||
|
|
||||
|
extern float ** vecteurs; |
||||
|
extern float ** vecteurs_classes; |
||||
|
extern int * index_classes; |
||||
|
extern int * popul_classes; |
||||
|
extern float ** vecteurs_final; |
||||
|
extern int * index_final; |
||||
|
extern int * popul_final; |
||||
|
extern int etape; |
||||
|
extern double energie; |
||||
|
extern double energieminimale; |
||||
|
|
||||
|
extern TRI * buftri; |
||||
|
|
||||
@ -0,0 +1,41 @@ |
|||||
|
% kmoyennes.m |
||||
|
% [vecteursliste,code,occur]=kmoyennes(vecteurs,dico,numiter) |
||||
|
% vecteurs : vecteurs de la base (rangés en colonnes) |
||||
|
% dico : nombre de classes |
||||
|
% numiter : nombre d'essais pour trouver le dictionnaire |
||||
|
% vecteursliste : contient les vecteurs prototypes |
||||
|
% code : contient les index des classes |
||||
|
% occur : nombre d'éléments dans chaque classe |
||||
|
|
||||
|
function [vecteursliste,code,occur]=kmoyennes(vecteurs,dico,numiter) |
||||
|
|
||||
|
% nombre de lignes du tableau vecteurs : dimension des vecteurs |
||||
|
dimvec=size(vecteurs,1); |
||||
|
% nombre de colonnes du tableau vecteurs : nombre de vecteurs |
||||
|
M=size(vecteurs,2); |
||||
|
|
||||
|
% ecriture des fichiers nécessaires au fonctionnment du programme quantvec |
||||
|
fid=fopen('vecteurs','w'); |
||||
|
fwrite(fid,M,'int'); |
||||
|
fwrite(fid,dimvec,'int'); |
||||
|
fwrite(fid,dico,'int'); |
||||
|
fwrite(fid,numiter,'int'); |
||||
|
fwrite(fid,vecteurs,'float'); |
||||
|
fclose(fid); |
||||
|
|
||||
|
% lancement du programme quantvec |
||||
|
unix('./quantvec vecteurs dict code'); |
||||
|
|
||||
|
% lecture des fichiers résultat |
||||
|
fid=fopen('dict','r'); |
||||
|
dimvec=fread(fid,1,'int'); |
||||
|
dico=fread(fid,1,'int'); |
||||
|
vecteursliste=fread(fid,[dimvec dico],'float'); |
||||
|
occur=fread(fid,dico,'int'); |
||||
|
fclose(fid); |
||||
|
disp('vecteurs dans la liste') |
||||
|
disp([dimvec dico]) |
||||
|
|
||||
|
fid=fopen('code','r'); |
||||
|
code=fread(fid,M,'int'); |
||||
|
fclose(fid); |
||||
@ -0,0 +1,58 @@ |
|||||
|
close all |
||||
|
|
||||
|
%acceptable threshold values: 15-30 |
||||
|
threshold = 20; |
||||
|
cmax = 10; |
||||
|
cmin = -cmax; |
||||
|
n_classes = 16; |
||||
|
iterations = 50; |
||||
|
N = 200; |
||||
|
|
||||
|
dataset = dir('../images/*/*.jpg'); |
||||
|
dataset_size = length(dataset); |
||||
|
|
||||
|
vecteurs=zeros(2*(cmax-cmin+1),dataset_size); %TODO: renommer en vectors |
||||
|
|
||||
|
% c'est lent |
||||
|
% s'assurer que l'on choisit toutes les images |
||||
|
% |
||||
|
for n=1:dataset_size |
||||
|
% choix d'une image aléatoire |
||||
|
choix = 1 + floor(dataset_size*rand(dataset_size, 1)); |
||||
|
% extraction de l'image du dataset |
||||
|
image = dataset(choix(1)); |
||||
|
% lecture de l'image |
||||
|
img = imread([image.folder '/' image.name]); |
||||
|
% filtrage de la couleur de la peau |
||||
|
binary = rgb_filter(img, threshold); |
||||
|
% détermination du contour |
||||
|
c = contourc(binary); |
||||
|
% Détermination du contour de taille max |
||||
|
cont = max_contour(c); |
||||
|
% transformation en signal complex |
||||
|
z = cont(:,1) + 1i*cont(:,2); |
||||
|
% calcul des descripteurs de Fourrier |
||||
|
[coeff,ncoeff]=descripteurfouriernorm(z,cmax); |
||||
|
% Extraction des composantes |
||||
|
vecteurs(:,n)=[real(coeff);imag(coeff)]; |
||||
|
% affichage de l'avancement |
||||
|
disp(n/dataset_size); |
||||
|
end |
||||
|
|
||||
|
% utilisation de l'algorithme des kmeans |
||||
|
kmeans = kmoyennes(vecteurs, n_classes, iterations); |
||||
|
|
||||
|
% affichage des prototypes |
||||
|
figure |
||||
|
for n=1:n_classes |
||||
|
contfil=resconstrdesfour(kmeans(1:end/2,n)+1i*kmeans(end/2+1:end,n),N,cmax); |
||||
|
subplot(4,4,n) |
||||
|
h=plot(real(contfil),imag(contfil),'-',real(contfil(1)),imag(contfil(1)),'o'); |
||||
|
title(['prototype ' int2str(n)]) |
||||
|
set(h(1),'LineWidth',2) |
||||
|
set(h(2),'LineWidth',3) |
||||
|
grid on |
||||
|
axis equal |
||||
|
axis ij |
||||
|
drawnow |
||||
|
end |
||||
@ -0,0 +1,8 @@ |
|||||
|
all : quantvec |
||||
|
|
||||
|
quantvec : *.c *.h |
||||
|
g++ -O3 -Wall *.c -o quantvec |
||||
|
|
||||
|
clean : |
||||
|
rm quantvec |
||||
|
|
||||
@ -0,0 +1,18 @@ |
|||||
|
function [cont]=max_contour(contours) |
||||
|
i=1; |
||||
|
id=1; |
||||
|
max = 0; |
||||
|
while i+contours(2, id) < size(contours, 2) |
||||
|
contours(2,i); |
||||
|
if contours(2,i) > max |
||||
|
max = contours(2,i); |
||||
|
id = i; |
||||
|
end |
||||
|
i=i+1+contours(2,i); |
||||
|
end |
||||
|
|
||||
|
cont = zeros(max, 2); |
||||
|
cont(1:end,1) = contours(1, id+1:id+max); |
||||
|
cont(1:end,2) = contours(2, id+1:id+max); |
||||
|
|
||||
|
end |
||||
@ -0,0 +1,63 @@ |
|||||
|
#define _CRT_SECURE_NO_DEPRECATE |
||||
|
|
||||
|
#include <stdio.h> |
||||
|
#include <stdlib.h> |
||||
|
#include <time.h> |
||||
|
#include <string.h> |
||||
|
#include <malloc.h> |
||||
|
#include <math.h> |
||||
|
#include "constant.h" |
||||
|
#include "global.h" |
||||
|
#include "algo.h" |
||||
|
|
||||
|
int main(int ac,char ** av) |
||||
|
{ |
||||
|
int erreur,iter,p; |
||||
|
if(ac != 4) |
||||
|
Erreur((char*)"Il faut 3 parametres",1); |
||||
|
strncpy(noment,av[1],NOM-1); |
||||
|
strncpy(nomsor,av[2],NOM-1); |
||||
|
strncpy(nomcod,av[3],NOM-1); |
||||
|
|
||||
|
srand( (unsigned)time( NULL ) ); |
||||
|
|
||||
|
if((erreur=LireVecteurs())!=0) |
||||
|
Erreur((char*)"Erreur de lecture des vecteurs",erreur); |
||||
|
fprintf(stderr,"nombre de vecteurs : %d\n",M); |
||||
|
fprintf(stderr,"dimension des vecteurs : %d\n",dimvec); |
||||
|
fprintf(stderr,"taille du dictionnaire : %d\n",dico); |
||||
|
fprintf(stderr,"nombre d'iterations : %d\n",numiter); |
||||
|
if((erreur=InitDictionnaire())!=0) |
||||
|
Erreur((char*)"Erreur d'initialisation du dictionnaire",erreur); |
||||
|
|
||||
|
iter=0; |
||||
|
if((erreur=CalculDictionnaire())!=0) |
||||
|
Erreur((char*)"Erreur de calcul itératif du dictionnaire",erreur); |
||||
|
energieminimale=energie; |
||||
|
memcpy(index_final,index_classes,M*sizeof(int)); |
||||
|
memcpy(popul_final,popul_classes,dico*sizeof(int)); |
||||
|
for(p=0;p<dico;p++) |
||||
|
memcpy(vecteurs_final[p],vecteurs_classes[p],dimvec*sizeof(float)); |
||||
|
fprintf(stderr,"iteration %d, distorsion %lf en %d etapes\n",iter,energie/((double)M*(double)dimvec),etape); |
||||
|
|
||||
|
for(iter=1;iter<numiter;iter++) |
||||
|
{ |
||||
|
if((erreur=CalculDictionnaire())!=0) |
||||
|
Erreur((char*)"Erreur de calcul itératif du dictionnaire",erreur); |
||||
|
if(energie<energieminimale) |
||||
|
{ |
||||
|
energieminimale=energie; |
||||
|
memcpy(index_final,index_classes,M*sizeof(int)); |
||||
|
memcpy(popul_final,popul_classes,dico*sizeof(int)); |
||||
|
for(p=0;p<dico;p++) |
||||
|
memcpy(vecteurs_final[p],vecteurs_classes[p],dimvec*sizeof(float)); |
||||
|
} |
||||
|
fprintf(stderr,"iteration %d, distorsion %lf en %d etapes\n",iter,energie/((double)M*(double)dimvec),etape); |
||||
|
} |
||||
|
|
||||
|
fprintf(stderr,"distorsion finale %lf\n",energieminimale/((double)M*(double)dimvec)); |
||||
|
if((erreur=SauveClasses())!=0) |
||||
|
Erreur((char*)"Erreur de sauvegarde des classes",erreur); |
||||
|
if((erreur=SauveCode())!=0) |
||||
|
Erreur((char*)"Erreur de sauvegarde du code",erreur); |
||||
|
} |
||||
@ -0,0 +1,11 @@ |
|||||
|
function z_fil=resconstrdesfour(coeff,N,cmax) |
||||
|
|
||||
|
cmin=-cmax; |
||||
|
TC=zeros(N,1); |
||||
|
|
||||
|
TC(1:cmax+1)=coeff(end-cmax:end); |
||||
|
TC(end+cmin+1:end)=coeff(1:-cmin); |
||||
|
|
||||
|
z_fil=ifft(TC)*N; |
||||
|
|
||||
|
z_fil=[z_fil;z_fil(1)]; |
||||
@ -0,0 +1,23 @@ |
|||||
|
function [filtered_img]=rgb_filter(img, threshold) |
||||
|
height = size(img, 1); |
||||
|
width = size(img, 2); |
||||
|
depth = size(img, 3); |
||||
|
|
||||
|
filtered_img = zeros(height, width, 1); |
||||
|
|
||||
|
for i=1:height |
||||
|
for j=1:width |
||||
|
r = img(i, j, 1); |
||||
|
g = img(i, j, 2); |
||||
|
b = img(i, j, 3); |
||||
|
if (r > g && r > b) |
||||
|
if (r-b > threshold || r-g > threshold) |
||||
|
filtered_img(i, j, 1) = 1; |
||||
|
else |
||||
|
filtered_img(i, j, 1) = 0; |
||||
|
end |
||||
|
end |
||||
|
end |
||||
|
end |
||||
|
|
||||
|
end |
||||
@ -0,0 +1,3 @@ |
|||||
|
int InitInfo(void); |
||||
|
void TraiteErreur(int,char*); |
||||
|
DWORD WINAPI Traitement(LPVOID); |
||||
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 9.9 KiB After Width: | Height: | Size: 9.9 KiB |
|
Before Width: | Height: | Size: 6.7 KiB After Width: | Height: | Size: 6.7 KiB |
|
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 6.1 KiB |
|
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 5.5 KiB |
|
Before Width: | Height: | Size: 5.2 KiB After Width: | Height: | Size: 5.2 KiB |
|
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 5.1 KiB |
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.9 KiB |
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.9 KiB |
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.9 KiB |
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.9 KiB |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 4.8 KiB |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 4.8 KiB |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 4.8 KiB |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 4.8 KiB |
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.9 KiB |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 4.8 KiB |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 4.8 KiB |
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.9 KiB |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 4.8 KiB |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 4.6 KiB |
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 4.6 KiB |
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 4.6 KiB |
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 4.6 KiB |
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 4.6 KiB |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 4.6 KiB |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 4.6 KiB |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 4.8 KiB |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 4.8 KiB |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 4.8 KiB |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 4.8 KiB |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 4.8 KiB |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 4.8 KiB |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 4.8 KiB |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 4.8 KiB |
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.9 KiB |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 4.8 KiB |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 4.8 KiB |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 4.8 KiB |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 4.8 KiB |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 4.8 KiB |
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.9 KiB |
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.9 KiB |
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.9 KiB |
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.9 KiB |
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.9 KiB |
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.9 KiB |
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.9 KiB |
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.9 KiB |
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.9 KiB |
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.9 KiB |
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.9 KiB |