Вы находитесь на странице: 1из 5

Universidad Nacional Autnoma de Mxico

Laboratorio de Procesamiento Digital de Imgenes Mdicas


Dr. Ernesto Moya Albor

Ledesma Domnguez Leonardo

Criptografa visual

Resumen

Esta prctica consiste en desarrollar scripts en MatLab con


la finalidad de dar una solucin computarizada a diferentes
problemas que pueden surgir en procesamiento digital de
imgenes. A partir de dos ejemplos: el juego de la vida y el
tringulo de Sierpinski realizaremos un programa bsico de
Criptografa visual, aplicaremos conocimientos de manejos
de matrices y ciclos de control de programacin bsica.

ndice de Trminos

Barra de colores
Nmero pseudoaleatorio (rand)
Redondeo
IDE

El primer paso es crear un mundo inicial (mundo1) donde


en forma aleatoria se determina que clulas contienen vida.
La probabilidad de que exista vida en una clula
determinada puede ser del 50%, con lo cual se puede usar
directamente el comando rand. El mundo inicial es
analizado elemento por elemento y se determina si la casilla
actual tiene vida o no, la condicin de la clula en el mundo
siguiente (mundo2) depender de las siguientes reglas:
1) Una clula muerta vivir si a su alrededor hay
exactamente 3 clulas vivas.
2) Una clula seguir viva si tiene a su alrededor existen 2 o
3 clulas vivas.
3) En el resto de los casos, la clula muere por falta de
poblacin o por superpoblacin.
En la siguiente iteracin el mundo siguiente (mundo2) se
convierte en el mundo inicial (mundo1) y el proceso se
repite un nmero predeterminado de ciclos.

I. INTRODUCCIN
El manejo de matrices en MatLab es fundamental, ya que el
mismo nombre de este IDE [1] lo sugiere: Laboratorio de
Matrices, el manejo de stas son indispensables para
procesar una imagen de forma digital y acompaado con el
manejo de ciclos de control, se puede sacar un mejor
provecho a la programacin. Necesitamos conocer ciertos
conocimientos que nos ayudarn a realizar estos 3
programas los cuales los enlisto de la siguiente manera:
a) Juego de la Vida: Programa que simula un autmata
celular diseado por el matemtico John Horton
Conway en 1970 que consta de una matriz y donde
cada casilla puede tener vida(blanco) o no tener
vida(negro).
b) Tringulo de Sierpinski: es un fractal ideado por el
matemtico polaco Waclaw Sierpinski, este fractal se
construye a partir de las bisectrices de los tres lados de
un tringulo y estas bisectrices se hacen infinitas, de tal
forma que se crean tringulos dentro de tringulos.
c) Criptografa visual: La criptografa es un rea de la
seguridad informtica y especficamente la criptografa
visual [2] es un rea que estudia la creacin de
algoritmos y modelos matemticos para encriptar una
imagen y esta no puede ser reconocida, solamente por
aquellos que necesitan saber dicha informacin.
II. METODOLOGA
a) Juego de la vida:

Para realizar este programa construimos dos matrices, la


primera tiene nmeros aleatorios para asignar vida a las
casillas de una matriz m*m, una vez que se construye esta
matriz, utilizamos un ciclo while (1) para hacer iteraciones
infinitas y nuestro mundo celular se modifique n veces. Para
resolver el problema ms fcil hacemos un recorte de
submatriz de la matriz de nmeros aleatorios y aplicamos
las reglas mediante las cuales determinaran si esa clula
tendr o no vida en la siguiente iteracin.
Hacemos doble ciclo for para recorrer cada elemento de la
submatriz y construimos otra matriz temporal de todos los
vecinos de esa casilla para posteriormente hacer una suma.
Finalmente colocamos en el cdigo una serie de if para
validar las condiciones.
b) Tringulo de Sierpinski:
Lo primero que tenemos que hacer es definir un vector,
estos sern los vrtices de nuestro tringulo equiltero
Partiendo (iteracin n=0) de la superficie del tringulo
equiltero. Seguidamente (iteracin n=1) se toman los
puntos medios de cada lado y se construyen a partir de ellos
un tringulo equiltero invertido de lado 1/2. Ahora
(iteracin n=2) se repite el proceso con cada uno de los tres
tringulos de lado 1/2 que quedan. Posteriormente se
recortan, esta vez, tres tringulos invertidos de lado 1/4. Si
se repite infinitamente el proceso se obtendr una figura
fractal denominada tringulo de Sierpinski.
c) Criptografa visual

