]> git.llucax.com Git - z.facultad/61.03/tp.git/blob - bordet.m
Se expanden keywords del svn.
[z.facultad/61.03/tp.git] / bordet.m
1 % bordet.m\r
2 % Script de MathLab para detectar el borde de las imagenes.\r
3 \r
4 % Introduccion\r
5 %%%%%%%%%%%%%%%\r
6 clc\r
7 disp('   DETECTOR DE BORDES PARA MATHLAB');\r
8 disp('   ======== == ====== ==== =======');\r
9 disp(' ');\r
10 disp('Imagenes del MathLab: flujet, spine, gatlin2, clown, earth, mandrill');\r
11 disp(' ');\r
12 disp(' ');\r
13 \r
14 % Pregunta si quiere borrar todas las imagenes y variables\r
15 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
16 sBorrar = input('Desea borrar todos los datos anteriores (S/N)? ', 's');\r
17 disp(' ');\r
18 if (sBorrar == 'S') | (sBorrar == 's')\r
19         clear;\r
20 end\r
21 \r
22 % Entrada de la imagen\r
23 %%%%%%%%%%%%%%%%%%%%%%%\r
24 sArchivo = input ('Ingrese el nombre de la imagen (*.mat): ', 's');\r
25 load (sArchivo)\r
26 \r
27 % Entrada de la tolerancia de la deteccion de bordes\r
28 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
29 nTolerancia= input ('Ingrese la tolerancia para detectar los bordes (0 = sin tolerancia, 15 = mucha tolerancia): ');\r
30 \r
31 % Pregunta si quiere ativar la correccion de zonas constantes\r
32 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
33 sCorrect = input('Desea evitar que los intervalos constantes se detecten como bordes (S/N)? ', 's');\r
34 \r
35 % Crea una nueva figura y muestra la imagen a la que se le detectarán los bordes\r
36 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
37 clc\r
38 figure\r
39 image(X), colormap(copper)\r
40 disp('MOSTRANDO IMAGEN ORIGINAL. Presione cualquier tecla para continuar ...');\r
41 pause\r
42 \r
43 % Comienza a detectar los bordes, creando otra matriz con la imagen de los mismos\r
44 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
45 clc\r
46 disp(' CALCULANDO LOS BORDES. Espere por favor ...');\r
47 [m,n]=size(X);                                                                          % obtiene el tamaño de la matriz original\r
48 mBorde=ones(m,n);                                                                       % Crea la matriz borde iniciada en 1 (1 es Negro)\r
49 for i = 2: 1: m-1                                                                       % Recorre la matriz en busca de los bordes\r
50         for j = 2: 1: n-1\r
51                 if (sCorrect == 'S') | (sCorrect == 's')        % Si esta activada la correccion ...\r
52                         % Primero se fija que los valores que rodean al elemento actual y dicho elemento sean (al menos uno)\r
53                         %   distintos entre sí (dependiendo de la tolerancia). Esto evita que en los intervalos que la funcion\r
54                         %   es constante nos detecte un borde, ya que en ese caso, tambien cumple la ecuacion de Laplace pero no\r
55                         %   es un borde en realidad.\r
56                         if (abs(X(i+1, j) - X(i, j-1)) > nTolerancia) | (abs(X(i+1, j) - X(i, j)) > nTolerancia) | (abs(X(i+1, j) - X(i, j+1)) > nTolerancia) | (abs(X(i+1, j) - X(i-1, j)) > nTolerancia) | (abs(X(i-1, j) - X(i, j+1)) > nTolerancia) | (abs(X(i-1, j) - X(i, j)) > nTolerancia) | (abs(X(i-1, j) - X(i, j-1)) > nTolerancia) | (abs(X(i-1, j) - X(i+1, j)) > nTolerancia) | (abs(X(i, j+1) - X(i, j)) > nTolerancia) | (abs(X(i, j+1) - X(i, j-1)) > nTolerancia) | (abs(X(i, j+1) - X(i+1, j)) > nTolerancia) | (abs(X(i, j+1) - X(i-1, j)) > nTolerancia) | (abs(X(i, j-1) - X(i, j+1)) > nTolerancia) | (abs(X(i, j-1) - X(i, j)) > nTolerancia) | (abs(X(i, j-1) - X(i+1, j)) > nTolerancia) | (abs(X(i, j-1) - X(i-1, j)) > nTolerancia)\r
57                                 % Calcula el elemento actual aplicando la ecuacion de Laplace\r
58                                 nElemento = X(i+1, j) + X(i, j-1) + X(i, j+1) + X(i-1, j) - 4 * X(i, j);\r
59                                 if (abs(nElemento) <= nTolerancia)              % Para que cumpla con Laplace el elemento debe ser\r
60                                                                                                                 %   igual a cero, pero como se trata de una funcion\r
61                                                                                                                 %   discrete es muy comun que no de exactamente cero.\r
62                                                                                                                 %   Es por esto que uso la tolerancia.\r
63                                         mBorde(i, j) = 256;                                     % Si encontró el borde, le asigna un color alto (256 es blanco)\r
64                                 end % if abs(nElemento) <= nTolerancia\r
65                         end % if LARGO\r
66                 else\r
67                         % Calcula el elemento actual aplicando la ecuacion de Laplace\r
68                         nElemento = X(i+1, j) + X(i, j-1) + X(i, j+1) + X(i-1, j) - 4 * X(i, j);\r
69                         if (abs(nElemento) <= nTolerancia)              % Para que cumpla con Laplace el elemento debe ser\r
70                                                                                                         %   igual a cero, pero como se trata de una funcion\r
71                                                                                                         %   discrete es muy comun que no de exactamente cero.\r
72                                                                                                         %   Es por esto que uso la tolerancia.\r
73                                 mBorde(i, j) = 256;                                     % Si encontró el borde, le asigna un color alto (256 es blanco)\r
74                         end % if abs(nElemento) <= nTolerancia\r
75                 end % if (sCorrect == 'S') ...\r
76         end % for j = 1:1:n\r
77 end % for i = 1:1:m\r
78 disp(' ');\r
79 disp(' FINALIZO EL CALCULO DE LOS BORDES. Presione cualquier tecla para verlos ...'), pause\r
80 \r
81 % Crea una nueva figura y muestra el borde en ella\r
82 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
83 figure                                          \r
84 image(mBorde), colormap(gray(256))\r
85 \r
86 % Borra todas las variables temporales que usa el programa\r
87 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
88 clear sBorrar;\r
89 clear sArchivo;\r
90 clear nTolerancia;\r
91 clear nElemento;\r
92 clear sCorrect;\r
93 clear m;\r
94 clear n;\r
95 clear i;\r
96 clear j;\r
97 \r
98 % Mensaje de salida\r
99 %%%%%%%%%%%%%%%%%%%%\r
100 clc\r
101 disp(' ');\r
102 disp('  La matriz que contiene al borde se llama "nBorde".');\r
103 disp(' ');\r
104 disp('------------------------------------------------------------------------');\r
105 disp(' ');\r
106 disp('  Este programa fue desarrollado por Leandro Lucarella. PADRON: 77.891');\r
107 disp('     para la Facultad de Ingeniería de la Universidad de Buenos Aires.');\r
108 disp('     Catedra de Análisis Matemático II, curso 8.');\r
109 disp(' ');\r
110 disp('     Comentarios y/o sugerencias a: lluca@cnba.uba.ar       | (C) 1999');\r
111 disp(' ');\r
112 disp(' ');