<?xml version="1.0" encoding="ISO-8859-1"?><article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<front>
<journal-meta>
<journal-id>1815-5928</journal-id>
<journal-title><![CDATA[Ingeniería Electrónica, Automática y Comunicaciones]]></journal-title>
<abbrev-journal-title><![CDATA[EAC]]></abbrev-journal-title>
<issn>1815-5928</issn>
<publisher>
<publisher-name><![CDATA[Universidad Tecnológica de La Habana José Antonio Echeverría, Cujae]]></publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id>S1815-59282013000200002</article-id>
<title-group>
<article-title xml:lang="es"><![CDATA[Diseño de bloques para el procesado de imágenes en lenguaje de descripción de hardware]]></article-title>
<article-title xml:lang="en"><![CDATA[Design of Processing Image Blocks in Hardware Description Language]]></article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Perdomo Hourné]]></surname>
<given-names><![CDATA[Elias Augusto]]></given-names>
</name>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Garcés-Socarrás]]></surname>
<given-names><![CDATA[Luis Manuel]]></given-names>
</name>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Cabrera Sarmiento]]></surname>
<given-names><![CDATA[Alejandro José]]></given-names>
</name>
</contrib>
</contrib-group>
<aff id="A01">
<institution><![CDATA[,Instituto Superior Politécnico José Antonio Echeverría, Cujae Departamento de Automática y Computación ]]></institution>
<addr-line><![CDATA[La Habana ]]></addr-line>
<country>Cuba</country>
</aff>
<pub-date pub-type="pub">
<day>00</day>
<month>08</month>
<year>2013</year>
</pub-date>
<pub-date pub-type="epub">
<day>00</day>
<month>08</month>
<year>2013</year>
</pub-date>
<volume>34</volume>
<numero>2</numero>
<fpage>9</fpage>
<lpage>18</lpage>
<copyright-statement/>
<copyright-year/>
<self-uri xlink:href="http://scielo.sld.cu/scielo.php?script=sci_arttext&amp;pid=S1815-59282013000200002&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://scielo.sld.cu/scielo.php?script=sci_abstract&amp;pid=S1815-59282013000200002&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://scielo.sld.cu/scielo.php?script=sci_pdf&amp;pid=S1815-59282013000200002&amp;lng=en&amp;nrm=iso"></self-uri><abstract abstract-type="short" xml:lang="es"><p><![CDATA[El presente trabajo, «Diseño de bloques para el procesado de imágenes en lenguaje de descripción de hardware», desarrolla bloques de procesado de imágenes para la biblioteca de XSGImgLib, utilizando el flujo de diseño basado en lenguaje de descripción de hardware (HDL), incrementando las opciones de configuración de los algoritmos implementados en el flujo de diseño basado en modelos de XSG y la velocidad de ejecución. Para el desarrollo del trabajo se realiza un estudio de las arquitecturas de procesado de imágenes para hardware reconfigurable utilizando lenguaje de descripción de hardware. A partir de este estudio se diseñan, comprueban e implementan bloques de procesado de imágenes para la biblioteca XSGImgLib utilizando lenguaje de descripción de hardware. Como logros fundamentales del trabajo se obtienen bloques configurables que pueden cambiar el tamaño de la ventana en tiempo de diseño. Estos bloques no disminuyen el desempeño con respecto a los bloques anteriores si no que en muchos casos lo mejoran.]]></p></abstract>
<abstract abstract-type="short" xml:lang="en"><p><![CDATA[The present paper, «Design of Processing Image Blocks in Hardware Description Language», develop images processing blocks for the XSGImgLib library, using the model design flow based on hardware description language (HDL), increasing the configuration options of the implemented algorithm and the execution speed. In order to develop this project an study of images processing architectures for FPGA using hardware description language was carried out. As a result of this study were designed, tested and implemented processing images blocks for the XSGImgLib library using hardware description language. As main result of the project was obtained settable blocks that can change the Windows size in design time. Compared with the XSGImgLib previous blocks, in many cases the behavior is improved.]]></p></abstract>
<kwd-group>
<kwd lng="es"><![CDATA[procesado de imágenes]]></kwd>
<kwd lng="es"><![CDATA[XSGImgLib]]></kwd>
<kwd lng="es"><![CDATA[HDL]]></kwd>
<kwd lng="es"><![CDATA[FPGA]]></kwd>
<kwd lng="en"><![CDATA[image processing]]></kwd>
<kwd lng="en"><![CDATA[XSGImgLib]]></kwd>
<kwd lng="en"><![CDATA[HDL]]></kwd>
<kwd lng="en"><![CDATA[FPGA]]></kwd>
</kwd-group>
</article-meta>
</front><body><![CDATA[  <font size="2" face="Verdana"> </font>     <P align="right"><font size="2" face="Verdana"><strong>ARTICULO  ORIGINAL</strong></font></p>    <p>&nbsp;</p>    <p><font size="4" face="Verdana"><B>Dise&ntilde;o  de bloques para el procesado de im&aacute;genes en lenguaje de descripci&oacute;n  de hardware </B></font></p>    <p>&nbsp;</p>    <p><strong><font size="2"><font size="3" face="Verdana">Design  of Processing Image Blocks in Hardware Description Language</font></font></strong></p>    <p>&nbsp;</p>    <p>&nbsp;</p>     <p><font size="2"><b><font face="Verdana">Elias Augusto Perdomo Hourn&eacute;,    Luis Manuel Garc&eacute;s-Socarr&aacute;s, Alejandro Jos&eacute; Cabrera Sarmiento</font>    </b> </font></p>     <p><font size="2" face="Verdana">Departamento  de Autom&aacute;tica y Computaci&oacute;n, Instituto Superior Polit&eacute;cnico  Jos&eacute; Antonio Echeverr&iacute;a, Cujae, La Habana, Cuba.</font> <font size="2" face="Verdana"><U><FONT COLOR="#0000ff"><a href="mailto:elias@electrica.cujae.edu.cu">elias@electrica.cujae.edu.cu</a></FONT></U></font>  , <font size="2" face="Verdana"><U><FONT  COLOR="#0000ff"><a href="mailto:lmgarcess@electrica.cujae.edu.cu">lmgarcess@electrica.cujae.edu.cu</a></FONT></U></font>  , <font size="2" face="Verdana"><U><FONT COLOR="#0000ff"><a href="mailto:alex@electrica.cujae.edu.cu">alex@electrica.cujae.edu.cu</a></FONT></U></font></p>    ]]></body>
<body><![CDATA[<p>&nbsp;</p>    <p>&nbsp;</p><hr>      <p><font size="2"><b><font face="Verdana">RESUMEN </font></b></font></p>    <P><font size="2" face="Verdana">El  presente trabajo, &#171;Dise&ntilde;o de bloques para el procesado de im&aacute;genes  en lenguaje de descripci&oacute;n de hardware&#187;, desarrolla bloques de procesado  de im&aacute;genes para la biblioteca de XSGImgLib, utilizando el flujo de dise&ntilde;o  basado en lenguaje de descripci&oacute;n de hardware (HDL), incrementando las  opciones de configuraci&oacute;n de los algoritmos implementados en el flujo de  dise&ntilde;o basado en modelos de XSG y la velocidad de ejecuci&oacute;n. </font><font size="2" face="Verdana">Para  el desarrollo del trabajo se realiza un estudio de las arquitecturas de procesado  de im&aacute;genes para hardware reconfigurable utilizando lenguaje de descripci&oacute;n  de hardware. A partir de este estudio se dise&ntilde;an, comprueban e implementan  bloques de procesado de im&aacute;genes para la biblioteca XSGImgLib utilizando  lenguaje de descripci&oacute;n de hardware. </font><font size="2" face="Verdana">Como  logros fundamentales del trabajo se obtienen bloques configurables que pueden  cambiar el tama&ntilde;o de la ventana en tiempo de dise&ntilde;o. Estos bloques  no disminuyen el desempe&ntilde;o con respecto a los bloques anteriores si no  que en muchos casos lo mejoran. </font></p>    <P><font size="2" face="Verdana"><strong>Palabras  claves:</strong> procesado de im&aacute;genes, XSGImgLib, HDL, FPGA. </font>    <br>  </p><hr> <font size="2"><b><font face="Verdana">ABSTRACT</font></b></font>     <P><font size="2" face="Verdana">The  present paper, &#171;Design of Processing Image Blocks in Hardware Description  Language&#187;, develop images processing blocks for the XSGImgLib library, using  the model design flow based on hardware description language (HDL), increasing  the configuration options of the implemented algorithm and the execution speed.  </font><font size="2"><font face="Verdana">In order to develop this project an  study of images processing architectures for FPGA using hardware description language  was carried out. As a result of this study were designed, tested and implemented  processing images blocks for the XSGImgLib library using hardware description  language. As main result of the project was obtained settable blocks that can  change the Windows size in design time. Compared with the XSGImgLib previous blocks,  in many cases the behavior is improved. </font> </font></p>    <P><font size="2"><font face="Verdana"><strong>Key  words:</strong> image processing, XSGImgLib, HDL, FPGA. </font> </font>    <br> </p><hr>      <p>&nbsp;</p>    ]]></body>
<body><![CDATA[<p>&nbsp;</p>    <p><font size="2"><font size="3" face="Verdana"><strong>INTRODUCCION</strong></font></font></p>    <p>&nbsp;</p>    <P><font size="2" face="Verdana">Los  algoritmos de procesamiento digital de im&aacute;genes (DIP) presentan, en general,  una gran carga computacional e imponen serias restricciones temporales para asegurar  la operaci&oacute;n en tiempo real. Por este motivo la inclusi&oacute;n de algoritmos  de procesado de visi&oacute;n en sistemas empotrados con recursos de c&aacute;lculo  limitados, requiere la aplicaci&oacute;n de m&eacute;todos que permitan acelerar  su ejecuci&oacute;n [1], [2]. La implementaci&oacute;n sobre hardware reconfigurable  de estos algoritmos surge de la necesidad de cumplir con una serie de requisitos,  entre ellos: velocidad de procesamiento, flexibilidad, costo, fiabilidad y tiempo  de desarrollo [3], [4]. </font></p>    <P><font size="2" face="Verdana">La utilizaci&oacute;n  de estos dispositivos para la implementaci&oacute;n de algoritmos de procesado  de im&aacute;genes, permite aumentar la velocidad de ejecuci&oacute;n con respecto  a las soluciones software. No obstante, su uso suele estar condicionado por la  disponibilidad de recursos en el dispositivo. La estructura de arreglos de compuertas  y registros en paralelo de los arreglos de compuertas programables (FPGA) hace  de las mismas una opci&oacute;n viable para explotar el paralelismo de datos de  las im&aacute;genes o tramas de v&iacute;deos. Estas pueden ser utilizadas para  realizar operaciones completas o para pre-procesar los datos antes de enviarlos  a un Procesador digital de se&ntilde;ales (DSP) est&aacute;ndar o a un microprocesador  [5]. </font></p>    <P><font size="2" face="Verdana">Un dise&ntilde;o para FPGA presenta  varias opciones para la implementaci&oacute;n del algoritmo, producto de la gran  variedad de lenguajes existentes en el mercado. Estos lenguajes en su mayor&iacute;a  no permiten la portabilidad de una arquitectura a otra, por lo tanto se hace necesario  escoger bien el lenguaje de di-se&ntilde;o de hardware (HDL) en la que los algoritmos  FPGA van a ser dise&ntilde;ados. </font></p>    <P><font size="2" face="Verdana">En  los &uacute;ltimos a&ntilde;os, el lenguaje de dise&ntilde;o de hardware VHSIC  (Very High Speed Integrated Circuit) (VHDL), se ha convertido en una especie de  est&aacute;n-dar de la industria para el dise&ntilde;o de hardware de alto nivel.  Dado que es un est&aacute;ndar abierto de la norma IEEE, es apoyado por una gran  variedad de herramientas de dise&ntilde;o El desarrollo de c&oacute;digo VHDL  tiene la ventaja de ser en gran medida independiente del dispositivo, lo que significa  que la mayor parte del c&oacute;digo puede ser compilado para cualquier dispositivo.  </font></p>    <P><font size="2" face="Verdana">El VHDL permite crear nuevos bloques  que no existen en las librer&iacute;as de XSG para que se adapte a las necesidades  del usuario y dado que permite la reutilizaci&oacute;n de c&oacute;digo puede  configurarse estas arquitecturas en tiempo de dise&ntilde;o, lo cual es imposible  en XSG, para la inclusi&oacute;n del c&oacute;digo VHDL se usa el bloque Black  Box de Matlab, este modelo reproduce las entradas y las salidas descritas en el  c&oacute;digo para que interact&uacute;en con el resto del flujo basado en modelos  que posibilita el Matlab. </font></p>    <P><font size="2" face="Verdana">En este  art&iacute;culo se describe el empleo de t&eacute;cnicas de dise&ntilde;o basadas  en HDL, en combinaci&oacute;n con la herramienta XSG, para evaluar distintas opciones  de implementaci&oacute;n de bloques configurables de procesamiento de im&aacute;genes  y se analizan los efectos (en cuanto a recursos consumidos y velocidad de operaci&oacute;n)  relacionados con la configuraci&oacute;n de los distintos par&aacute;metros de  dise&ntilde;o. </font></p>    <P>&nbsp;</p>    ]]></body>
<body><![CDATA[<P><font size="3" face="Verdana"><B>ARQUITECTURAS  DE PROCESADO DE IM&Aacute;GENES</B> </font></p>    <P>&nbsp;</p>    <P><font size="2" face="Verdana">El  filtrado espacial basado en ventana es una operaci&oacute;n espacial en el procesado  digital de imagen, en el cual se modifica el valor de cada p&iacute;xel de acuerdo  a los p&iacute;xeles que lo rodean; se trata de transformar los niveles originales  de tal forma que se parezcan o diferencien m&aacute;s de los correspondientes  a los p&iacute;xeles cercanos. Estas operaciones se clasifican de acuerdo a la  linealidad de los algo-ritmos a aplicar en filtros de procesado lineal y filtros  de procesado no lineal. </font></p>    <P><font size="2" face="Verdana">El procesado  lineal de im&aacute;genes es todo aquel algoritmo de procesamiento que utiliza  una transformaci&oacute;n lineal para lograr la imagen resultante. La convoluci&oacute;n  de dos dimensiones es la operaci&oacute;n caracter&iacute;stica de este procesamiento.  </font></p>    <P><font size="2" face="Verdana">El filtrado espacial no lineal permite  reemplazar el p&iacute;xel a procesar por el resultado de una operaci&oacute;n  no lineal. La operaci&oacute;n caracter&iacute;stica de este tipo de procesado  es el ordenamiento, aunque otros tipos de procesados no espaciales (exponencial  y logar&iacute;tmico) se incluyen en esta categor&iacute;a. </font></p>    <P><font size="2" face="Verdana"><B>1.1.  FILTRO DE PROCESADO LINEAL</B> </font></p>    <P><font size="2" face="Verdana">La  t&eacute;cnica de convoluci&oacute;n permite diversos resultados en el procesamiento  de im&aacute;genes, ya que con esta se realizan operaciones tales como la detecci&oacute;n  de bordes, el realce y el suavizado de la imagen. La implementaci&oacute;n de  este tipo de algoritmo sobre hardware reconfigurable ha encontrado aplicaciones  pr&aacute;cticas en diferentes &aacute;reas, siendo una necesidad com&uacute;n  la rapidez en la ejecuci&oacute;n de los mismos [2], [3], [6], [7], [8]. </font></p>    <P><font size="2" face="Verdana"><B>1.1.1.  CONVOLUCI&Oacute;N DE IM&Aacute;GENES</B> </font></p>    <P><font size="2" face="Verdana">La  convoluci&oacute;n es un tipo de morfolog&iacute;a que surge antes que la misma,  y genera m&aacute;s efectos de gradientes en escala de grises, en lugar de los  efectos de forma binaria que la morfolog&iacute;a t&iacute;picamente genera. Esto  se debe a que, a menudo, est&aacute; presentada como una operaci&oacute;n muy  distinta a la morfolog&iacute;a y una que es fundamental para el procesamiento  de im&aacute;genes. Muchas de las etapas de un sistema de procesado lineal de  im&aacute;genes se basan en la operaci&oacute;n matem&aacute;tica de convoluci&oacute;n  de la imagen, representada por una matriz de dos dimensiones, con otra matriz  (de <img src="/img/revistas/eac/v34n2/v0102213.jpg" width="89" height="15">  p&iacute;xeles en la mayor&iacute;a de los casos) que es lo que se denomina n&uacute;cleo  o kernel de convoluci&oacute;n [7]. </font></p>    
<P><font size="2" face="Verdana">La  operaci&oacute;n de convoluci&oacute;n en dos dimensiones realiza un promedio  del valor de todos los p&iacute;xeles en el vecindario especificado. Es decir  multiplica el valor de cada p&iacute;xel cercano por la cantidad dada en el kernel  y luego suma el resultado de las operaciones anteriores para producir el p&iacute;xel  modificado. As&iacute;, cada p&iacute;xel en la imagen final contiene una peque&ntilde;a  parte de los p&iacute;xeles alrededor de este. </font></p>    ]]></body>
<body><![CDATA[<P><font size="2" face="Verdana">La  funci&oacute;n A de una imagen de<img src="/img/revistas/eac/v34n2/v0202213.jpg" width="55" height="19">  p&iacute;xeles, y la matriz de convoluci&oacute;n <img src="/img/revistas/eac/v34n2/v0302213.jpg" width="14" height="14">  de <img src="/img/revistas/eac/v34n2/v0402213.jpg" width="131" height="20">  elementos (siendo normalmente <img src="/img/revistas/eac/v34n2/v0502213.jpg" width="120" height="18">),  dado en la <a href="#e1">Ecuaci&oacute;n 1</a>, define la convoluci&oacute;n,  <img src="/img/revistas/eac/v34n2/v0602213.jpg" width="20" height="23">entre  la imagen <img src="/img/revistas/eac/v34n2/v0702213.jpg" width="13" height="18">  y el kernel C mediante la operaci&oacute;n matem&aacute;tica mostrada en la <a href="#e2">Ecuaci&oacute;n  2</a>, que se traduce en la sumatoria de la multiplicaci&oacute;n de todos los  p&iacute;xeles de la imagen con el correspondiente valor del coeficiente del kernel  rotado [6]. </font></p>    
<P align="center"><img src="/img/revistas/eac/v34n2/e0102213.jpg" width="536" height="166"><a name="e1"></a></p>    
<P>&nbsp;</p>    <P align="center"><img src="/img/revistas/eac/v34n2/e0202213.jpg" width="548" height="84"><a name="e2"></a></p>    
<P><font size="2" face="Verdana">La  descripci&oacute;n del algoritmo de convoluci&oacute;n, puede resumirse en ubicar  el centro del kernel sobre un elemento de la imagen de entrada a procesar. Luego  multiplicar cada elemento del kernel con el valor correspondiente en la ventana  de p&iacute;xeles de la imagen de entrada y posteriormente sumar el resultado  de las multiplicaciones, y por &uacute;ltimo ubicar el resultado de la suma en  el elemento correspondiente a la funci&oacute;n bidimensional que forma la imagen  de salida. </font></p>    <P><font size="2" face="Verdana">El kernel se va desplazando  por la imagen, obteniendo como resultado una imagen de salida que es v&aacute;lida  en todos los lugares excepto en los bordes de la imagen donde no se tiene informaci&oacute;n  suficiente para realizar el c&aacute;lculo. </font></p>    <P><font size="2" face="Verdana">La  operaci&oacute;n de convoluci&oacute;n realiza operaciones de acuerdo al kernel  utilizado. Estas operaciones se clasifican en detecci&oacute;n de bordes, suavizado  y realce de detalles, como muestra la <a href="#f1">Figura 1</a>.</font></p>    <P align="center"><img src="/img/revistas/eac/v34n2/f0102213.jpg" width="370" height="350"><a name="f1"></a></p>    
<P></p>    <P><font size="2"><b><font face="Verdana">1.1.2.  ARQUITECTURA HARDWARE DEL BLOQUE DE CONVOLUCI&Oacute;N</font></b></font></p>    ]]></body>
<body><![CDATA[<P><font size="2" face="Verdana">El  algoritmo general de procesado lineal de im&aacute;genes es la convoluci&oacute;n  no sim&eacute;trica. La estructura interna de este bloque de convoluci&oacute;n  se compone de dos bloques principales: un bloque de paralelizaci&oacute;n de la  informaci&oacute;n y uno para el procesado de la misma, donde adem&aacute;s se  realizan otras funciones como el c&aacute;lculo del valor absoluto. </font></p>    <P><font size="2" face="Verdana">La  arquitectura general del bloque de convoluci&oacute;n se muestra en la <a href="/img/revistas/eac/v34n2/f0202213.jpg">Figura  2</a><B>. </B>Este est&aacute; basado en la definici&oacute;n matem&aacute;tica  de la funci&oacute;n de convoluci&oacute;n de dos dimensiones, calculando cada  p&iacute;xel de la imagen. Como se muestra en la </font><font size="2" face="Verdana"><a href="/img/revistas/eac/v34n2/f0202213.jpg">Figura  2</a>, luego del proceso de paralelizaci&oacute;n del flujo de datos de la imagen,  se obtiene la informaci&oacute;n paralela necesaria para el c&aacute;lculo del  valor del p&iacute;xel resultante. Despu&eacute;s de este tiempo los <img src="/img/revistas/eac/v34n2/v0402213.jpg" width="131" height="20">  p&iacute;xeles se multiplican por los valores correspondientes del kernel rotado  180<sup>0</sup>, obteniendo el valor para la posici&oacute;n central de la ventana,  este valor puede ser tanto positivo como negativo por lo que resulta necesario  hallar el valor absoluto. Al final de la operaci&oacute;n del c&aacute;lculo del  valor absoluto del p&iacute;xel se realiza la conversi&oacute;n a valores enteros  de <img src="/img/revistas/eac/v34n2/v0902213.jpg" width="12" height="14">  bits para la representaci&oacute;n de una imagen en escala de grises con 256 niveles  trunc&aacute;ndose la parte decimal del valor. En la pr&oacute;xima entrada, las  estructuras de paralelizaci&oacute;n aseguran el movimiento de la ventana sobre  la imagen, permitiendo el c&aacute;lculo del valor para el p&iacute;xel siguiente.  </font></p>    
<P><font size="2" face="Verdana">El funcionamiento del sistema presenta  una latencia (<img src="/img/revistas/eac/v34n2/v1102213.jpg" width="34" height="22">),  dada por el tiempo requerido para completar los almacenadores de l&iacute;nea  (<img src="/img/revistas/eac/v34n2/v1202213.jpg" width="40" height="23">)  y ocupar los registros (<img src="/img/revistas/eac/v34n2/v1302213.jpg" width="41" height="22">),  as&iacute; como la demora interna de los multiplicadores (<img src="/img/revistas/eac/v34n2/v1402213.jpg" width="44" height="28">)  como muestra la <a href="#e6">Ecuaci&oacute;n 6</a>. </font></p>    
<P align="center"><img src="/img/revistas/eac/v34n2/e0602213.jpg" width="330" height="50"><a name="e6"></a></p>    
<P><font size="2" face="Verdana">La  implementaci&oacute;n en leguaje de descripci&oacute;n de hardware se realiz&oacute;  en VHDL 200X, el cual limita a que los arreglos sean de tipo constrained, es decir  la cantidad de elementos del arreglo puede ser variable pero el tama&ntilde;o  de estos tiene que estar predefinido. Esto provoca que para emplear arreglos sea  necesario definir el tama&ntilde;o del mismo como el m&aacute;ximo permitido y  usar de este los bits v&aacute;lidos, lo que aumenta el consumo de recursos y  disminuye la frecuencia m&aacute;xima de trabajo. </font></p>    <P><font size="2" face="Verdana"><B>ARQUITECTURA  HARDWARE DEL BLOQUE DE PARALELIZACI&Oacute;N DE LA INFORMACI&Oacute;N</B> </font></p>    <P><font size="2" face="Verdana">El  bloque de paralelizaci&oacute;n de la informaci&oacute;n es el encargado de que  los p&iacute;xeles en la ventana de procesado se env&iacute;en al pr&oacute;ximo  bloque al mismo tiempo para la ejecuci&oacute;n en paralelo del algoritmo. La  arquitectura interna de este bloque est&aacute; compuesta por un arreglo de almacenadores  de l&iacute;nea y una matriz de registros. La arquitectura de los almacenadores  de l&iacute;nea, expuesta en la </font><font size="2" face="Verdana"><a href="#f3">Figura  3</a>. Utiliza <img src="/img/revistas/eac/v34n2/v1502213.jpg" width="57" height="24">registros  de desplazamiento que permiten la configuraci&oacute;n de la profundidad de acuerdo  con la cantidad de columnas de la imagen. Las se&ntilde;ales de <img src="/img/revistas/eac/v34n2/v1602213.jpg" width="64" height="30">  son las filas de la imagen en la ventana de procesado, mientras que las se&ntilde;ales  de <img src="/img/revistas/eac/v34n2/v1702213.jpg" width="60" height="31">representan  las columnas en la misma. </font></p>    
<P align="center"><img src="/img/revistas/eac/v34n2/f0302213.jpg" width="404" height="166"><a name="f3"></a></p>    
<P></p>    <P><font size="2" face="Verdana">En  cada ciclo de reloj un nuevo p&iacute;xel es entregado por el subsistema de adquisici&oacute;n  al bloque de almacenadores de l&iacute;nea devolviendo a su salida <img src="/img/revistas/eac/v34n2/v1802213.jpg" width="59" height="25">  p&iacute;xeles <img src="/img/revistas/eac/v34n2/v1902213.jpg" width="73" height="24">  , que se corresponden con una nueva columna a procesar. Este procedimiento implica  una latencia inicial en el sistema de procesado debida a la demora en completar  este bloque. La <a href="#e3">Ecuaci&oacute;n 3</a> expone el valor de esta latencia  donde n es la cantidad de p&iacute;xeles de la imagen en el eje horizontal. </font></p>    
]]></body>
<body><![CDATA[<P align="center"><img src="/img/revistas/eac/v34n2/e0302213.jpg" width="266" height="42"><a name="e3"></a></p>    
<P><font size="2" face="Verdana">La  matriz de registros utiliza <img src="/img/revistas/eac/v34n2/v2002213.jpg" width="66" height="21">  bloques de registros gen&eacute;ricos, como se muestra en la <a href="#f4">Figura  4</a>. La funci&oacute;n principal de esta arquitectura es mantener las diferentes  columnas de p&iacute;xeles para las entradas de los bloques de procesamiento de  la imagen <img src="/img/revistas/eac/v34n2/v2102213.jpg" width="41" height="27">,  donde <img src="/img/revistas/eac/v34n2/v2202213.jpg" width="108" height="24">  y <img src="/img/revistas/eac/v34n2/v2302213.jpg" width="106" height="22">.  </font></p>    
<P align="center"><img src="/img/revistas/eac/v34n2/f0402213.jpg" width="374" height="284"><a name="f4"></a></p>    
<P>&nbsp;</p>    <P><font size="2" face="Verdana">Las  arquitecturas que requieren estos bloques presentan una latencia inicial determinada  por la demora en ocupar totalmente el mismo. La <a href="#e4">Ecuaci&oacute;n  4</a> expone este valor. </font></p>    <P align="center"><img src="/img/revistas/eac/v34n2/e0402213.jpg" width="270" height="42"><a name="e4"></a></p>    
<P>&nbsp;</p>    <P><font size="2" face="Verdana"><B>ARQUITECTURA  HARDWARE DEL BLOQUE DE PROCESADO DE LA INFORMACI&Oacute;N.</B> </font></p>    <P><font size="2" face="Verdana">El  bloque de procesado de la informaci&oacute;n est&aacute; compuesto por tantos  multiplicadores como elementos tenga el kernel de convoluci&oacute;n <img src="/img/revistas/eac/v34n2/v0402213.jpg" width="131" height="20">  y <img src="/img/revistas/eac/v34n2/v0402213.jpg" width="131" height="20">  un bloque de suma. El bloque de paralelizaci&oacute;n env&iacute;a los pixeles  presente en la ventana simult&aacute;neamente a los multiplicadores, estos est&aacute;n  compuestos por dos entradas y una salida, permiten la multiplicaci&oacute;n de  n&uacute;meros con punto fijo y son invocados tantas veces como sea necesario,  mostrado en la <a href="/img/revistas/eac/v34n2/f0202213.jpg">Figura 2</a>.</font></p>    
<P><font size="2" face="Verdana">Estos  multiplicadores est&aacute;n confeccionados con latencia porque as&iacute; se  introduce paralelismo y por lo tanto un aumento de la velocidad de ejecuci&oacute;n.  Dicha latencia o pipeline en una l&oacute;gica combinacional se logra agregando  niveles de registros en la l&oacute;gica combinacional. Los Flips-Flops introducidos  por un pipeline generalmente llevan consigo un aumento m&iacute;nimo en el consumo  de recursos en el FPGA, ocupando los Flips-Flops en desuso dentro de las celdas  l&oacute;gicas que ya se est&eacute;n utilizando para implementar la l&oacute;gica  combinacional del dise&ntilde;o. </font></p>    ]]></body>
<body><![CDATA[<P><font size="2" face="Verdana">La  latencia (<img src="/img/revistas/eac/v34n2/v1402213.jpg" width="44" height="28">)  de cada uno de esos multiplicadores est&aacute; dada por el logaritmo en base  dos de la cantidad de bits a multiplicar como expresa la <a href="#e5">Ecuaci&oacute;n  5</a>. </font></p>    
<P align="center"><img src="/img/revistas/eac/v34n2/e0502213.jpg" width="434" height="32"><a name="e5"></a></p>    
<P><font size="2" face="Verdana">El  bloque de suma puede efectuar la adici&oacute;n de hasta elementos de forma concurrente,  por lo que el per&iacute;odo m&iacute;nimo de trabajo est&aacute; dado por el  tiempo que toma para hacerse la suma, esto incluye una demora mayor a la que presentan  los sumadores en cascada de las arquitecturas presentes en XSGImgLib. </font></p>    <P><font size="2" face="Verdana"><B>1.2.  FILTRO DE PROCESADO NO LINEAL</B> </font></p>    <P><font size="2" face="Verdana">El  filtrado espacial no lineal permite sustituir el p&iacute;xel a procesar por el  resultado de una operaci&oacute;n no lineal. La operaci&oacute;n caracter&iacute;stica  de este tipo de procesado es el ordenamiento, aunque otros tipos de procesamiento  (exponencial y logar&iacute;tmico) se incluyen en esta categor&iacute;a. Los filtros  de ordenamiento, y en particular el de mediana, permiten eliminar el ruido impulsivo  y de alta frecuencia, ruido salt &amp; pepper, en las im&aacute;genes sin afectar  los bordes de las mismas [7], [8], [10], [11], [12]. Este procesado tiene una  amplia aplicaci&oacute;n en diferentes sectores, entre ellos en la medicina para  eliminar el ruido en las im&aacute;genes radiogr&aacute;ficas [13]. </font></p>    <P><font size="2" face="Verdana"><B>1.2.1.  FILTROS DE ORDENAMIENTO DE IM&Aacute;GENES</B> </font></p>    <P><font size="2" face="Verdana">El  filtrado de ordenamiento es una t&eacute;cnica no-lineal que ordena el contenido  de la ventana seleccionada y en esta toma la muestra indexada por la magnitud  del rango. Para el caso bidimensional (2D), el contenido de una ventana de dos  dimensiones, que se desliza a trav&eacute;s de la imagen, se ordena num&eacute;ricamente  y se remplaza el elemento central de la ventana a la salida por el que tenga el  rango especificado. Cada vez que se desplaza la ventana por la imagen, un conjunto  de p&iacute;xeles obsoletos se descartan y un conjunto de nuevos p&iacute;xeles  se insertan a esta. Los filtros de ordenamiento m&aacute;s t&iacute;picos son  la media, el m&iacute;nimo y el m&aacute;ximo, aplic&aacute;ndose en el tratamiento  previo antes de la detecci&oacute;n de bordes o en la eliminaci&oacute;n de ciertos  tipos de ruidos de transmisi&oacute;n [9], [11], [12], [14]. </font></p>    <P><font size="2" face="Verdana">Una  variable importante en el uso de filtros de ordenamiento es el tama&ntilde;o de  la vecindad. Generalmente las formas que se utilizan son cuadradas (por comodidad  de c&aacute;lculo) o circular (para minimizar los efectos direccionales). Sin  embargo a medida que el tama&ntilde;o de la vecindad se incrementa, el esfuerzo  computacional en la realizaci&oacute;n de la clasificaci&oacute;n se aumenta r&aacute;pidamente.  </font></p>    <P><font size="2" face="Verdana"><B>1.2.2. ARQUITECTURA HARDWARE DEL  BLOQUE DE FILTRO DE ORDENAMIENTO</B> </font></p>    <P><font size="2" face="Verdana">En  un filtro de ordenamiento unidimensional, una ventana de <img src="/img/revistas/eac/v34n2/v2402213.jpg" width="64" height="22">muestras  se desplaza por el arreglo de puntos devolviendo el valor correspondiente a la  posici&oacute;n requerida en el arreglo ya ordenado. Sea <img src="/img/revistas/eac/v34n2/v2502213.jpg" width="27" height="28">  una ventana ordenada de una dimensi&oacute;n, como muestra la <a href="#e7">Ecuaci&oacute;n  7</a>, donde es el valor de la posici&oacute;n media de <img src="/img/revistas/eac/v34n2/v2502213.jpg" width="27" height="28">  definida como <img src="/img/revistas/eac/v34n2/v2602213.jpg" width="139" height="23">.  Para un filtro en dos dimensiones una ventana de <img src="/img/revistas/eac/v34n2/v0402213.jpg" width="131" height="20">  elementos se mueve sobre la imagen. </font></p>    
]]></body>
<body><![CDATA[<P><font size="2" face="Verdana">Definiendo  <img src="/img/revistas/eac/v34n2/v2702213.jpg" width="49" height="31"> como  una ventana en dos dimensiones, centrada en la posici&oacute;n <img src="/img/revistas/eac/v34n2/v2802213.jpg" width="39" height="30">,  entonces <img src="/img/revistas/eac/v34n2/v2902213.jpg" width="174" height="25">[4].  </font></p>    
<P align="center"><img src="/img/revistas/eac/v34n2/e0702213.jpg" width="422" height="33"><a name="e7"></a></p>    
<P><font size="2" face="Verdana">En  la <a href="/img/revistas/eac/v34n2/f0502213.jpg">Figura 5</a> se muestra  la arquitectura de Chakrabarti para el filtro de ordenamiento de dos dimensiones  que es la empleada para desarrollar el bloque de procesado, en esta figura <img src="/img/revistas/eac/v34n2/v3002213.jpg" width="83" height="23">.  Esta se compone de dos bloques principales, uno que calcula la posici&oacute;n  de cada uno de los procesadores y otro que en funci&oacute;n de estos resultados  devuelve a la salida el valor requerido. Chakrabarti propone el uso de un arreglo  compuesto por <img src="/img/revistas/eac/v34n2/v0402213.jpg" width="131" height="20">procesadores,  donde el per&iacute;odo de muestreo es funci&oacute;n del tiempo de actualizaci&oacute;n  de la posici&oacute;n de los elementos antiguos en la ventana, utilizando los  resultados de las comparaciones con las nuevas muestras y con las muestras desechadas.</font></p>    
<P><font size="2" face="Verdana">El  dise&ntilde;o del filtro de ordenamiento gen&eacute;rico configurable desarrollado  se basa en la arquitectura no recursiva definida por Chakrabarti en [11]. El funcionamiento  del mismo es una extensi&oacute;n del algoritmo de ordenamiento de una dimensi&oacute;n  para un filtro de mediana no recursivo y comienza cuando las nuevas muestras entran  al comparador donde son comprobadas entre s&iacute;, este resultado pasa a los  procesadores del <img src="/img/revistas/eac/v34n2/v3102213.jpg" width="88" height="31">  donde se calcula su posici&oacute;n en funci&oacute;n de la salida del comparador  y de las comparaciones con el resto de los elementos presentes en la ventana,  paralelamente el resto de los procesadores, de <img src="/img/revistas/eac/v34n2/v3202213.jpg" width="55" height="32">  al <img src="/img/revistas/eac/v34n2/v3302213.jpg" width="86" height="27">,  est&aacute;n actualizando su posici&oacute;n dentro de la ventana en funci&oacute;n  de la comparaci&oacute;n con los elementos nuevos y los ya desechados. Posteriormente  el Detector de posici&oacute;n devuelve a la salida el valor del pixel que se  encuentre en la posici&oacute;n deseada. </font></p>    
<P><font size="2" face="Verdana">El  bloque de ordenamiento gen&eacute;rico no presenta ciclos de demora en la ejecuci&oacute;n,  obteniendo una salida v&aacute;lida en cada ciclo de reloj despu&eacute;s del  primer pulso, pero presenta una latencia debido a la demora en completar los p&iacute;xeles  en la ventana, la cual se calcula mediante la <a href="#e3">Ecuaci&oacute;n 3</a>.  </font></p>    <P><font size="2" face="Verdana">El bloque de ordenamiento implementado  da la posibilidad de seleccionar la posici&oacute;n del p&iacute;xel de salida  posibilitando la obtenci&oacute;n de cualquier valor dentro de la ventana, siendo  las m&aacute;s usadas las posiciones m&iacute;nima, media y m&aacute;xima, permitiendo  de esta manera implementar operadores morfol&oacute;gicos para las im&aacute;genes  a procesar. Una imagen con ruido sal y pimienta al ser procesada con un filtro  de ordenamiento para la m&iacute;nima posici&oacute;n, resalta las tonalidades  bajas de la imagen, aumentando los puntos negros en la misma, la selecci&oacute;n  de la posici&oacute;n media suprime el ruido de la imagen evitando los cambios  bruscos en los niveles de grises de la imagen, y en cambio, la posici&oacute;n  m&aacute;xima destaca las tonalidades altas, amplificando los puntos blancos de  la imagen, <a href="#f6">Figura 6</a>.</font></p>    <P align="center"><img src="/img/revistas/eac/v34n2/f0602213.jpg" width="482" height="382"><a name="f6"></a></p>    
<P>&nbsp;</p>    <P></p>    <P><font size="3" face="Verdana"><B>AN&Aacute;LISIS  DE LOS RESULTADOS</B> </font></p>    ]]></body>
<body><![CDATA[<P>&nbsp;</p>    <P><font size="2" face="Verdana">La comprobaci&oacute;n  de los resultados del dise&ntilde;o se realiza entre versiones software de estos  algoritmos en MATLAB, los cuales requieren la representaci&oacute;n de la imagen  de forma matricial, y los bloques desarrollados. Esto posibilita obtener una medida  de la exactitud del c&aacute;lculo, y un an&aacute;lisis de la parametrizaci&oacute;n  de los bloques. </font></p>    <P><font size="2" face="Verdana">Se utilizan para el  dise&ntilde;o la herramienta Project Navigator de ISE Design Suite 12.4 y Xilinx  System Generator (XSG) con MATLAB R2010b. El Project Navigator se trabaja con  las caracter&iacute;sticas que trae por defecto para la s&iacute;ntesis, mapeo  y ruteo. El dise&ntilde;o se implementa sobre una placa Spartan 3A DSP 1800 de  Xilinx, para esto se usan dos opciones, con 6 bits de precisi&oacute;n (la mayor  cantidad de bits que puede necesitar un kernel de convoluci&oacute;n) y con 3  bits. Los resultados del dise&ntilde;o se compran con otras arquitecturas en cuanto  a la cantidad de celdas l&oacute;gicas utilizadas y a la frecuencia m&aacute;xima  de operaci&oacute;n. </font></p>    <P><font size="2" face="Verdana">El dise&ntilde;o  se caracteriza sobre una placa Spartan 3A DSP 1800 de Xilinx, para esto se usan  dos opciones, con 6 bits de precisi&oacute;n (la mayor cantidad de bits que puede  necesitar un kernel de convoluci&oacute;n) y con 3 bits. Los resultados del dise&ntilde;o  son comparados con otras arquitecturas en cuanto a la cantidad de celdas l&oacute;gicas  utilizadas y en cuanto a la frecuencia m&aacute;xima de operaci&oacute;n. </font></p>    <P><font size="2" face="Verdana"><B>BLOQUE  DE CONVOLUCI&Oacute;N</B> </font></p>    <P><font size="2" face="Verdana">Este bloque  de convoluci&oacute;n permite configurar diversos par&aacute;metros como son la  cantidad de bits para representar la parte entera (Data_Width) y la parte decimal  (Presition) del kernel donde hay que tener en cuenta adem&aacute;s de la cantidad  de bits necesarios para la parte entera, un bit m&aacute;s para el signo, el n&uacute;mero  de columnas que va a tener la imagen, la latencia de los multiplicadores y el  kernel a utilizar en la convoluci&oacute;n de la imagen, el cual puede tener un  tama&ntilde;o de ,3 X 3, 5 x 5, 7 x 7 o cualquier combinaci&oacute;n de filas  y columnas cuya multiplicaci&oacute;n tenga como resultado m&aacute;ximo 49, el  uso de las opciones de replicaci&oacute;n de c&oacute;digo de VHDL, nos permite  poder ajustar en este bloque el tama&ntilde;o del kernel en tiempo de dise&ntilde;o,  provocando un gran avance en el nivel de configurabilidad de los bloques y tambi&eacute;n  un salto en la versatilidad de los mismos. </font></p>    <P><font size="2" face="Verdana">En  las comparaciones del dise&ntilde;o con los bloques gen&eacute;ricos de convoluci&oacute;n  de la biblioteca XSGImgLib configurada para obtener un mejor rendimiento en &aacute;rea,  se puede observar que los nuevos dise&ntilde;os adem&aacute;s de ganar mucho en  configurabilidad, disminuye la frecuencia m&aacute;xima de trabajo para los resultados  de implementaci&oacute;n provistos por Project Navigator de 1.299 a 1.322 y para  los provistos por XSG disminuye en 1.013 veces para la convoluci&oacute;n de 3  &#215;3 y aumenta para la convoluci&oacute;n de 5 &#215;5 en 1.086 veces, estos  resultados var&iacute;an en funci&oacute;n de la cantidad de bits para la precisi&oacute;n  y el tama&ntilde;o del kernel. </font></p>    <P><font size="2" face="Verdana">Cuando  la biblioteca XSGImgLib se configura para obtener un mejor rendimiento en velocidad,  la frecuencia m&aacute;xima de trabajo disminuye en 1.069 veces para la convoluci&oacute;n  de 5 &#215;5 y aumenta para la convoluci&oacute;n de 3&#215;3 en 1.008 veces para  los resultados de implementaci&oacute;n provistos por Project Navigator y para  los provistos por XSG aumenta de 1.315 a 1.319 veces. </font></p>    <P><font size="2" face="Verdana">Al  comparar los resultados de las implementaciones en cuanto al consumo de recursos  se obtiene un aumento de 1.86 veces para la convoluci&oacute;n de 3&#215;3 y una  disminuci&oacute;n de 1.023 para la convoluci&oacute;n de 5 &#215;5 de los nuevos  dise&ntilde;os con respecto la biblioteca XSGImgLib configurada para obtener un  mejor rendimiento en velocidad. Al configurar XSGImgLib para obtener un mejor  rendimiento en &aacute;rea los resultados de comparaci&oacute;n aumentan de 1,632  a 2,557 veces. Estas comparaciones se muestran de la <a href="#t1">Tabla 1</a>  y la <a href="/img/revistas/eac/v34n2/t0202213.jpg">Tabla 2</a> </font></p>    
<P align="center"><img src="/img/revistas/eac/v34n2/t0102213.jpg" width="560" height="158"><a name="t1"></a></p>    
]]></body>
<body><![CDATA[<P align="center">&nbsp;</p>    <P><font size="2" face="Verdana"><B>BLOQUE  DE ORDENAMIENTO</B> </font></p>    <P><font size="2" face="Verdana">El bloque de ordenamiento  implementado da la posibilidad de seleccionar la posici&oacute;n del p&iacute;xel  de salida posibilitando la obtenci&oacute;n de cualquier valor dentro de la ventana,  siendo las m&aacute;s usadas las posiciones m&iacute;nima, media y m&aacute;xima,  permitiendo de esta manera implementar operadores morfol&oacute;gicos para las  im&aacute;genes a procesar. Adem&aacute;s al igual que el bloque anterior permite  configurar el tama&ntilde;o de la ventana a utilizar, en tiempo de dise&ntilde;o.  </font></p>    <P><font size="2" face="Verdana">Las comparaciones del dise&ntilde;o  con los bloques de ordenamiento gen&eacute;ricos de la biblioteca XSGImgLib en  cuanto a la frecuencia de trabajo muestran una disminuci&oacute;n en de 1.62 a  1.715 veces para los resultados provistos por el Project Navigator y de 1.035  a 1.091 veces para los resultados provistos por el XSG. </font></p>    <P><font size="2" face="Verdana">Al  comparar el dise&ntilde;o en cuanto a la cantidad de recursos ocupados se tiene  que los resultados de comparaci&oacute;n aumentan de 1,896 a 5 veces. Estos resultados  se aprecian en la <a href="#t3">Tabla 3</a> y la </font><a href="#t4"><FONT FACE="Verdana" SIZE="2">Tabla  4</FONT></a> </p>    <P align="center"><img src="/img/revistas/eac/v34n2/t0302213.jpg" width="532" height="178"><a name="t3"></a></p>    
<P align="center"><img src="/img/revistas/eac/v34n2/t0402213.jpg" width="516" height="176"><a name="t4"></a></p>    
<P>&nbsp;</p>    <P><font size="2"><b><font size="3" face="Verdana">CONCLUSIONES</font></b></font></p>    <P>&nbsp;</p>    ]]></body>
<body><![CDATA[<P><font size="2" face="Verdana">El  paralelismo de los algoritmos de procesado de im&aacute;genes posibilita un desarrollo  m&aacute;s eficiente de sistemas empotrados que los algoritmos secuenciales sobre  procesadores de prop&oacute;sito general. El dise&ntilde;o de aplicaciones para  FPGA no s&oacute;lo realiza un uso m&aacute;s intensivo del paralelismo, tambi&eacute;n  de la portabilidad del dise&ntilde;o y el bajo consumo de potencia del mismo,  posibilitando el desarrollo de sistemas modulares y aut&oacute;nomos. </font></p>    <P><font size="2" face="Verdana">La  implementaci&oacute;n de m&oacute;dulos de procesado de im&aacute;genes parametrizables  para System Generator permite el desarrollo de sistemas basados en modelos con  un elevado nivel de eficiencia. El bloque Black Box que este propone brinda la  opci&oacute;n de incluir c&oacute;digo VHDL en sistemas basados en modelos, lo  cual ofrece un salto en el grado de configurabilidad, pero para que estos dise&ntilde;os  mantengan un desempe&ntilde;o similar a los ofrecidos Project Navigator, se hace  necesario que las opciones de configuraci&oacute;n de implementaci&oacute;n sean  modificadas. </font></p>    <P><font size="2" face="Verdana">El empleo de VHDL 200X  limita a que los arreglos sean de tipo constrained, es decir la cantidad de elementos  del arreglo puede ser variable pero el tama&ntilde;o de estos tiene que estar  predefinido. Esto provoca que para emplear arreglos sea necesario definir el tama&ntilde;o  del mismo como el m&aacute;ximo permitido y usar de este los bits v&aacute;lidos,  lo que aumenta el consumo de recursos y disminuye la frecuencia m&aacute;xima  de trabajo. </font></p>    <P><font size="2" face="Verdana">Los bloques desarrollados  para la biblioteca de procesado de im&aacute;genes posibilitan la configuraci&oacute;n  de los dise&ntilde;os gen&eacute;ricos con diferentes par&aacute;metros, logrando  unidades de procesado vers&aacute;tiles al alcance del usuario. El nivel de configurabilidad  que presentan los nuevos bloques dise&ntilde;ados para la biblioteca XSGImgLib  viene dado por la utilizaci&oacute;n de la replicaci&oacute;n de c&oacute;digo,  que permite cambiar los par&aacute;metros del bloque en tiempo de dise&ntilde;o.  </font></p>    <P>&nbsp;</p>    <P><font size="3" face="Verdana"><strong>REFERENCIAS</strong></font></p>    <P>&nbsp;</p>    <!-- ref --><P><font size="2" face="Verdana">1.  K BENKRID, D CROOKES, J SMITH, AND A BENKRID. High Level Programming for FPGA  Based Image and Video Processing using Hardware Skeletons. In 9th Annual IEEE  Symposium on Field-Programmable Custom Computing Machines, pages 18, 2001.     </font></p>    <!-- ref --><P><font size="2" face="Verdana">2.  MAREK WNUK. Remarks on Hardware Implementation of Image Processing Algorithms.  International Journal of Applied Mathematics and Computer Science, 18(1):105110,  2008.     </font></p>    <!-- ref --><P><font size="2" face="Verdana">3. CARLOS RODR&Iacute;GUEZ CRUZ,  RAZIEL RIVERO FLORES, ALEJANDRO CASTILLO ATOCHE, AND JAVIER V&Aacute;ZQUEZ CASTILLO.  Procesamiento de Im&aacute;genes con Xilinx System Generator. Primer Congreso  Internacional de Sistemas Computacionales y electr&oacute;nicos, pages 18, 2006.      </font></p>    <!-- ref --><P><font size="2" face="Verdana">4. T SAIDANI, D DIA, W ELHAMZI, M  ATRI, AND R TOURKI. Hardware Co-simulation For Video Processing Using Xilinx System  Generator. Proceedings of the World Congress on Engineering 2009, I: 37, 2009.      </font></p>    <!-- ref --><P><font size="2" face="Verdana">5. C T JOHNSTON, D G BAILEY, AND P  LYONS. A Visual Environment for Real-Time Image Processing in Hardware. EURASIP  Journal on Embedded Systems, 2006:18, 2006.     </font></p>    <!-- ref --><P><font size="2" face="Verdana">6.  K BENKRID AND S BELKACEMI. Design and implementation of a 2D convolution core  for video applications on FPGAs. Third International Workshop on Digital and Computational  Video, 2002.DCV 2002.Proceedings., (November):8592, 2002.     </font></p>    <!-- ref --><P><font size="2" face="Verdana">7.  RAFAEL C GONZ&Aacute;LEZ AND RICHARD E WOODS. Digital image processing. In Digital  image processing, chapter 2, 3, 4, 6, pages 6670,116134,205208,283302,308313,519560.  Prentice Hall, 2nd edition, 2002.     </font></p>    <!-- ref --><P><font size="2" face="Verdana">8.  ALBA M S&Aacute;NCHEZ G., RICARDO ALVAREZ G., AND SULLY S&Aacute;NCHEZ G.Architecture  for filtering images using Xilinx system generator. In International Journal of  Mathematics and Computer in Simulation, volume 1, pages 101107, 2007.     </font></p>    <!-- ref --><P><font size="2" face="Verdana">9.  LUIS MANUEL GARC&Eacute;S-SOCARR&Aacute;S.Aceleraci&oacute;n de Algoritmos Mediante  Hardware Reconfigurable Biblioteca de Procesamiento de Im&aacute;genes para System  Generator. Master thesis, Instituto Superior Polit&eacute;cnico &#171;Jos&eacute;  Antonio Echeverr&iacute;a&#187;, 2011.     </font></p>    <!-- ref --><P><font size="2" face="Verdana">10.  SHEETAL U BHANDARI, SHASHANK S PUJARI, SHAILA SUBBARAMAN, AND RASHMI MAHAJAN.Real  Time Video Processing on FPGA Using on the Fly Partial Reconfiguration. In 2009  International Conference on Signal Processing Systems, pages 245247, 2009.     </font></p>    <!-- ref --><P><font size="2" face="Verdana">11.  C CHAKRABARTI.High sample rate array architectures for median filters. IEEE Transactions  on Signal Processing, 42(3):707712, 1994.     </font></p>    <!-- ref --><P><font size="2" face="Verdana">12.  TEXAS INSTRUMENTS. Implementation of an Image Processing Library for the TMS320C8x  ( MVP ), 1997.     </font></p>    <!-- ref --><P><font size="2" face="Verdana">13. JORGE OSIO, JOSE  RAPALLINI, A QUIJANO, AND JES&Uacute;S OCAMPO. Implementaci&oacute;n de un Algoritmo  para procesamiento de im&aacute;genes en una FPGA. Congreso de Microelectr&oacute;nicaAplicada  2010, pages 3842, 2010.     </font></p>    <!-- ref --><P><font size="2" face="Verdana">14. GABOR  SZEDO.Two-dimensional rank-order filter by using max-min sorting network. Xilinx  Application Notes, pages 117, 2006 </font><P>&nbsp;</p>    <P>&nbsp;</p>    <P><font size="2" face="Verdana">Recibido:  Abril 2013    <br> aprobado: Mayo 2013 </font></p>    <P>&nbsp;</p>    <P>&nbsp;</p>    ]]></body>
<body><![CDATA[<P>&nbsp;</p>    <P></p>    <P>&nbsp;</p>      ]]></body><back>
<ref-list>
<ref id="B1">
<label>1</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[K]]></surname>
<given-names><![CDATA[BENKRID]]></given-names>
</name>
<name>
<surname><![CDATA[D]]></surname>
<given-names><![CDATA[CROOKES]]></given-names>
</name>
<name>
<surname><![CDATA[J]]></surname>
<given-names><![CDATA[SMITH]]></given-names>
</name>
<name>
<surname><![CDATA[A]]></surname>
<given-names><![CDATA[BENKRID]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[High Level Programming for FPGA Based Image and Video Processing using Hardware Skeletons]]></article-title>
<source><![CDATA[9th Annual IEEE Symposium on Field-Programmable Custom Computing Machines]]></source>
<year>2001</year>
<page-range>18</page-range></nlm-citation>
</ref>
<ref id="B2">
<label>2</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[MAREK]]></surname>
<given-names><![CDATA[WNUK]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Remarks on Hardware Implementation of Image Processing Algorithms]]></article-title>
<source><![CDATA[International Journal of Applied Mathematics and Computer Science]]></source>
<year>2008</year>
<volume>18</volume>
<numero>1</numero>
<issue>1</issue>
<page-range>105110</page-range></nlm-citation>
</ref>
<ref id="B3">
<label>3</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[RODRÍGUEZ CRUZ]]></surname>
<given-names><![CDATA[CARLOS]]></given-names>
</name>
<name>
<surname><![CDATA[RIVERO FLORES]]></surname>
<given-names><![CDATA[RAZIEL]]></given-names>
</name>
<name>
<surname><![CDATA[CASTILLO ATOCHE]]></surname>
<given-names><![CDATA[ALEJANDRO]]></given-names>
</name>
<name>
<surname><![CDATA[VÁZQUEZ CASTILLO]]></surname>
<given-names><![CDATA[JAVIER]]></given-names>
</name>
</person-group>
<source><![CDATA[Procesamiento de Imágenes con Xilinx System Generator]]></source>
<year>2006</year>
<page-range>18</page-range><publisher-name><![CDATA[Primer Congreso Internacional de Sistemas Computacionales y electrónicos]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B4">
<label>4</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[T]]></surname>
<given-names><![CDATA[SAIDANI]]></given-names>
</name>
<name>
<surname><![CDATA[D]]></surname>
<given-names><![CDATA[DIA]]></given-names>
</name>
<name>
<surname><![CDATA[W]]></surname>
<given-names><![CDATA[ELHAMZI]]></given-names>
</name>
<name>
<surname><![CDATA[M]]></surname>
<given-names><![CDATA[ATRI]]></given-names>
</name>
<name>
<surname><![CDATA[R]]></surname>
<given-names><![CDATA[TOURKI]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Hardware Co-simulation For Video Processing Using Xilinx System Generator]]></article-title>
<source><![CDATA[Proceedings of the World Congress on Engineering]]></source>
<year>2009</year>
<numero>37</numero>
<issue>37</issue>
</nlm-citation>
</ref>
<ref id="B5">
<label>5</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[C T]]></surname>
<given-names><![CDATA[JOHNSTON]]></given-names>
</name>
<name>
<surname><![CDATA[D G]]></surname>
<given-names><![CDATA[BAILEY]]></given-names>
</name>
<name>
<surname><![CDATA[P]]></surname>
<given-names><![CDATA[LYONS]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[A Visual Environment for Real-Time Image Processing in Hardware]]></article-title>
<source><![CDATA[EURASIP Journal on Embedded Systems]]></source>
<year>2006</year>
<volume>18</volume>
</nlm-citation>
</ref>
<ref id="B6">
<label>6</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[K]]></surname>
<given-names><![CDATA[BENKRID]]></given-names>
</name>
<name>
<surname><![CDATA[S]]></surname>
<given-names><![CDATA[BELKACEMI]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Design and implementation of a 2D convolution core for video applications on FPGAs]]></article-title>
<source><![CDATA[Third International Workshop on Digital and Computational Video]]></source>
<year>2002</year>
<page-range>85 92</page-range><publisher-name><![CDATA[DCV 2002.Proceedings]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B7">
<label>7</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[GONZÁLEZ]]></surname>
<given-names><![CDATA[RAFAEL C]]></given-names>
</name>
<name>
<surname><![CDATA[WOODS]]></surname>
<given-names><![CDATA[RICHARD E]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Digital image processing]]></article-title>
<source><![CDATA[Digital image processing]]></source>
<year>2002</year>
<edition>2</edition>
<page-range>6670,116134,205208,283302,308313,519560</page-range><publisher-name><![CDATA[Prentice Hall]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B8">
<label>8</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[SÁNCHEZ G.]]></surname>
<given-names><![CDATA[ALBA M]]></given-names>
</name>
<name>
<surname><![CDATA[ALVAREZ G.]]></surname>
<given-names><![CDATA[RICARDO]]></given-names>
</name>
<name>
<surname><![CDATA[SÁNCHEZ G]]></surname>
<given-names><![CDATA[SULLY]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Architecture for filtering images using Xilinx system generator.]]></article-title>
<source><![CDATA[International Journal of Mathematics and Computer in Simulation]]></source>
<year>2007</year>
<volume>1</volume>
<page-range>101107</page-range></nlm-citation>
</ref>
<ref id="B9">
<label>9</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[GARCÉS-SOCARRÁS]]></surname>
<given-names><![CDATA[LUIS MANUEL]]></given-names>
</name>
</person-group>
<source><![CDATA[Aceleración de Algoritmos Mediante Hardware Reconfigurable Biblioteca de Procesamiento de Imágenes para System Generator]]></source>
<year>2011</year>
<publisher-name><![CDATA[Instituto Superior Politécnico «José Antonio Echeverría»]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B10">
<label>10</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[BHANDARI]]></surname>
<given-names><![CDATA[SHEETAL U]]></given-names>
</name>
<name>
<surname><![CDATA[PUJARI]]></surname>
<given-names><![CDATA[SHASHANK S]]></given-names>
</name>
<name>
<surname><![CDATA[SUBBARAMAN]]></surname>
<given-names><![CDATA[SHAILA]]></given-names>
</name>
<name>
<surname><![CDATA[MAHAJAN]]></surname>
<given-names><![CDATA[RASHMI]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Real Time Video Processing on FPGA Using on the Fly Partial Reconfiguration]]></article-title>
<source><![CDATA[2009 International Conference on Signal Processing Systems]]></source>
<year>2009</year>
<page-range>245247</page-range></nlm-citation>
</ref>
<ref id="B11">
<label>11</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[CHAKRABARTI]]></surname>
<given-names><![CDATA[C]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[High sample rate array architectures for median filters]]></article-title>
<source><![CDATA[IEEE Transactions on Signal Processing]]></source>
<year>1994</year>
<volume>42</volume>
<numero>3</numero>
<issue>3</issue>
<page-range>707712</page-range></nlm-citation>
</ref>
<ref id="B12">
<label>12</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[CHAKRABARTI]]></surname>
<given-names><![CDATA[C]]></given-names>
</name>
</person-group>
<person-group person-group-type="editor">
<name>
</name>
</person-group>
<source><![CDATA[Implementation of an Image Processing Library for the TMS320C8x ( MVP )]]></source>
<year>1997</year>
</nlm-citation>
</ref>
<ref id="B13">
<label>13</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[OSIO]]></surname>
<given-names><![CDATA[JORGE]]></given-names>
</name>
<name>
<surname><![CDATA[RAPALLINI]]></surname>
<given-names><![CDATA[JOSE]]></given-names>
</name>
<name>
<surname><![CDATA[QUIJANO]]></surname>
<given-names><![CDATA[A]]></given-names>
</name>
<name>
<surname><![CDATA[OCAMPO]]></surname>
<given-names><![CDATA[JESÚS]]></given-names>
</name>
</person-group>
<source><![CDATA[Implementación de un Algoritmo para procesamiento de imágenes en una FPGA.]]></source>
<year>2010</year>
<page-range>3842</page-range><publisher-name><![CDATA[Congreso de Microelectrónica Aplicada 2010]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B14">
<label>14</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[SZEDO]]></surname>
<given-names><![CDATA[GABOR]]></given-names>
</name>
</person-group>
<source><![CDATA[Two-dimensional rank-order filter by using max-min sorting network]]></source>
<year>2006</year>
<page-range>117</page-range><publisher-name><![CDATA[Xilinx Application Notes]]></publisher-name>
</nlm-citation>
</ref>
</ref-list>
</back>
</article>