Ledesma Domnguez Leonardo Ing. en Computacin 110 308314878

Universidad Nacional Autnoma de Mxico


Laboratorio de Procesamiento Digital de Imgenes Mdicas
Dr. Ernesto Moya Albor

Obtenemos los datos de una imagen en forma de matriz,


para cada pixel se construir una matriz de 2*2, se ocuparan
secuencias aleatorias que ms adelante se muestran en los
apndices, con las cuales asignaremos a un determinado
pixel, es importante decir que en las secuencias existen
complementos que ms adelante explicaremos para qu se
ocuparan. Esa submatriz se colocar en una matriz (imagen
1) de doble dimensin que la original y adems se
utilizaran reglas para crear una tercera matriz (imagen 2)
con esa informacin.

2
end
end
end
figure(2)
imagesc(A2)
colormap(gray(2))
mundo1=A2;
pause(0.01)
end

Para asignar a un pixel una matriz 2x2 de las secuencias, se


seguirn las siguientes reglas:
Cuando se trata de un pixel blanco (255) se elegir
aleatoriamente uno de los posibles bloques
(secuencias) y se escribir en la posicin
correspondiente en ambas imgenes de salida.
Cuando se trate de un pixel negro (0) se elegir de
forma aleatoria uno de los posibles bloques y se
escribir en la imagen 1 y su bloque
complementario en la imagen 2.
Una vez construidas las dos imgenes aplicaremos la
operacin and para cada uno de los pixeles con tal forma de
obtener un apilamiento entonces construiremos una cuarta
imagen resultado de ese apilamiento, que tendr un 50%
menor de contraste en comparacin de la original.
III. RESULTADOS
a) Juego de la vida:
clc; close all; clear all;
m=100;
n=100;
mundo1=rand(m,n);
mundo1=round(mundo1);
figure(1)
imagesc(mundo1)
colormap(gray(2))
A2=zeros(m,n);
while(1)
for i=2:m-1 %filas
for j=2:n-1 %columnas
celula=mundo1(i,j);
vecinos=mundo1(i-1:i+1,j-1:j+1);
N=sum(vecinos(:)); %sum(sum(A1))
if celula==0 %muerte celular
if(N==3) %regla 1
A2(i,j)=1;%nacer vida
else
A2(i,j)=0;
end
else
N=N-1;
if N==2 || N==3
A2(i,j)=1;
else
A2(i,j)=0;
end

Fig. 1. Resultado del programa del juego de la vida


b) Tringulo de Sierpinski
clc; close all; clear all;
N=100000;
x=[10 80 150];
y=[24 150 24];
r=round(2*rand(1))+1;
x1=x(r);
y1=y(r);
figure(1)
plot(x1,y1)
hold on
axis([10 150 24 150])
i=1;
while(i<N)
r=round(2*rand(1))+1;
x1=(x1+x(r))/2;
y1=(y1+y(r))/2;
hold on
plot(x1,y1)
pause(0.01)
end

Universidad Nacional Autnoma de Mxico


Laboratorio de Procesamiento Digital de Imgenes Mdicas
Dr. Ernesto Moya Albor

3
end
for i=1:512
for j=1:512
a=nueva(i,j);
b=nueva2(i,j);
if(and(a,b))
%disp('iguales')
origen(i,j)=255;
else
origen(i,j)=0;
end
end
end

Fig. 2. Tringulo de Sierpinski


c) Criptografa visual

