Descripción y Algoritmos de las Subrutinas de Filtrado de Imágenes
Enviado por Programa Chuletas y clasificado en Informática y Telecomunicaciones
Escrito el en
español con un tamaño de 8,53 KB
Subrutina NFiltrados
Función: NFiltrados(nfiltrados, filtro, comp, filtrec)
Parámetros:
oper: (Entrada, por valor) Indica la operación a realizar.
Valor de retorno:
NFiltrados: (r29) Devuelve el valor de la variable estáticanF.
Algoritmo:
- Si
oper>= 0, inicializanFaoper.NFiltrados=nF. - Si
oper< 0, decrementanF. SinF< 0, entoncesnF= 0 yNFiltrados=nF. - Retorna
NFiltradosen r29.
Subrutina Sqrt
Función: rc = Sqrt(Num)
Parámetros:
num: (Entrada, por valor)
Valor de retorno:
rc: (r29) Aproximación entera de la raíz cuadrada deNum.
Algoritmo:
- Si
Num< 2, entoncesrc=Num. a=Num;b= 1- Repetir mientras (
a-b) > 1:a= (a+b) / 2;b=Num/a;- Si
b>a, intercambiarayb.
- Retornar
rc=ben r29.
Subrutina Comp
Función: Diferencia = Comp(Imagen1, Imagen2)
Parámetros:
Imagen1: (Entrada, por dirección)M,N, y MxN elementos (1 byte c/u).Imagen2: (Entrada, por dirección)M,N, y MxN elementos (1 byte c/u).
Valor de retorno:
Diferencia: (r29) Diferencia entre las imágenes.
Algoritmo:
- Inicializar
Dif= 0. - Recorrer los MxN píxeles, incrementando
Difcon el cuadrado de la diferencia:Dif=Dif+ (Imagen1ij-Imagen2ij)2. Diferencia=Sqrt(Dif).- Retornar
Diferenciaen r29.
Subrutina SubMatriz
Función: SubMatriz(Imagen, SubImg, i, j)
Parámetros:
Imagen: (Entrada, por dirección)M,N, y MxN elementos (1 byte c/u).SubImg: (Salida, por dirección) 9 elementos (1 byte c/u).i: (Entrada, por valor) Número de fila (1..M-2).j: (Entrada, por valor) Número de columna (1..N-2).
Descripción: Copia la submatriz de Imagen centrada en [i, j] a SubImg.
Subrutina ValorPixel
Función: VPixel = ValorPixel(SubImg, MFiltro)
Parámetros:
SubImg: (Entrada, por dirección) 9 elementos (1 byte c/u).MFiltro: (Entrada, por dirección) 18 valores (enteros con signo) de la matriz 3x6 del filtro.
Valor de retorno:
VPixel: (r29) Valor provisional del píxel filtrado (entero de 32 bits).
Descripción: Aplica MFiltro a SubImg.
Algoritmo:
- Inicializar
ACC= 0. - Inicializar punteros al inicio de
SubImgyMFiltro. - Recorrer los 9 pares de elementos, multiplicándolos y acumulando en
ACC. En cada iteración: Pasar el píxel a rxx, multiplicar rxx * 256 * N / D, y acumular enACC. ACC=ACC/ 256.- r29 =
ACC. Retornar.
Subrutina FilPixel
Función: VPixel = FilPixel(Imagen, i, j, MFiltro)
Parámetros:
Imagen: (Entrada, por dirección)M,N, y MxN elementos (1 byte c/u).i: (Entrada, por valor) Número de fila.j: (Entrada, por valor) Número de columna.MFiltro: (Entrada, por dirección) 18 valores de la matriz 3x6 del filtro.
Valor de retorno:
VPixel: (r29) Valor del píxel filtrado (0-255).
Descripción: Aplica el filtro al píxel [i, j] de la imagen.
Algoritmo:
- Si [i, j] está en el borde (i=0, j=0, i=M-1, o j=N-1), copiar el valor del píxel a r29 y saltar al último paso.
- Reservar espacio para
SubImg(3x3 bytes). - Llamar a
SubMatriz(Imagen, SubImg, i, j). - Llamar a
r29 = ValorPixel(SubImg, MFiltro). - Si r29 < 0, r29 = 0. Si r29 > 255, r29 = 255.
- Retornar con el valor del píxel filtrado en r29.
Subrutina Filtro
Función: Filtro(Imagen, ImFiltrada, MFiltro)
Parámetros:
Imagen: (Entrada, por dirección)M,N, y MxN elementos (1 byte c/u).ImFiltrada: (Salida, por dirección)M,N, y MxN elementos (1 byte c/u).MFiltro: (Entrada, por dirección) 18 valores de la matriz 3x6 del filtro.
Descripción: Aplica el filtro a la imagen de entrada.
Algoritmo:
- Copiar
MyNa la imagen filtrada. - Desde
i= 0 hastaM-1:- Desde
j= 0 hastaN-1:- Llamar a
FilPixel(Imagen, i, j, MFiltro). - Almacenar el valor de retorno en
ImFiltrada[i, j].
- Llamar a
- Desde
- Retornar.
Subrutina FiltRec
Función: Diferencia = FiltRec(ImagenIn, ImagenOut, MFiltro, NCambios)
Parámetros:
ImagenIn: (Entrada, por dirección)M,N, y MxN elementos.ImagenOut: (Salida, por dirección)M,N, y MxN elementos.MFiltro: (Entrada/Salida, por dirección) 18 valores de la matriz del filtro.NCambios: (Entrada, por valor) Diferencia entre imágenes para la recursividad.
Valor de retorno:
Diferencia: (r29) Diferencia entre las últimas imágenes o -1.
Descripción: Filtra ImagenIn recursivamente, dejando el resultado en ImagenOut.
Condiciones de salida:
NFiltrados= 0.- Diferencia entre imágenes <
NCambios.
Algoritmo:
- Reservar espacio para
ImagenTmp. - Llamar a
Filtro(ImagenIn, ImagenOut, MFiltro). - Copiar
ImagenOutaImagenTmp. - Llamar a
NFiltrados(oper < 0). Si el resultado es 0, r29 = -1 y saltar al último paso. - Llamar a
Comp(ImagenIn, ImagenOut). Si r29 <NCambios, r29 = r29 y saltar al último paso. - Llamar a
FiltRec(ImagenTmp, ImagenOut, MFiltro, NCambios). - Retornar.
Consideraciones adicionales
- El paso de parámetros es por pila, por dirección o por valor.
subu r10, r11, 0copia r11 a r10.- La pila crece proporcionalmente a las llamadas recursivas a
FiltRec. - Al inicio de
Filtro, se carga el número de columnas en r5. SubMatrizaccede al menos a tres filas, excepto en bordes.jmp(r1)enFiltRecse ejecuta igual que la primera instrucción deFiltRec.- Las imágenes usan números de 8 y 32 bits.
- Para cargar
ImagenA[1, 2]en r10 (ImagenAde 8x6 en r20):ld.bu r10, r20, 16.