Papers and Presentations


Embedding Color Watermarks Into Halftoning Images Using Minimum-Distance Binary Patterns

This paper presents a half toning-based watermarking method. This method enables the embedding of a color image into a binary black-and-white halftone, while maintaining the image quality. The proposed technique is capable of embedding watermarks of three color channels into a binary halftone. To achieve high quality halftones, the method maps colors to halftone channels with homogeneous dot patterns which in turn use different binary texture orientations to carry the watermark. They are obtained by solving a minimization problem in which the objective function is the binary distance between the original binary halftone and the available patterns. To restore the color information, we scan the printed halftone image and compute the inverse information (considering the dot pattern). Using the mapped information, we restore the original color channels from the halftone images using a high-quality inverse half toning algorithm. Experimental results show that the method produces restorations with a superior quality than other methods found in the literature and increases the embedding capacity.


Detecting tampering in audio-visual content using QIM watermarking

This paper presents a framework for detecting tampered information in digital audio-visual content. The proposed framework uses a combination of temporal and spatial watermarks that do not decrease the quality of host videos. A modified version of the Quantization Index Modulation (QIM) algorithm is used to embed watermarks. The fragility of the QIM water- marking algorithm makes it possible to detect local, global, and temporal tampering attacks with pixel granularity. The technique is also able to identify the type of tampering attack. The framework is fast, robust, and accurate.


Improved Performance of Inverse Halftoning Algorithms via Coupled Dictionaries

Inverse halftoning techniques are known to introduce visible distortions (typically, blurring or noise) into the reconstructed image. To reduce the severity of these distortions, we propose a novel training approach for inverse halftoning algorithms. The proposed technique uses a coupled dictionary (CD) to match distorted and original images via a sparse representation. This technique enforces similarities of sparse representations between distorted and non-distorted images. Results show that the proposed technique can improve the performance of different inverse halftone approaches. Images reconstructed with the proposed approach have a higher quality, showing less blur, noise, and chromatic aberrations.


Video Quality Ruler: A New Experimental Methodology for Assessing Video Quality

In this paper, we propose a subjective video quality assessment method called video quality ruler (VQR) that can be employed to determine the perceived quality of video sequences. The described method is an extension of the ISO 20462, which is a method to assess image quality. The VQR method provides an interface with a set of pictures. The subjects assess the video using these pictures as a scale and compare the subjective perceived video quality with their perceived quality. The pictures are calibrated to form a numerical scale in units of just noticeable differences (JNDs), which allows to analyze and compare both subjective video and image stimuli. To evaluate the effectiveness of the proposed method, we compare the VQR method with a well-used single stimulus (SS) method. The results show that proposed method can be used to quantify the overall video quality with higher efficiency and with a less biased results than the SS method.


Tampering Detection of Audio-Visual Content Using Encrypted Watermarks

In this paper, we present a framework for detecting tampered information in digital videos. Using the proposed technique is possible to detect several types of tampering with a pixel granularity. The framework uses a combination of temporal and spatial watermarks that do not decrease the perceived quality of the host videos. We use a modified version of Quantization Index Modulation (QIM) algorithm to store the watermarks. Since QIM is a fragile watermarking scheme, it is possible to detect local, global, and temporal tampers and also estimate the attack type. The framework is fast, robust, and accurate.


A Parallel Framework for Video Super-Resolution (full version)

In this paper, we propose a framework for acquiring super-resolution videos from low-resolution originals. Given that super-resolution conversion algorithms require a large amount of data processing, the proposed framework uses a set of strategies to improve performance and computational efficiency. The strategies consists of a combination of data simplification and parallel processing techniques. The simplification strategies are used to decrease the amount of data to process and, consequently, the required processing time. The parallel processing techniques are designed so that major modifications of the super-resolution algorithms are not required. The framework is fast and makes the video resolution increase timely.


A Distributed System for Predicting User Information in Social Networks

Social media is growing at a rapid pace, being not only a means of interaction between people, but also an important mechanism to provide, analyze and infer information, introducing substantial and permanent changes in the way organizations, communities and individuals communicate. This front line service as Sina Weibo and Twitter disseminates information almost in real time via Online Social Networks. We focus on estimating the users' age ranges of Weibo, which is a fundamental attribute for many applications. We exploit the information provided by the user, such as education, tags and jobs. Furthermore, we extract information from user's content (tweets) to enhance the quality of the predictions. Our predicting model is developed using the Bhattacharyya distance as model based on shallow tweet's contents features, combined with user's information.