Programa principal:
nueva=[];
nueva2=[];
origen=[];
a=1;
b=1;
aux=[];
aux2=[];
load img
figure
imagesc(A)
colormap(gray(256))
for i=1:256
for j=1:256
numb=A(i,j);
if ( (a<=511) && (b<=511))
aux=busca();
nueva(a,b)=aux(1,1);
nueva(a,b+1)=aux(1,2);
nueva(a+1,b)=aux(2,1);
nueva(a+1,b+1)=aux(2,2);
serie=aux;
aux2=complemento(serie,numb);
nueva2(a,b)=aux2(1,1);
nueva2(a,b+1)=aux2(1,2);
nueva2(a+1,b)=aux2(2,1);
nueva2(a+1,b+1)=aux2(2,2);
b=b+2;
end
if(b>511)
a=a+2;
b=1;
end

end

figure
imagesc(nueva)
colormap (gray(256))
figure
imagesc(nueva2)
colormap (gray(256))
figure
imagesc(origen)
colormap (gray(256))

Funcin Busca:
function matrix_B = busca()
num=round(rand(1)*10);
switch(num)
case 1
matrix_B=[255 255;0 0];
case 2
matrix_B=[255 255;0 0];
case 3
matrix_B=[0 0;255 255];
case 4
matrix_B=[0 0;255 255];
case 5
matrix_B=[255 0;255 0];
case 6
matrix_B=[0 255;0 255];
case 7
matrix_B=[255 0;0 255];
case 8
matrix_B=[255 0;0 255];
case 9
matrix_B=[0 255;255 0];
otherwise
matrix_B=[0 0;255 255];
end
end

Funcin Complemento:
function comp_B = complemento(serie,binario)
A=[255 255;0 0];
B=[0 0;255 255];
C=[255 0;255 0];

Universidad Nacional Autnoma de Mxico


Laboratorio de Procesamiento Digital de Imgenes Mdicas
Dr. Ernesto Moya Albor
D=[0 255;0 255];
E=[255 0;0 255];
F=[0 255;255 0];
if ((isequal (serie,A))==1)
if(binario==255)
comp_B=[255 255;0 0];
else
comp_B=[0 0; 255 255];
end
end
if ((isequal (serie,B))==1)
if(binario==255)
comp_B=[0 0;255 255];
else
comp_B=[255 255; 0 0];
end
end
if ((isequal (serie,C))==1)
if(binario==255)
comp_B=[255 0;255 0];
else
comp_B=[0 255; 0 255];
end
end
if ((isequal (serie,D))==1)
if(binario==255)
comp_B=[0 255;0 255];
else
comp_B=[255 0;255 0];
end
end
if ((isequal (serie,E))==1)
if(binario==255)
comp_B=[255 0;0 255];
else
comp_B=[0 255;255 0];
end
end
if ((isequal (serie,F))==1)
if(binario==255)
comp_B=[0 255;255 0];
else
comp_B=[255 0;0 255];
end
end

Fig. 4. Imagen Original

Fig. 5. Imagen 1

Fig. 6 Imagen 2

Universidad Nacional Autnoma de Mxico


Laboratorio de Procesamiento Digital de Imgenes Mdicas
Dr. Ernesto Moya Albor

Fig. 7 Imagen desencriptada


IV. CONCLUSIONES
La criptografa visual es muy utilizada en la seguridad
informtica, aunque existen otras herramientas para la
encriptacin de imgenes y archivos, es de bastante inters
para esta rea, una de las desventajas es el incremento de
memoria al doble e incluso si se quiere mejorar el nivel de
encriptacin esta memoria puede incrementarse en orden
exponencial, es decir entre ms quieres proteger un archivo
o imagen utilizaras mucha memoria. En cuestin de la
programacin, es bastante interesante lo que se puede hacer
con las imgenes y manejo de matrices, las aplicaciones
pueden ser muchas.
V. REFERENCIAS
[1]http://www.computerwoche.de/a/interaktivesprogrammieren-als-systems-schlager,1205421
[2]http://www.scielo.cl/scielo.php?pid=S071807642011000500013&script=sci_arttext
VI. APNDICE

Fig. 3. Bloques

Вам также может понравиться