José F. Silva Neto
=====================================================
![ ](pics/me-madrid.jpg width="20%")
I received BSc and MSc degrees in Computer Science from [Federal University at Rio Grande do Norte](http://www.ufrn.br/en), advised by professor
[Bruno Motta](https://scholar.google.com.br/citations?hl=en&user=Bgvt9KYAAAAJ&view_op=list_works&sortby=pubdate) working on image segmentation.
During one year, I was also an undergraduate Geophysics student at the same institution.
I am interested in Computer Graphics, Vision and Image Processing applications.
**Contact**: [[email](netolcc06@gmail.com)]
Publications
=====================================================
**Learning to dance: A graph convolutional adversarial network to generate realistic dance motions from audio.** João P.Ferreira; Thiago M. Coutinho; Thiago L. Gomes;
**José F. Neto**; Rafael Azevedo; Renato Martins; Erickson R. Nascimento. [[Computers & Graphics](https://arxiv.org/abs/2011.12999)], Vol. 94, February 2021.
![ ](pics/ltd-gcn.PNG width="55%")
_Abstract_: Synthesizing human motion through learning techniques is becoming an increasingly popular approach
to alleviating the requirement of new data capture to produce animations. Learning to move naturally
from music, i.e., to dance, is one of the more complex motions humans often perform effortlessly. Each
dance movement is unique, yet such movements maintain the core characteristics of the dance style.
Most approaches addressing this problem with classical convolutional and recursive neural models undergo training and variability issues due to the non-Euclidean geometry of the motion manifold structure. In this paper, we design a novel method based on graph convolutional networks to tackle the
problem of automatic dance generation from audio information. Our method uses an adversarial learning scheme conditioned on the input music audios to create natural motions preserving the key movements of different music styles. We evaluate our method with three quantitative metrics of generative
methods and a user study. The results suggest that the proposed GCN model outperforms the state-ofthe-art dance generation method conditioned on music in different experiments. Moreover, our graphconvolutional approach is simpler, easier to be trained, and capable of generating more realistic motion styles regarding qualitative and different quantitative metrics. It also presented a visual movement
perceptual quality comparable to real motion data. The dataset and project are publicly available at:
https://www.verlab.dcc.ufmg.br/motion-analysis/cag2020.
**Automatic Fuzzy Segmentation of Textural Images using Adaptive Divergence Affinity Functions.** **_José F. S. Neto_**; *Waldson P. N. Leandro*;
*Matheus Gadelha*; *Tiago S. Santos*; *Bruno M. Carvalho*; *Edgar Garduño*. [[IWSSIP2019](CV/Automatic_Fuzzy_Segmentation_of_Textural_Images_using_Adaptive_Divergence_Affinity_Functions.pdf)].
Presented at 26th International Conference on Systems, Signals and Image Processing, IWSSIP 2019, Osijek, Croatia, June 05-07, 2019.
![ ](pics/clusters_.png width="40%")
_Abstract_: Digital image segmentation is the process of assigning distinct labels to different objects in a digital image,
and the fuzzy segmentation algorithm has been successfully used in the segmentation of images from a wide variety of
sources. However, the traditional fuzzy segmentation algorithm fails to segment objects that are characterized by textures
whose patterns cannot be successfully described by simple statistics computed over a very restricted area. In this paper,
we propose an extension of the fuzzy segmentation algorithm that uses adaptive textural affinity functions to perform the
segmentation of such objects on bidimensional images. The adaptive affinity functions compute their appropriate
neighborhood size as they compute the texture descriptors surrounding the seed spels (spatial elements), according to
the characteristics of the texture being processed. The algorithm then segments the image with an appropriate neighborhood
for each object. We performed experiments on mosaic images that were composed using images from the Brodatz database,
and compared our results with the ones produced by a recently published texture segmentation algorithm, showing the
applicability of our method.
-----------------------------------
**Chronic Wound Tissue Classification using Convolutional Networks and Color Space Reduction.** *Vitor Godeiro*; **_José F. S. Neto_**;
*Bruno Motta De Carvalho*; *Julianny Barreto Ferraz*; *Bruno Santana Da Silva*; *Renata Antonaci Gama*. [[MLSP2018](https://ieeexplore.ieee.org/document/8517026)].
Presented at 28th IEEE International Workshop on Machine Learning for Signal Processing, MLSP 2018, Aalborg, Denmark, September 17-20, 2018.
![ ](pics/classification01-min.jpg width="35%")
_Abstract_: Chronic Wounds are ulcers presenting a difficult or nearly interrupted cicatrization process, and increase the risk of
complications to the health and well-being of patients, like amputation and infections. The goal of this research is the
development of a general noninvasive methodology for the segmentation and analysis of chronic wounds images by computing the
wound areas affected by necrosis. Invasive techniques are usually used for this calculation, such as manual planimetry with
plastic films. We investigated algorithms to perform the segmentation of wounds as well as the use of several convolutional
networks for classifying tissue as Necrotic, Granulation or Slough. We tested four architectures: U-Net, Segnet, FCN8 and FCN32,
and proposed a color space reduction methodology that increased the reported accuracies, specificities, sensitivities and
Dice coefficients for all 4 networks, achieving very good levels.
-------
![ ](pics/mdissert.jpg width="20%")
**Fuzzy Segmentation of Three-Dimensional Objects with Textural Properties. ** *Master's thesis.*
Extended the [Fast Multi-Object Fuzzy Segmentation](http://www.dimap.ufrn.br/~motta/papers/Carvalho05c.pdf) (FAST-MOFS) algorithm
in order to achieve three-dimensional texture segmentation by employing new affinity functions. Performed experiments
with synthetic and real data obtained from the Multimodal Brain Tumor Segmentation challenge dataset
from the Medical Image Computing and Computer Assisted Intervention (MICCAI) Conference 2012.
-------
**Fuzzy segmentation of video shots using hybrid color spaces and motion information**.
*Bruno M. Carvalho*; *Edgar Garduño*; *Tiago S. Santos*; *Lucas M. Oliveira*; **_José F. S. Neto_**.
[Pattern Analysis and Applications, v. 17, p. 249-264, 2014](https://link.springer.com/article/10.1007/s10044-013-0359-1).
![ ](CV/plane2.gif width="40%")
_Abstract_: Video segmentation can be defined as the process of partitioning video into spatio-temporal objects that are
homogeneous in some feature space, with the choice of features being very important to the success of the segmentation
process. Fuzzy segmentation is a semi-automatic region-growing segmentation algorithm that assigns to each element in an
image a grade of membership in an object. In this paper, we propose an extension of the multi-object fuzzy segmentation
algorithm to segment pre-acquired color video shots. The color features are selected from channels belonging to
different color models using two different heuristics: one that uses the correlations between the color channels
to maximize the amount of information used in the segmentation process, and one that chooses the color channels based
on the separation of the clusters formed by the seed spels for all possible color spaces. Motion information is also
incorporated into the segmentation process by making use of dense optical flow maps. We performed experiments on
synthetic videos, with and without noise, as well as on some real videos. The experiments show promising results,
with the segmentations of real videos produced using hybrid color spaces being more accurate than the ones produced
using three other color models. We also show that our method compares favorably to a state-of-the art video segmentation
algorithm.
Projects
=====================================================
Eulerian Fluid Simulation
--------
![ ](pics/fixedSource.gif width="30%")
Based on Stable Fluids paper by Jos Stam. It is an [Eulerian approach with semi-lagrangian advection](https://github.com/netolcc06/Sim), but unlike the original paper, the fluid step simulation occurs without swapping buffers. A GPU implementation is coming.
Forward Kinematics
--------
![ ](CV/quat_.gif width="40%")
Joints euler angles and positions are taken as input from a bvh file. The [animation](https://github.com/netolcc06/Forward-Kinematics) is then generated by transforming the joints positions using quaternion algebra.
Ray Tracer
--------
![ ](pics/spheres.jpg width="40%")
It is mandatory for everyone interested in graphics to implement a ray tracer.
This is a C++ implementation based on the new ray tracer guru Peter Shirley's book series.
The implementation covers basic dieletric, diffuse and metal materials. As one could infer from the picture,
refraction and reflection were implemented. Besides that, I added boxes, planes, and triangle meshes structures.
You can check my code at [Baby Ray Tracer](https://github.com/netolcc06/BabyRayTracer). For the future:
Bounding Volume Hierarchies, textures and light emiting objects.
Rays
--------
![ ](pics/rays.png width="40%")
This [algorithm](https://github.com/netolcc06/Rays) takes a polygon with $n$ vertices $(v_x, v_y) \mid (-1 \leq v_x \leq 1)$ and
$(-1 \leq v_y \leq 1)$ as input and generates $64$ lines that may or not cross the polygon. The parts of the lines inside the polygon
are colored green and the outside parts are colored gray.
Basically, if a line is inside the screen space, it contains at least $2$ intersection points.
If the line intersects the polygon, it will have more than $2$ intersection points.
Since the first and the last points intersect walls of the screen/window space, all the other points
come from intersections with the given polygon.
Then, as example, taking a line that has $4$ intersection points $(p_0, p_1, p_2, p_3)$, $p_0p_1$ is outside the polygon,
$p_1p_2$ is inside the polygon, and $p_2p_3$ is outside the polygon - $p_0$ and $p_3$ are the intersections with the
screen/window space. You can find detailed discussions
about my solution by reading the comments in the class [Line](https://github.com/netolcc06/Rays/blob/master/Line.hpp).
Maze
--------
[Randomized maze generation](https://github.com/netolcc06/Maze) using Kruskal's Algorithm. After the maze is generated,
the exit path is found (and highlighted) via backtracking.
![ ](CV/mazecut.gif width="70%")
Mesh-IO
--------
![ ](pics/dragon.png width="40%")
In the Geometry Processing course I took during my Masters, the professor suggested we used
the [OpenMesh](https://www.openmesh.org/) to work on the projects of the class. Essentially the professor provided a basis
code and we should implement a specific algorithm, such as the marching cubes. It happens that I didn't like the way OpenMesh
was designed, since I had considered it too verbose for simple algorithms at that time - I don't know its current state.
Given that, I developed a few C++ classes to handle a 3D mesh structure which provides direct access to vertices,
half-edges and faces. See the implementation [here](https://github.com/netolcc06/Triangulating). Nowadays I know libigl, therefore I have no reasons to use my own code.
However, I had a lot of fun designing my Mesh structure - take a look at
my [Mesh.h](https://github.com/netolcc06/Triangulating/blob/master/Mesh.h) and you'll see the trick.