CONVOLUCION UNIDIMENSIONAL EN LENGUAJE C

Páginas: 10 (2409 palabras) Publicado: 13 de junio de 2013
//CON ARREGLO UNIDIMENSIONAL

#include
#define T 1000000
int w;
double m[T];

double a(int r, int n){
   int i,j,p,inicio,fin,ancho,iniant,terant,anchoant;
   p=0;
   inicio=0;
   fin=0;
   iniant=0;
   terant=w-1;
   
   for(i=0;i0;j--){
      inicio += (((w-1)*j)+1);
   }

   for(i=r;ientra_ime+fila)+columna)  
#define c8b_elims(im,columna,fila)(*(im->entra_ims+fila)+columna) 
typedef byte img8b; /* Componente de imagen de 8 bits. */ 
/* Definición de la estructura canal. */  
typedef struct  
 {  
 int x;  
 int y;  
 img8b **entra_ime; /* Direcciones de las lineas. */  
 img8b **entra_ims;  
 img8b *ime;   /* Imagen entrante. */  
 img8b *ims;   /* Imagen saliente. */  
 } canal8b;  
 
A continuación se muestra la realización de un filtro enlenguaje C sobre un canal de imagen del tipo descrito en "Descripción de un canal de imagen"
Como ya se ha comentado todas las funciones de esta biblioteca comienzan por el prefijo c8b_ que indica que se trata de funciones que trabajan sobre canales de 8 bits. También existen las correspondientes funciones c16b_ que lo hacen sobre canales de 16 bits.
La entrada al filtro es la función c8b_filtra  lallamada es c8b_filtro(*imagen,*mascara). Imagen es una estructura que,  fundamentalmente tiene la lísta de canales que forman la imagen real. Por su parte mascara es la máscara de convolución que se va a emplear. Esta función simplemente va tomando uno a uno los canales de la imagen y los va pasando por el filtro. 
c8b_filtro llama a la función c8b_filtramcanal y como parámtros se le pasa ladirección del canal a filtrar y la de la máscara a emplear. c8b_filtrmcanal(*canal,*mascara). Esta función es la encargada de llamar al filtro verdadero. La imagen a filtrar (o sea, el canal) se divide en 9 partes. Como sabemos la máscara de filtrado es una matriz cuadrada peor en las zonas cercanas a los bordes de la imagen puede no ser posible efectuar el filtrado con la máscara completa. Por ejemplo,si tenemos una máscara de 3x3, solo se puede emplear en las zona de la imagen que está a más de 3 pixels del borde. Así la segunda línea superior solo se puede convolucionar con parte de la máscara. Pues bien l aimagen se divide en 9 partes correspondientes a los distintos casos en que nos podemos encontrar: Esquina superior izquierda, listón superior, esquina superior derecha, listón izquierdo,zona central donde vale toda la máscara, listón derecho, esquina inferior izquierda, listón inferior y esquina inferior derecha. El tamaño de cada zona depende del tamaño de la máscara. Así en el ejemplo de uan máscara de 3x3 la esquina superior izquierda será el cuadrado de 2x2 correspondiente y el liston inferior será la linea de 2 pixels de grosor que no llega hasta los bordes. 
Cada una deestas nueve zonas tiene una función de filtrado optimizada para ella con lo que esperamos reducir tiempo de cálculo en las comparaciones.
El modelo de filtrado puede ser cualquiera de estas funciones pero prefiero emplear la función de filtrado central.c8b_filtrom_m. 
  
Como ya se dijo en  "Descripción de un canal de imagen" la estructura c8b_canal contiene dos campos de imagen un dos listas dedirecciones que apuntan al principio de cada una de las líneas de la imagen. De esta manera ahorramos tiempo en la determinación de la dirección correcta del pixel. 
Hay dos imagenes ya que una es la original y la otra (la sombra) es donde se hacen los cálculos. 
Para localizar un punto 
#define c8b_elime(im,columna,fila) (*(im->entra_ime+fila)+columna) 
  
 
c8b_filtrom_m(c,m)  
canal8b*c;  
mascarar *m;  
{  
int i,j,k,l;  
img8b **pce,**pcs; /* Puntero a la imagen entrante, a la imagen saliente,  
  a las tablas de entrada para las dos im genes. */  
float cpix;  
float *pm; 
pce=c->entra_ime;  
pcs=c->entra_ims; 
for (i=m->semilado;iy-m->semilado;i++) {  
 for (j=m->semilado;jx-m->semilado;j++) {  
  for (cpix=0,pm=m->ne,k=-m->semilado;ksemilado+1;k++) {  
   for...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Programa de arreglos unidimensionales en lenguaje c
  • Arreglos UnidimEnsionales En C
  • Arreglos Unidimensionales Y Multidimensionales En C++
  • LENGUAJE C
  • Lenguaje c
  • lenguaje c
  • Lenguaje C#
  • Lenguaje C

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS