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, inicializanF
aoper
.NFiltrados
=nF
. - Si
oper
< 0, decrementanF
. SinF
< 0, entoncesnF
= 0 yNFiltrados
=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 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
, intercambiara
yb
.
- 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
yMFiltro
. - 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
M
yN
a 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
ImagenOut
aImagenTmp
. - 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)
enFiltRec
se 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 (ImagenA
de 8x6 en r20):ld.bu r10, r20, 16
.