Um Sistema Paralelo para Predizer Informações de Usuários em Redes Sociais

Neste trabalho é proposto um método para fins de classificação de informações obtidas em redes sociais por meio de um classificador de estágio múltiplo. Esse classificador, estruturado em dois níveis, utiliza dados obtidos em redes sociais para estimar informações de um usuário de acordo com um critério de classificação. No caso, o critério de informação escolhido e investigado foi a idade, embora o método possa ser facilmente adaptado para estimar outros tipos de informações. O classificador utiliza a distância de Bhattacharyya e a divergência de Kullback-Leiber para relacionar informações coletadas em redes sociais com as informações inseridas para um usuário que se deseja estimar a idade. Como esse tipo de aplicação envolve um grande volume de dados, neste trabalho também é apresentado a estratégia para distribuição e computação dos dados utilizando o método proposto.


A Parallel Framework for Video Super-Resolution (short version)

In this paper, we propose a framework for increasing the processing efficiency of super-resolution algorithms. The framework is targeted at super-resolution video processing algorithms, that require a large amount of data processing. We propose a set of strategies that use a combination of data simplification and parallel processing. The simplification strategies are used to decrease the amount of complex data and, consequently, decrease the processing time. The parallel processing strategies are designed so that major modifications of the super-resolution algorithms are not required. As presented in this paper, the framework is fast and makes the video resolution increase timely.


Um Sistema Distribuído para Análise de Recurso de Conteúdo para Prever Informações de Usuários em Mídias Sociais

Neste trabalho é proposto um método para fins de classificação de informações obtidas em redes sociais por meio de um classificador de estágio múltiplo. Esse classificador, estruturado em dois níveis, utiliza dados obtidos em redes sociais para estimar informações de um usuário de acordo com um critério de classificação. No caso, o critério de informação escolhido e investigado foi a idade, embora o método possa ser facilmente adaptado para estimar outros tipos de informações. O classificador utiliza a distância de Bhattacharyya e a divergência de Kullback-Leiber para relacionar informações coletadas em redes sociais com as informações inseridas para um usuário que se deseja estimar a idade. Como esse tipo de aplicação envolve um grande volume de dados, neste trabalho também é apresentado a estratégia para distribuição e computação dos dados utilizando o método proposto.


Error Concealment Using a Halftone Watermarking Technique

In this paper, we propose an error concealment technique for H.264 coded videos. The algorithm is targeted at compressed videos degraded after packet losses caused by transmission over an unreliable channel. We use a combination of watermarking and halftoning (dithering) techniques. At the encoder side, a dithered version of each video frame is embedded into the video using a watermarking technique. The watermarking technique used by the proposed algorithm is a modified version of the Quantization Index Modulation (QIM) algorithm, which provides a good data hiding capacity. At the decoder side, the algorithm identifies which packets of the video were lost, extracts the corresponding mark, and applies an inverse halftoning technique to estimate the original content. The algorithm is fast and has a good performance, being able to restore content with a better quality than the default H.264 error concealment algorithm.


Using Halftoning and Watermarking Techniques for Tampering Detection

In this paper we present a system with the goal of protecting and restoring tampered information in images and videos. With the proposed approach is possible we implement a tampering detection algorithm. The proposed algorithm is based on watermarking and halftoning techniques. At the encoder side, the algorithm generates a binary version (mark) of the original image or video frame (picture) using a halftoning technique. Then, a watermarking technique is used to embed this mark into the host picture. At the decoder side, after the lost or tampered regions are identified, the original content is recovered by extracting the dithered mark corresponding to the affected areas. An inverse halftoning algorithm is used to convert the dithered version of the picture into a good quality colored multi-level approximation of the original content.


Python for Image Processing

Presentation about how to use Python for image processing. In this presentation we teach about programming in Python by making basic image processing, comparing with Matlab programming resources. The examples show how to work with color images, use Python bindings for OpenCV, plot information using SciPy and Matplotlib, and more. Some example codes are available at https://bitbucket.org/kuraiev/python-for-image-processing-examples


Reconhecimento de Faces Utilizando Decomposição em Valores Singulares

Uma das mais importantes fatorações de matrizes é a Decomposição em Valores Singulares (SVD). Ela é utilizada em diversos problemas práticos, tais como processamento de sinais, ajuste de funções multivariadas, soluções de problemas de otimização, etc. Sua principal aplicação nesses problemas está em permitir a aproximação da pseudo-inversa da matriz decomposta. Neste artigo é apresentado a decomposição SVD e uma amostra de como ela pode ser utilizada para caracterizar informações em imagens de forma que permita a identificação de faces semelhantes.


