--- /dev/null
+% bordet.m\r
+% Script de MathLab para detectar el borde de las imagenes.\r
+\r
+% Introduccion\r
+%%%%%%%%%%%%%%%\r
+clc\r
+disp(' DETECTOR DE BORDES PARA MATHLAB');\r
+disp(' ======== == ====== ==== =======');\r
+disp(' ');\r
+disp('Imagenes del MathLab: flujet, spine, gatlin2, clown, earth, mandrill');\r
+disp(' ');\r
+disp(' ');\r
+\r
+% Pregunta si quiere borrar todas las imagenes y variables\r
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
+sBorrar = input('Desea borrar todos los datos anteriores (S/N)? ', 's');\r
+disp(' ');\r
+if (sBorrar == 'S') | (sBorrar == 's')\r
+ clear;\r
+end\r
+\r
+% Entrada de la imagen\r
+%%%%%%%%%%%%%%%%%%%%%%%\r
+sArchivo = input ('Ingrese el nombre de la imagen (*.mat): ', 's');\r
+load (sArchivo)\r
+\r
+% Entrada de la tolerancia de la deteccion de bordes\r
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
+nTolerancia= input ('Ingrese la tolerancia para detectar los bordes (0 = sin tolerancia, 15 = mucha tolerancia): ');\r
+\r
+% Pregunta si quiere ativar la correccion de zonas constantes\r
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
+sCorrect = input('Desea evitar que los intervalos constantes se detecten como bordes (S/N)? ', 's');\r
+\r
+% Crea una nueva figura y muestra la imagen a la que se le detectarán los bordes\r
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
+clc\r
+figure\r
+image(X), colormap(copper)\r
+disp('MOSTRANDO IMAGEN ORIGINAL. Presione cualquier tecla para continuar ...');\r
+pause\r
+\r
+% Comienza a detectar los bordes, creando otra matriz con la imagen de los mismos\r
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
+clc\r
+disp(' CALCULANDO LOS BORDES. Espere por favor ...');\r
+[m,n]=size(X); % obtiene el tamaño de la matriz original\r
+mBorde=ones(m,n); % Crea la matriz borde iniciada en 1 (1 es Negro)\r
+for i = 2: 1: m-1 % Recorre la matriz en busca de los bordes\r
+ for j = 2: 1: n-1\r
+ if (sCorrect == 'S') | (sCorrect == 's') % Si esta activada la correccion ...\r
+ % Primero se fija que los valores que rodean al elemento actual y dicho elemento sean (al menos uno)\r
+ % distintos entre sí (dependiendo de la tolerancia). Esto evita que en los intervalos que la funcion\r
+ % es constante nos detecte un borde, ya que en ese caso, tambien cumple la ecuacion de Laplace pero no\r
+ % es un borde en realidad.\r
+ 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
+ % Calcula el elemento actual aplicando la ecuacion de Laplace\r
+ nElemento = X(i+1, j) + X(i, j-1) + X(i, j+1) + X(i-1, j) - 4 * X(i, j);\r
+ if (abs(nElemento) <= nTolerancia) % Para que cumpla con Laplace el elemento debe ser\r
+ % igual a cero, pero como se trata de una funcion\r
+ % discrete es muy comun que no de exactamente cero.\r
+ % Es por esto que uso la tolerancia.\r
+ mBorde(i, j) = 256; % Si encontró el borde, le asigna un color alto (256 es blanco)\r
+ end % if abs(nElemento) <= nTolerancia\r
+ end % if LARGO\r
+ else\r
+ % Calcula el elemento actual aplicando la ecuacion de Laplace\r
+ nElemento = X(i+1, j) + X(i, j-1) + X(i, j+1) + X(i-1, j) - 4 * X(i, j);\r
+ if (abs(nElemento) <= nTolerancia) % Para que cumpla con Laplace el elemento debe ser\r
+ % igual a cero, pero como se trata de una funcion\r
+ % discrete es muy comun que no de exactamente cero.\r
+ % Es por esto que uso la tolerancia.\r
+ mBorde(i, j) = 256; % Si encontró el borde, le asigna un color alto (256 es blanco)\r
+ end % if abs(nElemento) <= nTolerancia\r
+ end % if (sCorrect == 'S') ...\r
+ end % for j = 1:1:n\r
+end % for i = 1:1:m\r
+disp(' ');\r
+disp(' FINALIZO EL CALCULO DE LOS BORDES. Presione cualquier tecla para verlos ...'), pause\r
+\r
+% Crea una nueva figura y muestra el borde en ella\r
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
+figure \r
+image(mBorde), colormap(gray(256))\r
+\r
+% Borra todas las variables temporales que usa el programa\r
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\r
+clear sBorrar;\r
+clear sArchivo;\r
+clear nTolerancia;\r
+clear nElemento;\r
+clear sCorrect;\r
+clear m;\r
+clear n;\r
+clear i;\r
+clear j;\r
+\r
+% Mensaje de salida\r
+%%%%%%%%%%%%%%%%%%%%\r
+clc\r
+disp(' ');\r
+disp(' La matriz que contiene al borde se llama "nBorde".');\r
+disp(' ');\r
+disp('------------------------------------------------------------------------');\r
+disp(' ');\r
+disp(' Este programa fue desarrollado por Leandro Lucarella. PADRON: 77.891');\r
+disp(' para la Facultad de Ingeniería de la Universidad de Buenos Aires.');\r
+disp(' Catedra de Análisis Matemático II, curso 8.');\r
+disp(' ');\r
+disp(' Comentarios y/o sugerencias a: lluca@cnba.uba.ar | (C) 1999');\r
+disp(' ');\r
+disp(' ');
\ No newline at end of file