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ática nF.

Algoritmo:

  • Si oper >= 0, inicializa nF a oper. NFiltrados = nF.
  • Si oper < 0, decrementa nF. Si nF < 0, entonces nF = 0 y NFiltrados = nF.
  • Retorna NFiltrados en 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 de Num.

Algoritmo:

  • Si Num < 2, entonces rc = Num.
  • a = Num; b = 1
  • Repetir mientras (a - b) > 1:
    • a = (a + b) / 2; b = Num / a;
    • Si b > a, intercambiar a y b.
  • Retornar rc = b en 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 Dif con el cuadrado de la diferencia: Dif = Dif + (Imagen1ij - Imagen2ij)2.
  • Diferencia = Sqrt(Dif).
  • Retornar Diferencia en 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 SubImg y MFiltro.
  • 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 en ACC.
  • 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 M y N a la imagen filtrada.
  • Desde i = 0 hasta M-1:
    • Desde j = 0 hasta N-1:
      • Llamar a FilPixel(Imagen, i, j, MFiltro).
      • Almacenar el valor de retorno en ImFiltrada[i, j].
  • 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:

  1. NFiltrados = 0.
  2. Diferencia entre imágenes < NCambios.

Algoritmo:

  • Reservar espacio para ImagenTmp.
  • Llamar a Filtro(ImagenIn, ImagenOut, MFiltro).
  • Copiar ImagenOut a ImagenTmp.
  • 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, 0 copia 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.
  • SubMatriz accede al menos a tres filas, excepto en bordes.
  • jmp(r1) en FiltRec se ejecuta igual que la primera instrucción de FiltRec.
  • Las imágenes usan números de 8 y 32 bits.
  • Para cargar ImagenA[1, 2] en r10 (ImagenA de 8x6 en r20): ld.bu r10, r20, 16.

Entradas relacionadas: