INF01046
– Fundamentos de Processamento de Imagens
Professor: Manuel Menezes de Oliveira
Semestre: 2007/2
Alunos: Rafael von Hoonholtz Magrin ([email protected])
Lucas
Enrique Guaycochea ([email protected])
Introdução
O presente trabalho foi feito como
projeto final da disciplina Fundamentos de Processamento de Imagens. O desafío
consistiu em procurar um asunto de interés para nos relacionado com trabalhos
sobre imagens, pesquisar sobre ele e desenvolver um pequeno software para
aplica-o.
Logo de ter visto alguns artigos
publicados em distintos congresos, agente gostou de um que falaba da
colorização de imagens (image colorization) e decidimos trabalhar sobre ele. A
idéia foi obtida de [1], mas para lograr implementa-o foi escolhido o algoritmo
mostrado em [2] e [3].
Objetivo
O objetivo
do trabalho é: dada uma imagem em tons de cinza e uma imagem análoga com
algumas marcações de cores, gerar uma imagem colorida de forma automatizada.
Nas figuras 1, 2 e 3, podemos
ver, respectivamente, uma imagem em tons de cinza, a imagem análoga com
marcações de cores e uma imagem colorizada utilizando a implementação
apresentada em [1].
|
|
|
|
|
Figura 1: imagem em tons de cinza. |
Figura 2: imagem com
marcações |
Figura 3: imagem colorizada |
Idéia
Como temo uma imagem
com ausença de cor, a ideia é trabalhar sobre um espaço de cor onde temos um
canal pra a luminância e outros dois pra a crominância, por exemplo os espaços
conhecidos como YUV, YIQ ou YCbCr. Então o primeiro paso de nosso trabalho é
levar as imagens presentadas geralmente em RGB, a um espaço de luminância e
crominância, em nosso caso YUV.
Agora, simplemente com olhar a imagem
em tons de cinza, podemos intuir que em regiões onde temos uma alteração brusca
de luminância, é onde deve existir uma transição de cores; análogamente, dentro
duma mesma região onde o luminância mostra-se constante ou com poucas variações
vamos ter o mesmo cor, com leves cambios na saturação dele. (Entende-se por
saturação a claridade ou oscuridade da cor).
Algoritmo
Básicamente
o algoritmo presentado em [2] e [3], aquele que nos escolhimos para
implementar, consiste em pegar cada pixel sem cor na imagem marcada e dar-lhe
cor a partir duma ponderação de todas as cores presentes na imagem marcada
introduzidas pelo usuario. A ponderação será feita a partir duma distancia intrínseca entre o pixel e
cada cor, obtendo-se um peso para ponderar que será inversamente proporcional a
ela.
A seguinte fórmula da ima
idéia do que foi expressado:

Agora
vamos entrar num maior detalhe matemático de manera de explicar melhor a
fórmula emcima.
Desta forma,
define-se:
![]()