Error Concealment Using a Halftone Watermarking Technique (short version)

In this paper we propose a novel error concealment technique combining halftoning and watermarking. The proposed technique includes both the encoding and decoding stages. In the encoding stage, a halftone version of the image is self-embedded using a high capacity watermarking algorithm. In the decoding stage, the algorithm looks for errors. If errors are detected in the received image, the halftone mark is extracted and the inverse halftone is computed to substitute the lost data. The technique provides a good perceived quality for images with losses up to 20%.


Fast Inverse Halftoning Algorithm for Ordered Dithered Images

In this paper, we present a simple and fast inverse halftoning algorithm, targeted at reconstructing halftoned images generated using dispersed-dot ordered dithering algorithms. The proposed algorithm uses a simple set of linear filters combined with a stochastic model in order to predict the best intensity values for the binary image pixels. The algorithm produces images with a better perceptual quality than the available algorithms in the literature, preserving most of the fine details of the original gray-level image. It has a high performance, which can be further improved with the use of parallelization techniques.


Implementando o Algoritmo de Compressão de Lempel-Ziv-Welch

O algoritmo de Lempel-Ziv-Welch (LZW) é um algoritmo de compressão de uso geral baseado em dicionários, criado por Terry Welch, sendo uma melhoria no algoritmo de Lempel-Ziv (LZ78). Algoritmos derivados deste último, caracterizam-se por serem simples de implementar e com eficiência razoável na taxa de compressão e no tempo de codificação e decodificação. Neste trabalho, descrevemos o algoritmo e o implementamos em Fortran 2003 como prova de conceito. A implementação do código proposto está disponível no repositório http://bitbucket.org/kuraiev/lzw.


Um Codificador de Huffman Adaptativo

A codificação de Huffman é um método de compressão que usa as probabilidades de ocorrência dos símbolos no conjunto de dados a ser comprimido para determinar códigos de tamanho variável para cada símbolo. Ele foi desenvolvido em 1952 por David A. Huffman que era, na época, estudante de doutorado no MIT, e foi publicado no artigo "A Method for the Construction of Minimum-Redundancy Codes". Neste trabalho, apresentamos e analisamos a performance de um algoritmo que constrói códigos de Huffman dinamicamente em um passo. A implementação do código proposto está disponível no repositório https://bitbucket.org/kuraiev/adaptativehuffman


Realce de Zoom Digital via Correção de Erro

Este artigo descreve a adaptação de técnicas de reconstrução de sinais sub-amostrados para aumento de imagens digitais. Para isso, tratamos o problema da geração de pixels na imagem aumentada como um problema de otimização, supondo que tal imagem seja uma versão incompleta da imagem original.


Introdução ao Estudo do Assembly IA32 -- OllyDbg Dissassembler

Apresentação feita na sexta semana do grupo de estudo. Falei sobre como utilizar ferramentas avançadas de depuração. Nestes slides, apresento como fazer engenharia reversa de programas utilizando o Olly Debugger. Essa ferramenta permite analisar as instruções em tempo de execução, sendo ideal para a analise dinâmica do código. Além disso, ela permite a edição e reprogramação das instruções enquanto o programa executa. Isso faz o OllyDbg a ferramente perfeita para engenharia reversa.


Introdução ao Estudo do Assembly IA32 -- Ida Pro Dissassembler

Apresentação feita na sexta semana do grupo de estudo. Falei sobre como utilizar ferramentas avançadas de depuração. Nestes slides, apresento como fazer engenharia reversa de programas e bibliotecas compilados utilizando a ferramenta IDA Pro. Essa ferramenta permite converter o código-objeto em código fonte em assembly, sendo ideal para análise estática do codigo.


Introdução ao Estudo do Assembly IA32 -- RedPill

Na quinta semana já estávamos aplicando o conhecimento em assembly para analisar a qualidade dos códigos gerados por compiladores, entendendo melhor alguns malwares, compreendendo como funcionam os debuggers, etc. No quinto encontro eu preparei essa apresentação sobre o RedPill, um código desenvolvido por Joanna Rutkowska, que serviu para demonstrar uma série de possíveis vulnerabilidades em ambientes virtualizados. Esse exemplo foi interessante porque nessa semana os membros do grupo estavam estudando sobre syscalls e outros assuntos relacionados aos recursos do código. O código relativo às minhas apresentações da quinta semana do nosso grupo de estudo está na pasta "5semana/code" do repositório https://bitbucket.org/kuraiev/assemblyworkingparty


