-
Notifications
You must be signed in to change notification settings - Fork 0
/
Huffman.m
66 lines (54 loc) · 1.21 KB
/
Huffman.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
clear all;
close all;
clc;
%Abrimos la imagen
img=imread('IMG/1.jpg');
%Menu
opc=input('Seleccione una opcion\n1.-Imagen a color\n2.-Imagen a escala de grises\n');
if opc==1
%Mapeamos los 255 colores
[img,colormap]=rgb2ind(img,255);
elseif opc==2
%Convertir a escala de grises y mostramos
img=rgb2gray(img);
else
disp('Entrada no valida')
end
figure
imshow(img)
%Tamaño de la imagen
[f,c]=size(img);
Tam=f*c;
%Variables para encontrar la probabilidad
cont=1;
sig=0;
%Calculo de probabilidad acumulada
for i=0:255
j=img==i;%Preguntamos si el valor de i esta em la matriz de la imagen
contador(cont)=sum(j(:));%Apariciones
%Matriz de probabilidades
prob(cont)=contador(cont)/Tam;
sig=sig+prob(cont);
Cprob(cont)=sig;
cont=cont+1;
end
%Valores de una imagen
val=[0:255];
%Diccionario de Huffman
dic=huffmandict(val,prob);
%Convertimos un array a vector
v_size=1;
for k=1:f
for q=1:c
nVec(v_size)=img(k,q);
v_size=v_size+1;
end
end
%Codificacion de Huffman
huffCode=huffmanenco(nVec,dic);
%Guardado de Información
if opc==1
save('Datos.mat','huffCode','dic','f','c','opc','colormap');
else
save('Datos.mat','huffCode','dic','f','c','opc');
end