onde:
e 
![]()
•
Alem disso, a
função peso, pra lograr que ele seja maior quanto a distancia é menor e menor
quanto a distancia seja maior, é da forma:
|
|
•
Finalmente,
depois de ter tudo melhor definido, a primeira fórmula apresentada pode ser
re-escrivida como:
|
|
Até aqui
temos apresentada a idéia do trabalho conceptual e algorítmicamente. A
continuação vamos a descrever como foi feita a implementação. Mas antes,
achamos que vale a pena falar sobre uma coisa. Se o letor teve prestado
atenção, pode ter pensado que para a resolução do algoritmo é possivel
implementar o algoritmo de Dijkstra para achar o caminho mínimo entre cada
pixel e as distintas cores. Realmente é um problema que pode ser resolvido
desta manera ja que vai ter um grafo e o peso (distancia intrínseca) para as
conexões entre os vértices(pixels); só que o grafo vai ser muito grande e com
muitas conexões(muitos caminhos possíveis), o que vai dar um custo
computacional muito elevado. Então a continuação vai ser apresentada uma
possibilidade de implementação muito mais económica e com resultados ótimos
como vamos mostrar ao final.
Implementação
O primeiro
passo é pegar as duas imagens de entrada, aquela que está em tons de cinza e
tem a informação da luminância (L) e aquela outra que tem as marcações de cores
feitas (M), para converter elas para um espaço de luminância e crominância
(YUV).
Desta manera, se gera uma imagem (W)
para trabalhar onde:
Para todo pixel posicionado en (x,y):
W(x, y).Y = L(x, y).Y
Se o pixel tem cor na imagem marcada: W(x, y).U = M(x,
y).U e W(x, y) V = M(x, y).V
E se o pixel não tem cor na imagem
marcada, simplemente, W(x, y).U = 0
e W(x, y) V = 0
Logo para cada pixel (p) da imagem cria-se uma estructura
vazía (S(p)) onde serão armazenadas pares ordenados (cori,
dist(p,cori)). Idealmente devería ser enchido para todo cori
presente na imagem marcada, mas o artigo [3] fala que obtem-se um resultado aceptável
com armazenar os três cores com a menor distância intrínseca.
Inicializa-se agora um conjunto ActiveSet com as
estructuras dos pixels coloridos na imagem marcada com seu primeiro par
ordenado com sua cor e distância igual a 0. Então, començamos a fazer o
seguinte algoritmo iterativo:
Enquanto ActiveSet
não estiver vazio:
Para cada pixel w em ActiveSet:
•
Remover S(w) de ActiveSet;
•
Propagar
as crominâncias contidas em S(w) para seus pixels vizinhos {p1, ..., p8},
actualizando a distancia dist=dist+dist(w,pn). Para cada pixel pn
da vizinhança, o par ordenado vai ser adicionado a seu S(pn)
se aquela crominância (cor) não está ja presente na estructura com uma
distancia menor.
•
Se a
estructura S(pn) for modificada adicionar ela ao ActiveSet;
Finalmente quando o algoritmo iterativo acaba, todos
os pixels vão ter sua estructura S completa. Então, só temos que dar cor a cada
pixel usando a ponderação vista antes na seção do algoritmo, ja que temos para
ponderar as três cores mais próximas e suas distancias intrínsicas para obter o
respectivo peso.
Demais está dizer que a imagem ja colorida W é passada
ao espaço RGB pra logo ser exibida e salvada.
Resultados e Concluções
Nesta
seção apresentaremos os resultados obtidos e vamos compara-os com os resultados
obtidos por os softwares que acompanham os artigos pesquisados. Achamos que
geralmente o resultado em Levin[1] foi melhor na maioría dos casos, e que
nossos resultados são muito parecidos a aqueles conseguidos com o software de
Yang[3], o que é esperavel porque foi seguida a mesma implementação. Mas, as
vezes, nosso resultado foi melhor que o resultado obtido por Levin[1].
Desta forma,
podemos concluir que o resultado vai depender muito das propiedades da imagem e
de como foram feitas as marcações pelo usuario.
Finalmente,
nossos resultados e as comparações estam a continuação:
Nenem
|
|
|
|
grayscale image (input) |
marked image (input) |
|
|
|
|
Nosso resultado |
Resultado em Levin[1] |
Sunset
|
|
|
|
|
grayscale image (input) |
marked image (input) |
Mask (só as marcações) |
|
|
|
|
|
Resultado em Levin[1] |
Nosso resultado |
Resultado em Yang [3] |
Winter
|
|
|
|
|
grayscale image (input) |
marked image (input) |
Mask (só as marcações) |
|
|
|
|
|
Resultado em Levin[1] |
Nosso resultado |
Resultado em Yang [3] |
Jennifer
|
|
|
|
|
grayscale image (input) |
marked image (input) |
Mask (só as marcações) |
|
|
|
|
|
Resultado em Levin[1] |
Nosso resultado |
Resultado em Yang [3] |
Lilies
|
|
|
|
|
grayscale image (input) |
marked image (input) |
Mask (só as marcações) |
|
|
|
|
|
Resultado em Levin[1] |
Nosso resultado |
Resultado em Yang [3] |
Pepper
|
|
|
|
|
grayscale image (input) |
marked image (input) |
Mask (só as marcações) |
|
|
|
|
|
Resultado em Levin[1] |
Nosso resultado |
Resultado em Yang [3] |
Dessert
|
|
|
|
|
grayscale image (input) |
marked image (input) |
Mask (só as marcações) |
|
|
|
|
|
Resultado em Levin[1] |
Nosso resultado |
Resultado em Yang [3] |
Referencias
•
[1] A. Levin, D. Lischinski, and Y.
Weiss, “Colorization using Optimization”, in Proc. ACM
SIGGRAPH Conf., 2004, pp. 689-694.
Project Page: http://www.cs.huji.ac.il/%7Eyweiss/Colorization/index.html#still
•
[2] L. Yatviz and G. Sapiro, “Fast
Image and Video Colorization Using Chrominance Blending”, in IEEE
Transactions On Image Processing, Vol.15, No.5, May 2006, pp. 1120-1129.
Project Page:
http://mountains.ece.umn.edu/%7Eliron/colorization/index.html
•
[3] M. Yang, “Still Image
Colorization”, ECE Dept. Northwestern Univ., March 10, 2005.
Project Page: http://www.ece.northwestern.edu/~mya671/Colorization.htm
©Guaycochea
& Magrin, Novembro 2007