Introdução ao Estudo do Assembly IA32 -- SIMD

Na quarta semana de estudos já entramos em tópicos mais avançados e interessantes. No quarto encontro expliquei sobre estratégias de vetorização e SIMD (Single Instruction Multiple Data) em nível de operações sobre registradores. Para os exemplos, revisitei o Teorema de Morgan, mostrando como realizar as operações vetoriamente, utilizando os conjuntos de instruções MMX e SSE. Além disso, desenvolvi um exemplo de como realizar o produto interno de dois vetores utilizando operações vetoriais. O código fonte desses projetos estão na pasta "4semana/code" do repositório https://bitbucket.org/kuraiev/assemblyworkingparty


Introdução ao Estudo do Assembly IA32 -- De Morgan

Slides da terceira apresentação feita para o grupo de estudos de Assembly do LCC no verão de 2009. Nesse dia, apresentei sobre as partes de um programa escrito em linguagem de baixo nível. Como são divididas as seções de código, operações lógicas sobre tipos inteiros e mais. Os exemplos desenvolvidos consistem em um programa completo, que verifica todas as identidades do Teorema de Morgan. O código fonte dos programas de exemplo estão na pasta "3semana/demorgan/code" do repositório https://bitbucket.org/kuraiev/assemblyworkingparty


Introdução ao Estudo do Assembly IA32 -- Profiler

O grupo de estudo de Assembly (e arquiteturas de computadores) foi uma iniciativa de um grupo de amigos. Sem nenhuma obrigação formal, nossa principal meta era aprender sobre programação em linguagem de baixo nível, utilizando ferramentas e tecnologias livres. No verão de 2010, nos reuníamos semanalmente no Laboratório de Computação Científica (LCC), no departamento de física da Universidade de Brasília. O único intuito era debater sobre o que haviamos aprendido e trocar trocar conhecimento. Esses slides apresentam um breve tutorial do gprof, o profiler da GNU, que é uma ferramenta muito adequada quando estuda-se programação assembly. O código fonte dos programas que desenvolvi para debater esse dia estão na pasta "1semana/gprof/code" do repositório https://bitbucket.org/kuraiev/assemblyworkingparty


Introdução ao Estudo do Assembly IA32 -- Ferramentas

O grupo de estudo de Assembly (e arquiteturas de computadores) foi uma iniciativa de um grupo de amigos. Sem nenhuma obrigação formal, nossa principal meta era aprender sobre programação em linguagem de baixo nível, utilizando ferramentas e tecnologias livres. No verão de 2010, nos reuníamos semanalmente no Laboratório de Computação Científica (LCC), no departamento de física da Universidade de Brasília. O único intuito era debater sobre o que haviamos aprendido e trocar trocar conhecimento. Produzi esses slides para apresentar na nossa primeira reunião. O código fonte dos programas que desenvolvi para debater esse dia estão na pasta "1semana/intro/code" do repositório https://bitbucket.org/kuraiev/assemblyworkingparty


O Problema dos Mergulhadores

Cinco mergulhadores estão submersos a uma profundidade de 220 metros. Para eles conseguirem respirar a esta profundidade e realizar algum trabalho, precisam equilibrar a pressão interna do seu traje com a pressão externa da água. Para haver esse equilíbrio, precisam utilizar 2 balões de oxigênio: um para respiração e outro para controle de pressão. Contudo, a cada metro submerso a pressão local equivale a aumentar em 10 vezes o peso de um corpo em relação à pressão atmosférica. Sendo assim, cada mergulhador só pode submergir com 1 balão de oxigênio. Como possibilitar que eles compartilhem seus balões de oxigênio para que possam trabalhar, sendo que a roupa armazena e suporta oxigênio suficiente por um período de tempo, desde que os mergulhadores não realizem trabalho? Este problema foi resolvido implementando-se as soluções em Haskell, Python e Fortran. Os fontes estão disponíveis no link http://bitbucket.org/kuraiev/divingphilosophers/


Mac OS X

O Mac OS X é um sistema operacional formado de vários componentes projetados e implementados pela Apple. Embora o sistema seja em maior parte fechado, possui uma grande parte do código aberto, denominado Darwin. Este trabalho foi elaborado para a matéria de Sistemas Operacionais, e foi apresentado em 23 de novembro de 2009.