<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog XYOX &#187; codigo</title>
	<atom:link href="http://xyox.info/tags/codigo/feed/" rel="self" type="application/rss+xml" />
	<link>http://xyox.info</link>
	<description>Blog personal de XYOX, Web y No Web</description>
	<lastBuildDate>Thu, 02 Sep 2010 19:47:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Y hablando de codigo&#8230; por que nunca documentamos?</title>
		<link>http://xyox.info/2009/12/28/y-hablando-de-codigo-por-que-nunca-documentamos/</link>
		<comments>http://xyox.info/2009/12/28/y-hablando-de-codigo-por-que-nunca-documentamos/#comments</comments>
		<pubDate>Tue, 29 Dec 2009 03:01:00 +0000</pubDate>
		<dc:creator>XYOX</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[codigo]]></category>
		<category><![CDATA[documentacion]]></category>
		<category><![CDATA[scripts]]></category>

		<guid isPermaLink="false">http://xyox.info/?p=404</guid>
		<description><![CDATA[Esta bien yo tambien me incluyo aunque no siempre es asi, generalmente quizas muchos coincidan conmigo pero al hacer sofwtware que en realidad son scripts de un alto funcionamiento pero de pequeño codigo no consideramos que deba tener documentacion, es mas es porque es para un uso comercial personal .. pero.. Cuando comenzamos a hacer [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter" title="documentacion - Blog XYOX" src="http://i48.tinypic.com/dotmya.jpg" alt="" width="506" height="303" /></p>
<p>Esta bien yo tambien me incluyo aunque no siempre es asi, generalmente quizas muchos coincidan conmigo pero al hacer sofwtware que en realidad son <strong>scripts de un alto funcionamiento</strong> pero de pequeño codigo no consideramos que deba tener documentacion, es mas es porque es para un uso comercial personal .. pero..</p>
<p>Cuando comenzamos a hacer proyectos de mayor magnitud llamese sistema, <span style="text-decoration: line-through;">portal inteligente</span>, RIA, es necesario documentar... esteee disculpa xyox pero a que te refieres con documentar..</p>
<p>Cito:</p>
<blockquote><p><em>En otras palabras, la documentación es un conjunto de información que expresa detalles de estos sistemas, la forma adecuada de operar con él, nos permite interpretar los errores, conocer su proceso, etc.</em></p></blockquote>
<p>Bueno esto podemos decir que es algo tedioso, algo cansado, pero es algo que cuando lo terminemos nos dara un mejor nivel capaces de solucionar errores rapidamente y no cometerlos posteriormente, debe ser una costumbre nuestra.. a continuacion copypasteo el post realizado por <a href="http://www.elcodigok.com.ar/2009/12/por-que-nunca-documentamos-nada/">ElCodigoK</a>...</p>
<p>Si bien sabemos <strong>la importancia que tiene la documentación en los sistemas</strong> y aún sabiendo esto, rara vez hacemos el intento de documentar los procesos del sistemas, las funciones que incorpora, la estructura general de clases y ni hablar de los modelados de datos.</p>
<p>Creo que esta cuestión esta ligada por sobre todas las cosas a varios factores que voy a mencionar:</p>
<h3>Falta de personas en un proyecto</h3>
<p>Definitivamente es una variable que en la mayoría de los proyectos de software sucede y que es la <strong>falta de personas en los proyectos</strong>. Dependiendo del proyecto la cantidad de Ingenieros, Analistas o Programadores va a variar notablemente, y ésta falta de integrantes se hace sentir para tener todo documentado, seguramente los Analistas estarán preocupados en realizar un análisis y diseño perfecto, mientras que los desarrolladores se preocuparán más por la programación y las funcionalidades del sistema.</p>
<h3>Mala distribución de las tareas</h3>
<p>Vamos a suponer que nuestro limitante ahora no es la falta de personal, sino más bien una mala distribución de las tareas asignadas, dejando de lado y solo al final del proyecto la creación de los documentos y la propia documentación del código fuente. Esto también esta aparejado con el bajo control de exigencia para con estos documentos y por sobre todas las cosas no dejarlos como una última tarea sino más bien como una tarea paralela al Análisis, Diseño, Desarrollo y Pruebas.</p>
<h3>Falta de experiencia</h3>
<p>Nuevo limitante para la documentación, la experiencia es un factor importante y nos lleva a tener una buena idea de <strong>redacción y corrección de documentación precisa</strong>. Es de suma importancia adquirir experiencia en este tipo de tareas de documentación, tanto para no escribir documentos obsoletos y para que no falte información del proyecto.</p>
<h3>No utilizar herramientas adecuadas</h3>
<p>En la actualidad, la mayoría de los lenguajes de programación cuentan con herramientas que nos permite tanto organizar como agilizar el proceso de documentación en los códigos fuente. Con formatos mucho más profesionales y casi instantáneos, el echo de no utilizar estas herramientas hace que muchos de los programadores ni siquiera intenten documentar los procesos más importantes, las clases padres, etc.</p>
<p>Todos estos factores y seguramente muchos más hacen que la documentación de los proyectos de software sea nula, escasa, obsoleta, etc</p>
<p>Esto sin dudas es una tarea de suma importancia y un proceso de aprendizaje que no debemos dejar nunca de lado.</p>
<p>Saludos <img src='http://xyox.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<form id="vozme_form_e72f91f43b992657b3bab060fc36dc40" method="post" name="vozme_form_e72f91f43b992657b3bab060fc36dc40" target="e72f91f43b992657b3bab060fc36dc40" action="http://vozme.com/text2voice.php"><input name="text" type="hidden" value="Y hablando de codigo&#8230; por que nunca documentamos?.. 
Esta bien yo tambien me incluyo aunque no siempre es asi, generalmente quizas muchos coincidan conmigo pero al hacer sofwtware que en realidad son scripts de un alto funcionamiento pero de pequeño codigo no consideramos que deba tener documentacion, es mas es porque es para un uso comercial personal .. pero..
Cuando comenzamos a hacer proyectos de mayor magnitud llamese sistema, portal inteligente, RIA, es necesario documentar... esteee disculpa xyox pero a que te refieres con documentar..
Cito:
En otras palabras, la documentación es un conjunto de información que expresa detalles de estos sistemas, la forma adecuada de operar con él, nos permite interpretar los errores, conocer su proceso, etc.
Bueno esto podemos decir que es algo tedioso, algo cansado, pero es algo que cuando lo terminemos nos dara un mejor nivel capaces de solucionar errores rapidamente y no cometerlos posteriormente, debe ser una costumbre nuestra.. a continuacion copypasteo el post realizado por ElCodigoK...
Si bien sabemos la importancia que tiene la documentación en los sistemas y aún sabiendo esto, rara vez hacemos el intento de documentar los procesos del sistemas, las funciones que incorpora, la estructura general de clases y ni hablar de los modelados de datos.
Creo que esta cuestión esta ligada por sobre todas las cosas a varios factores que voy a mencionar:
Falta de personas en un proyecto
Definitivamente es una variable que en la mayoría de los proyectos de software sucede y que es la falta de personas en los proyectos. Dependiendo del proyecto la cantidad de Ingenieros, Analistas o Programadores va a variar notablemente, y ésta falta de integrantes se hace sentir para tener todo documentado, seguramente los Analistas estarán preocupados en realizar un análisis y diseño perfecto, mientras que los desarrolladores se preocuparán más por la programación y las funcionalidades del sistema.
Mala distribución de las tareas
Vamos a suponer que nuestro limitante ahora no es la falta de personal, sino más bien una mala distribución de las tareas asignadas, dejando de lado y solo al final del proyecto la creación de los documentos y la propia documentación del código fuente. Esto también esta aparejado con el bajo control de exigencia para con estos documentos y por sobre todas las cosas no dejarlos como una última tarea sino más bien como una tarea paralela al Análisis, Diseño, Desarrollo y Pruebas.
Falta de experiencia
Nuevo limitante para la documentación, la experiencia es un factor importante y nos lleva a tener una buena idea de redacción y corrección de documentación precisa. Es de suma importancia adquirir experiencia en este tipo de tareas de documentación, tanto para no escribir documentos obsoletos y para que no falte información del proyecto.
No utilizar herramientas adecuadas
En la actualidad, la mayoría de los lenguajes de programación cuentan con herramientas que nos permite tanto organizar como agilizar el proceso de documentación en los códigos fuente. Con formatos mucho más profesionales y casi instantáneos, el echo de no utilizar estas herramientas hace que muchos de los programadores ni siquiera intenten documentar los procesos más importantes, las clases padres, etc.
Todos estos factores y seguramente muchos más hacen que la documentación de los proyectos de software sea nula, escasa, obsoleta, etc
Esto sin dudas es una tarea de suma importancia y un proceso de aprendizaje que no debemos dejar nunca de lado.
Saludos  
" /><input name="lang" type="hidden" value="es" /><input name="gn" type="hidden" value="ml" /><input type="hidden" id="interface" name="interface" value="full" />
			<div style="margin-left:40%;">
			
				<input style="float:left;" type="image" width="40" height="40" src="http://xyox.info/wp-content/plugins/vozme/img/megaphone40x40w.gif" alt="Escucha este post" onclick="window.open('', 'e72f91f43b992657b3bab060fc36dc40', 'width=600,height=370,scrollbars=yes,location=yes,menubar=yes,resizable=yes,status=yes,toolbar=yes');">
				<div style="margin-left:48px; text-align:left;"><a style="font-size:12px;" href="javascript:void(0);" onclick="window.open('', 'e72f91f43b992657b3bab060fc36dc40', 'width=600,height=370,scrollbars=yes,location=yes,menubar=yes,resizable=yes,status=yes,toolbar=yes'); document.getElementById('vozme_form_e72f91f43b992657b3bab060fc36dc40').submit();">Escucha<br/>este post</a></div>
			</div></form>]]></content:encoded>
			<wfw:commentRss>http://xyox.info/2009/12/28/y-hablando-de-codigo-por-que-nunca-documentamos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Detección de rectas a través la transformada de Hough implementación en PHP</title>
		<link>http://xyox.info/2009/10/14/deteccion-de-rectas-a-traves-la-transformada-de-hough-implementacion-en-php/</link>
		<comments>http://xyox.info/2009/10/14/deteccion-de-rectas-a-traves-la-transformada-de-hough-implementacion-en-php/#comments</comments>
		<pubDate>Thu, 15 Oct 2009 02:32:47 +0000</pubDate>
		<dc:creator>XYOX</dc:creator>
				<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[scripts]]></category>
		<category><![CDATA[codigo]]></category>
		<category><![CDATA[deteccion]]></category>
		<category><![CDATA[gd]]></category>
		<category><![CDATA[Inteligencia Artificial]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[rectas]]></category>
		<category><![CDATA[transformada hough]]></category>

		<guid isPermaLink="false">http://xyox.info/?p=376</guid>
		<description><![CDATA[Bueeeno este fue un trabajo que presente en la universidad en Inteligencia Artificial, con respecto al tema en internet la gran parte de informacion esta en ingles, y tampoco hay la implementacion en PHP... asi que aqui publico el trabajito que hice El objetivo de esto es simple, necesitamos reconocer formas a partir de simples [...]]]></description>
			<content:encoded><![CDATA[<p>Bueeeno este fue un trabajo que presente en la universidad en Inteligencia Artificial, con respecto al tema en internet la gran parte de informacion esta en ingles, y tampoco hay la implementacion en PHP... asi que aqui publico el trabajito que hice <img src='http://xyox.info/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p style="text-align: center;"><img class="aligncenter" title="Deteccion de rectas con la transformada de Hough" src="http://img115.imageshack.us/img115/3213/deteccionderectas.png" alt="" width="503" height="156" /></p>
<p>El objetivo de esto es simple, necesitamos reconocer formas a partir de<br />
simples líneas, cuadrados, rectángulos, triángulos y hasta círculos. Esto es un  reto para los métodos de inteligencia artificial, desde hace muchos años estos  métodos ya estaban en teoría desarrollados pero por las limitaciones de los  computadores, velocidad de procesamiento, memoria entre otras cosas era  muy pesado o poco probable desarrollar exitosamente estas técnicas.</p>
<p><span id="more-376"></span><strong>Transformada de Hough</strong></p>
<p>La transformada de Hough consiste en permitir descubrir las formas en una<br />
imagen. Se basa en transformar puntos de la imagen en un espacio de<br />
parámetros. La idea es encontrar rectas, como se menciono en teoría se<br />
pueden encontrar varias formas, pero el costo computacional es elevado.</p>
<p>La aplicación mas simple de la transforma de hough es para la detección de<br />
rectas, lo primero es tener una imagen binarizada, resultado de la detección<br />
de bordes. Para cada punto x, y de la imagen que estemos utilizando pasan<br />
infinitas rectas de la forma: y=ax+b, la ecuación de la recta. Luego cada<br />
punto x, y vota para cada pareja de puntos que satisface<strong> b=y-ax</strong>.</p>
<p>El algoritmo tiene que recorrer todos los puntos x, y, y para cada uno votar<br />
en el espacio de parámetros m, b o también llamado acumulador. Luego la<br />
pareja m, b con más votos o el máximo del acumulador da la ecuación de la<br />
recta.</p>
<p>Hasta aquí hemos llegado de manera sencilla con nuestro algoritmo, pero<br />
existe un problema, los valores de m tienden al infinito, por lo que<br />
almacenarlos y graficarlos será un impedimento para el uso de la<br />
transformada.</p>
<p>La solución planteada es la siguiente, si bien y = ax + b, se dice que toda<br />
ecuación puede ser representada en senos y cósenos es así que la ecuación de la recta de la forma y = ax + b, puede ser representada como:</p>
<p style="text-align: center;"><strong>p = xcos(θ) + ysen(θ)</strong></p>
<p>Esta es la llamada ecuación en la forma normal de la recta, donde p es la<br />
distancia de la recta al origen y θ es el ángulo entre la perpendicular y el eje  x, de esta forma son menos los puntos que hay que recorrer y por lo tanto más rápido es el algoritmo.</p>
<p>Los límites de estos están dados por las siguientes condiciones, θ varia entre 0 y 180 ya que a partir de 180 hasta 360 grados se vuelven a cruzar las curvas y p varia en la diagonal de la imagen es decir la hipotenusa con respecto a los lados de la imagen original.</p>
<p><strong>Implementación en el lenguaje PHP</strong></p>
<p>Si bien PHP esta orientado para el desarrollo de páginas dinámicas para entorno Web, eso no le quita potencialidad a la hora de usarlo como lenguaje de desarrollo para algoritmos complejos, ya que la gran facilidad que nos brinda en la manipulación de los tipos de datos lo hacen flexible a estas<br />
situaciones.</p>
<p>PHP usa la librería GD para manipulación de imágenes, los pasos que<br />
seguiremos en la implementación son los siguientes:</p>
<ul>
<li>Implementación de un frontend simple</li>
<li> Detección de bordes, aplicando el filtro Sobel.</li>
<li> Binarizacion de las líneas en contraste con el fondo.</li>
<li> Implementación del acumulador.</li>
<li> Graficar el acumulador en una nueva imagen.</li>
</ul>
<p>La interfaz será sencilla, constara de un formulario base donde podamos subir una imagen y cajas de entrada para la personalización del método a emplear:</p>
<p style="text-align: center;"><img class="aligncenter" title="frontend transformada de hough" src="http://img260.imageshack.us/img260/2664/ia3.png" alt="" width="457" height="446" /></p>
<p>Al momento de subir la imagen, la convertiremos dinámicamente al formato PNG de acuerdo a su actual extensión</p>
<pre class="php"><span style="color: #b1b100;">switch</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$ext</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
<span style="color: #b1b100;">case</span> <span style="color: #ff0000;">'jpeg'</span>:
<span style="color: #b1b100;">case</span> <span style="color: #ff0000;">'jpg'</span>: <span style="color: #0000ff;">$imEntrada</span> = imagecreatefromjpeg<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$archivo</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'tmp_name'</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #b1b100;">break</span>;
<span style="color: #b1b100;">case</span> <span style="color: #ff0000;">'gif'</span>: <span style="color: #0000ff;">$imEntrada</span> = imagecreatefromgif<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$archivo</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'tmp_name'</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #b1b100;">break</span>;
<span style="color: #b1b100;">case</span> <span style="color: #ff0000;">'png'</span>: <span style="color: #0000ff;">$imEntrada</span> = imagecreatefromgif<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$archivo</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'tmp_name'</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #b1b100;">break</span>;
<span style="color: #66cc66;">&#125;</span>
imagepng<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$imEntrada</span>,<span style="color: #0000ff;">$this</span>-&gt;<span style="color: #006600;">IMG_ENTADA</span><span style="color: #66cc66;">&#41;</span>;</pre>
<p>Donde this->IMG_ENTADA es el nombre de entrada que definimos previamente junto con el nombre de salida de las imágenes</p>
<pre class="php"><span style="color: #0000ff;">$tratamiento</span> = <span style="color: #000000; font-weight: bold;">new</span> TratamientoImagen<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #0000ff;">$tratamiento</span>-&gt;<span style="color: #006600;">IMG_ENTADA</span> = <span style="color: #ff0000;">&quot;entrada.png&quot;</span>;
<span style="color: #0000ff;">$tratamiento</span>-&gt;<span style="color: #006600;">IMG_SALIDA</span> = <span style="color: #ff0000;">&quot;salida.png&quot;</span>;</pre>
<p>Necesitamos detectar los bordes de la imagen, en este resumen no incluiré la forma como se desarrollara la misma, en el proyecto presentado se uso el Filtro Sobel</p>
<p style="text-align: center;"><img class="aligncenter" title="sobel - Blog XYOX" src="http://img122.imageshack.us/img122/2664/ia3.png" alt="" width="421" height="200" /></p>
<p>Ahora podemos aplicar la transformada de Hough:</p>
<pre class="php"><span style="color: #b1b100;">for</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$y</span>=<span style="color: #cc66cc;">0</span>; <span style="color: #0000ff;">$y</span>&lt;<span style="color: #0000ff;">$alto</span>; <span style="color: #0000ff;">$y</span>++<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
    <span style="color: #b1b100;">for</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$x</span>=<span style="color: #cc66cc;">0</span>; <span style="color: #0000ff;">$x</span>&lt;<span style="color: #0000ff;">$ancho</span>; <span style="color: #0000ff;">$x</span>++<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$matrImag</span><span style="color: #66cc66;">&#91;</span><span style="color: #0000ff;">$y</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#91;</span><span style="color: #0000ff;">$x</span><span style="color: #66cc66;">&#93;</span> == <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
           <span style="color: #b1b100;">for</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$theta</span>=<span style="color: #cc66cc;">0</span>; <span style="color: #0000ff;">$theta</span>&lt;<span style="color: #0000ff;">$maximoTheta</span>; <span style="color: #0000ff;">$theta</span>+=<span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
                <span style="color: #0000ff;">$r</span> = <span style="color: #0000ff;">$x</span> * <a href="http://www.php.net/cos"><span style="color: #000066;">cos</span></a><span style="color: #66cc66;">&#40;</span><a href="http://www.php.net/deg2rad"><span style="color: #000066;">deg2rad</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$theta</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> + <span style="color: #0000ff;">$y</span> * <a href="http://www.php.net/sin"><span style="color: #000066;">sin</span></a><span style="color: #66cc66;">&#40;</span><a href="http://www.php.net/deg2rad"><span style="color: #000066;">deg2rad</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$theta</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
                <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>!<a href="http://www.php.net/isset"><span style="color: #000066;">isset</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$data</span><span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span>int<span style="color: #66cc66;">&#41;</span><span style="color: #0000ff;">$theta</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span>int<span style="color: #66cc66;">&#41;</span><span style="color: #0000ff;">$r</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
                  <span style="color: #0000ff;">$data</span><span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span>int<span style="color: #66cc66;">&#41;</span><span style="color: #0000ff;">$theta</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span>int<span style="color: #66cc66;">&#41;</span><span style="color: #0000ff;">$r</span><span style="color: #66cc66;">&#93;</span> = <span style="color: #cc66cc;">1</span>;
                <span style="color: #66cc66;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #66cc66;">&#123;</span>
                  <span style="color: #0000ff;">$data</span><span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span>int<span style="color: #66cc66;">&#41;</span><span style="color: #0000ff;">$theta</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#40;</span>int<span style="color: #66cc66;">&#41;</span><span style="color: #0000ff;">$r</span><span style="color: #66cc66;">&#93;</span> ++;
                <span style="color: #66cc66;">&#125;</span>
             <span style="color: #66cc66;">&#125;</span>
         <span style="color: #66cc66;">&#125;</span>
      <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre>
<p>Donde la matriz $data es nuestro acumulador, finalmente graficamos los<br />
votos recibidos en esta matriz</p>
<p style="text-align: center;"><img class="aligncenter" title="Hough - Blog XYOX" src="http://img208.imageshack.us/img208/2664/ia3.png" alt="" width="360" height="248" /></p>
<p><a href="http://xyox.info/labs/hough_en_php_resumen.pdf">Descargar PDF</a><br />
<a href="http://xyox.info/labs/trans_hough.rar">Descargar Codigo</a></p>
<form id="vozme_form_6212d8f3fe79c495787180c2db1b13b6" method="post" name="vozme_form_6212d8f3fe79c495787180c2db1b13b6" target="6212d8f3fe79c495787180c2db1b13b6" action="http://vozme.com/text2voice.php"><input name="text" type="hidden" value="Detección de rectas a través la transformada de Hough implementación en PHP.. Bueeeno este fue un trabajo que presente en la universidad en Inteligencia Artificial, con respecto al tema en internet la gran parte de informacion esta en ingles, y tampoco hay la implementacion en PHP... asi que aqui publico el trabajito que hice  

El objetivo de esto es simple, necesitamos reconocer formas a partir de
simples líneas, cuadrados, rectángulos, triángulos y hasta círculos. Esto es un  reto para los métodos de inteligencia artificial, desde hace muchos años estos  métodos ya estaban en teoría desarrollados pero por las limitaciones de los  computadores, velocidad de procesamiento, memoria entre otras cosas era  muy pesado o poco probable desarrollar exitosamente estas técnicas.
Transformada de Hough
La transformada de Hough consiste en permitir descubrir las formas en una
imagen. Se basa en transformar puntos de la imagen en un espacio de
parámetros. La idea es encontrar rectas, como se menciono en teoría se
pueden encontrar varias formas, pero el costo computacional es elevado.
La aplicación mas simple de la transforma de hough es para la detección de
rectas, lo primero es tener una imagen binarizada, resultado de la detección
de bordes. Para cada punto x, y de la imagen que estemos utilizando pasan
infinitas rectas de la forma: y=ax+b, la ecuación de la recta. Luego cada
punto x, y vota para cada pareja de puntos que satisface b=y-ax.
El algoritmo tiene que recorrer todos los puntos x, y, y para cada uno votar
en el espacio de parámetros m, b o también llamado acumulador. Luego la
pareja m, b con más votos o el máximo del acumulador da la ecuación de la
recta.
Hasta aquí hemos llegado de manera sencilla con nuestro algoritmo, pero
existe un problema, los valores de m tienden al infinito, por lo que
almacenarlos y graficarlos será un impedimento para el uso de la
transformada.
La solución planteada es la siguiente, si bien y = ax + b, se dice que toda
ecuación puede ser representada en senos y cósenos es así que la ecuación de la recta de la forma y = ax + b, puede ser representada como:
p = xcos(θ) + ysen(θ)
Esta es la llamada ecuación en la forma normal de la recta, donde p es la
distancia de la recta al origen y θ es el ángulo entre la perpendicular y el eje  x, de esta forma son menos los puntos que hay que recorrer y por lo tanto más rápido es el algoritmo.
Los límites de estos están dados por las siguientes condiciones, θ varia entre 0 y 180 ya que a partir de 180 hasta 360 grados se vuelven a cruzar las curvas y p varia en la diagonal de la imagen es decir la hipotenusa con respecto a los lados de la imagen original.
Implementación en el lenguaje PHP
Si bien PHP esta orientado para el desarrollo de páginas dinámicas para entorno Web, eso no le quita potencialidad a la hora de usarlo como lenguaje de desarrollo para algoritmos complejos, ya que la gran facilidad que nos brinda en la manipulación de los tipos de datos lo hacen flexible a estas
situaciones.
PHP usa la librería GD para manipulación de imágenes, los pasos que
seguiremos en la implementación son los siguientes:

Implementación de un frontend simple
 Detección de bordes, aplicando el filtro Sobel.
 Binarizacion de las líneas en contraste con el fondo.
 Implementación del acumulador.
 Graficar el acumulador en una nueva imagen.

La interfaz será sencilla, constara de un formulario base donde podamos subir una imagen y cajas de entrada para la personalización del método a emplear:

Al momento de subir la imagen, la convertiremos dinámicamente al formato PNG de acuerdo a su actual extensión
switch &#40;$ext&#41; &#123;
case &quot;jpeg&quot;:
case &quot;jpg&quot;: $imEntrada = imagecreatefromjpeg&#40;$archivo&#91;&quot;tmp_name&quot;&#93;&#41;;
break;
case &quot;gif&quot;: $imEntrada = imagecreatefromgif&#40;$archivo&#91;&quot;tmp_name&quot;&#93;&#41;;
break;
case &quot;png&quot;: $imEntrada = imagecreatefromgif&#40;$archivo&#91;&quot;tmp_name&quot;&#93;&#41;;
break;
&#125;
imagepng&#40;$imEntrada,$this-&gt;IMG_ENTADA&#41;;
Donde this->IMG_ENTADA es el nombre de entrada que definimos previamente junto con el nombre de salida de las imágenes
$tratamiento = new TratamientoImagen&#40;&#41;;
$tratamiento-&gt;IMG_ENTADA = &quot;entrada.png&quot;;
$tratamiento-&gt;IMG_SALIDA = &quot;salida.png&quot;;
Necesitamos detectar los bordes de la imagen, en este resumen no incluiré la forma como se desarrollara la misma, en el proyecto presentado se uso el Filtro Sobel

Ahora podemos aplicar la transformada de Hough:
for &#40;$y=0; $y&lt;$alto; $y++&#41; &#123;
    for &#40;$x=0; $x&lt;$ancho; $x++&#41; &#123;
        if &#40;$matrImag&#91;$y&#93;&#91;$x&#93; == 1&#41; &#123;
           for &#40;$theta=0; $theta&lt;$maximoTheta; $theta+=1&#41; &#123;
                $r = $x * cos&#40;deg2rad&#40;$theta&#41;&#41; + $y * sin&#40;deg2rad&#40;$theta&#41;&#41;;
                if &#40;!isset&#40;$data&#91;&#40;int&#41;$theta&#93;&#91;&#40;int&#41;$r&#93;&#41;&#41; &#123;
                  $data&#91;&#40;int&#41;$theta&#93;&#91;&#40;int&#41;$r&#93; = 1;
                &#125; else &#123;
                  $data&#91;&#40;int&#41;$theta&#93;&#91;&#40;int&#41;$r&#93; ++;
                &#125;
             &#125;
         &#125;
      &#125;
&#125;
Donde la matriz $data es nuestro acumulador, finalmente graficamos los
votos recibidos en esta matriz

Descargar PDF
Descargar Codigo
" /><input name="lang" type="hidden" value="es" /><input name="gn" type="hidden" value="ml" /><input type="hidden" id="interface" name="interface" value="full" />
			<div style="margin-left:40%;">
			
				<input style="float:left;" type="image" width="40" height="40" src="http://xyox.info/wp-content/plugins/vozme/img/megaphone40x40w.gif" alt="Escucha este post" onclick="window.open('', '6212d8f3fe79c495787180c2db1b13b6', 'width=600,height=370,scrollbars=yes,location=yes,menubar=yes,resizable=yes,status=yes,toolbar=yes');">
				<div style="margin-left:48px; text-align:left;"><a style="font-size:12px;" href="javascript:void(0);" onclick="window.open('', '6212d8f3fe79c495787180c2db1b13b6', 'width=600,height=370,scrollbars=yes,location=yes,menubar=yes,resizable=yes,status=yes,toolbar=yes'); document.getElementById('vozme_form_6212d8f3fe79c495787180c2db1b13b6').submit();">Escucha<br/>este post</a></div>
			</div></form>]]></content:encoded>
			<wfw:commentRss>http://xyox.info/2009/10/14/deteccion-de-rectas-a-traves-la-transformada-de-hough-implementacion-en-php/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Se revela el codigo de Windows Vista</title>
		<link>http://xyox.info/2009/09/14/se-revela-el-codigo-de-windows-vista/</link>
		<comments>http://xyox.info/2009/09/14/se-revela-el-codigo-de-windows-vista/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 17:48:20 +0000</pubDate>
		<dc:creator>XYOX</dc:creator>
				<category><![CDATA[Humor]]></category>
		<category><![CDATA[codigo]]></category>
		<category><![CDATA[fuente]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://xyox.info/?p=361</guid>
		<description><![CDATA[Esta mañana me di con el asombro de la revelacion del codigo fuente de Windows Vista parece ser que un grupo de Hackers llamados Training hack, grupo macedonio se hizo del codigo de la version de Windows, aqui estan las pruebas que revelan lo que sospechabamos... Gracias a las listas de ubuntu por la noticia [...]]]></description>
			<content:encoded><![CDATA[<p>Esta mañana me di con el asombro de la revelacion del codigo fuente de Windows Vista parece ser que un grupo de Hackers llamados Training hack, grupo macedonio se hizo del codigo de la version de Windows, aqui estan las pruebas que revelan lo que sospechabamos...</p>
<p><img class="aligncenter" title="Windows Vista Source Code - Blog XYOX" src="http://img149.imageshack.us/img149/9161/vistasource.gif" alt="" width="470" height="830" /></p>
<p>Gracias a las listas de ubuntu por la noticia <img src='http://xyox.info/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p><a href="http://luauf.com/2008/04/28/windows-vista-open-source/">Fuente</a></p>
<form id="vozme_form_3aabcf43467d02bfbd026f5ad7ccd413" method="post" name="vozme_form_3aabcf43467d02bfbd026f5ad7ccd413" target="3aabcf43467d02bfbd026f5ad7ccd413" action="http://vozme.com/text2voice.php"><input name="text" type="hidden" value="Se revela el codigo de Windows Vista.. Esta mañana me di con el asombro de la revelacion del codigo fuente de Windows Vista parece ser que un grupo de Hackers llamados Training hack, grupo macedonio se hizo del codigo de la version de Windows, aqui estan las pruebas que revelan lo que sospechabamos...

Gracias a las listas de ubuntu por la noticia  
Fuente
" /><input name="lang" type="hidden" value="es" /><input name="gn" type="hidden" value="ml" /><input type="hidden" id="interface" name="interface" value="full" />
			<div style="margin-left:40%;">
			
				<input style="float:left;" type="image" width="40" height="40" src="http://xyox.info/wp-content/plugins/vozme/img/megaphone40x40w.gif" alt="Escucha este post" onclick="window.open('', '3aabcf43467d02bfbd026f5ad7ccd413', 'width=600,height=370,scrollbars=yes,location=yes,menubar=yes,resizable=yes,status=yes,toolbar=yes');">
				<div style="margin-left:48px; text-align:left;"><a style="font-size:12px;" href="javascript:void(0);" onclick="window.open('', '3aabcf43467d02bfbd026f5ad7ccd413', 'width=600,height=370,scrollbars=yes,location=yes,menubar=yes,resizable=yes,status=yes,toolbar=yes'); document.getElementById('vozme_form_3aabcf43467d02bfbd026f5ad7ccd413').submit();">Escucha<br/>este post</a></div>
			</div></form>]]></content:encoded>
			<wfw:commentRss>http://xyox.info/2009/09/14/se-revela-el-codigo-de-windows-vista/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
<enclosure url="http://www.goear.com/files/sst2/96373dc2496169f343774a4d383035a4.mp3" length="5046400" type="audio/mpeg" />
		</item>
	</channel>
</rss>
