Imagens de intensidade, como em tons de cinza, são normalmente representadas por uma matriz, onde cada elemento desta corresponde a um píxel na imagem. Este trabalho aborda
a redução no espaço de armazenamento de imagens, utilizando para isto a Decomposição em
Valores Singulares (SVD - Singular Value Decomposition) de uma matriz.
1. Ministério da Educação
Universidade Tecnológica Federal do Paraná
Pró-Reitoria de Pesquisa e Pós-Graduação
Relatório Final de Atividades
Otimização no Armazenamento de Imagens por meio da
Decomposição em Valores Singulares
vinculado ao projeto
Métodos para Resolução de Equações Diferenciais Estocásticas
Agnaldo Cesar Coelho
Bolsista FUNDAÇÃO ARAUCÁRIA (Ações Afirmativas)
Engenharia De Computação
Data de ingresso no programa: 02/2012
Orientador: Prof. Fabio Antonio Dorini
Área do Conhecimento: 1.01.04.00-3 (Matemática Aplicada)
CAMPUS CURITIBA, 2012
2. AGNALDO CESAR COELHO
Orientador: FABIO ANTONIO DORINI
OTIMIZAÇÃO NO ARMAZENAMENTO DE IMAGENS POR MEIO DA
DECOMPOSIÇÃO EM VALORES SINGULARES
Relatório de Pesquisa do Programa de
Iniciação Científica da Universidade
Tecnológica Federal do Paraná.
CURITIBA, 2012
3. SUMÁRIO
INTRODUÇÃO 1
REVISÃO DA LITERATURA 1
MATERIAIS E MÉTODOS 11
RESULTADOS E DISCUSSÕES 15
CONCLUSÕES 26
REFERÊNCIAS 26
APÊNDICE A - CÓDIGOS FONTE 28
4. INTRODUÇÃO
Imagens de intensidade, como em tons de cinza, são normalmente representadas por uma
matriz, onde cada elemento desta corresponde a um píxel na imagem [1]. Este trabalho aborda
a redução no espaço de armazenamento de imagens, utilizando para isto a Decomposição em
Valores Singulares (SVD - Singular Value Decomposition) de uma matriz.
Aplicando a SVD a uma matriz com m linhas e n colunas, que é simplesmente a fatoração
desta em um produto UΣV T , é possível diminuir o espaço de armazenamento de mn para um
múltiplo pequeno de m + n + 1 [2]. Isto porque, elementos de uma dada linha da matriz tem
valores muito semelhantes aos elementos correspondentes das linhas vizinhas (essa observação
também vale para as colunas), pois, nas imagens, frequentemente a cor associada a um dado
píxel está próxima a cor dos píxeis vizinhos.
Em imagens representadas por matrizes tridimensionais (m × n × 3), como por exemplo
as RGB, observam-se as mesmas situações. Nestes casos, a SVD é aplicada a cada uma destas.
Este trabalho se apoia nestes fatos para alcançar os objetivos pretendidos.
Justificativa. Imagens digitais são indispensáveis em varias áreas como, por exemplo, medi-
cina, biologia, astronomia, área militar e arqueologia [3]. São geralmente mantidas e transmi-
tidas na forma de matrizes enormes, que requerem muito espaço no armazenamento. Devido a
estas circunstâncias, torna-se viável pesquisar por métodos eficazes que otimizem esses proces-
sos, acelerando a transmissão eletrônica de imagens e reduzindo seu espaço de armazenamento.
Neste trabalho, decidiu-se investir em tais problemas empregando a SVD, porque ela pode ser
aplicada a quaisquer tipos de matrizes: quadradas, retangulares, singulares e não singulares,
esparsas [2, 4]. Além do mais, foi fundamental para a escolha o fato da SVD ser utilizada em
diversas aplicações. Por exemplo, ela é a base de muitos dos melhores algoritmos computacio-
nais para resolução de sistemas lineares [4]. Contudo, para compreender o método, foi essencial
aprofundar conhecimentos de Álgebra Linear, imprescindíveis na formação de um Engenheiro.
E este é o motivo principal da escolha da SVD nesta pesquisa, pois, durante a graduação, apenas
quatro meses são dedicados a esse ramo tão importante da matemática.
Objetivos. (i) Demonstrar que é possível reduzir o espaço necessário para o armazenamento de
imagens por meio da Decomposição em Valores Singulares; (ii) Analisar imagens reconstruídas
pelo método da SVD, com a utilização de quantias distintas de dados. Assim, variando entre
um conjunto mínimo e máximo de valores necessários para preservar características úteis das
imagens; (iii) Examinar a qualidade de imagens processadas com a SVD após a conversão
destas, se necessário, para os seguintes modelos: RGB, HSV, Cores Indexadas e de Intensidade.
REVISÃO DA LITERATURA
A Decomposição em Valores Singulares (SVD - Singular Value Decomposition) consiste
em fatorar uma matriz qualquer em um produto UΣV T [2]. Ela foi demonstrada pela primeira
vez por Beltrami e Jordan na década de 1870, para matrizes quadradas reais. Após, Autonne
demonstrou a decomposição SVD para matrizes quadradas complexas. Em 1936, Carl Eckart e
Gale Young demonstraram para matrizes retangulares gerais, as quais este trabalho irá se ocupar
[5, 6].
Antes de continuar com a decomposição SVD, serão expostos alguns procedimentos, re-
sultados e tipos de matrizes necessários para fatorar uma matriz em um produto UΣV T .
1
5. Matrizes. Nesta seção, são apresentadas e definidas alguns tipos de matrizes, operações e pro-
priedades.
Definição 1. A Matriz Identidade, n × n, é aquela em que I = δi j 1 , sendo que δi j = 0 para i = j
e δi j = 1 para i = j [2].
1 0 0
Por exemplo, a matriz identidade para n = 3 é: I = 0 1 0 .
0 0 1
Definição 2. Uma matriz A, n × n, é diagonal quando ai j = 0 para i = j [7].
6 0 0
Como exemplo, a matriz identidade e a matriz A = 0 0 0 são diagonais.
0 0 −1
Definição 3. A transposta de uma matriz A, m × n, é representada por AT , n × m, cujas colunas
são as linhas de A. Assim, para AT = B tem-se ai j = b ji [7].
1 4 0
Como exemplo, considere a matriz A = , então sua transposta é
−2 4 3
1 −2
A T = 4 4 .
0 3
Definição 4. Uma matriz A, n × n, é dita simétrica se A = AT [2].
1 8 0
Por exemplo, é fácil observar que a matriz A = 8 4 3 é simétrica.
0 3 10
Definição 5. Uma matriz A, n × n, é dita inversível ou não singular se existir uma matriz, deno-
tada por A−1 , tal que A−1 A = AA−1 = I. Caso contrário a matriz A é singular [2].
Um outro tipo importante de matriz é a ortogonal, que será abordada na subseção Orto-
gonalidade.
Produto Interno e Norma. Nesta seção são apresentadas algumas ideias e conceitos relaci-
onados a distâncias, comprimentos e ângulos de matrizes e vetores, essenciais em diversas
operações. Por exemplo, medir a distância entre duas matrizes ou obter um vetor unitário (vetor
de tamanho um).
Primeiramente será definido o produto interno entre dois vetores pertencentes ao espaço
vetorial Rn , tratados aqui como duas matrizes n × 1. Dessa forma, entende-se por Rn o conjunto
constituído por todas as matrizes n × 1.
Definição 6. O produto interno entre dois vetores x e y de Rn é denotado por x, y e é dado
pelo produto matricial xT y, do qual resulta um número real [2].
Exemplo 1. Seja x = (−1, 0, 2)T e y = (4, −3, 1)T . Então
4
T −3 = (−1) × 4 + 0 × (−3) + 2 × 1 = −2.
x, y = x y = (−1, 0, 2)
1
1δ é o operador delta de Kronecker
ij
2
6. O produto interno entre duas matrizes m × n pode ser definido seguindo a mesma ideia
anterior, onde o elemento ai j da matriz A é multiplicado pelo seu correspondente bi j da matriz
B [2].
Definição 7. O produto interno entre duas matrizes A e B, ambas m × n, é indicado por A, B e
é dado por
m n
A, B = ∑ ∑ ai j bi j . (1)
i=1 j=1
1 3 1 3
Exemplo 2. Se A = e B= . Então
−2 4 4 2
A, B = 1 × 1 + (−2) × 4 + 3 × 3 + 4 × 2 = 10·
Agora será apresentado o conceito de norma. Esta representa o comprimento ou tamanho
de um vetor ou uma matriz. E, pode também ser utilizada para medir a distância entre vetores
ou matrizes.
A norma de um vetor ou matriz será definida em termos dos produtos internos. No en-
tanto, é importante deixar claro que ela não depende desses produtos, pois é possível definir
diversos tipos de normas, desde que sejam satisfeitas algumas condições. Estas condições não
serão discutidas aqui [2].
Definição 8. A norma de um vetor x pertencente a Rn , denotada por x , é definida como
x = x, x = 2 2 2
x1 + x2 + · · · + xn . (2)
Se x = 1, então este vetor, chamado de vetor unitário, é dito estar normalizado [7].
Exemplo 3. A norma do vetor x do Exemplo 1 é
x = x, x = (−1)2 + (0)2 + (2)2 = 5.
Observação 1. De acordo com a Definição 8, a norma de um vetor sempre é maior ou igual
a zero. E ainda, para que ela seja igual a zero, o vetor precisa ser nulo, ou seja, todas as suas
componentes devem ser iguais a zero. Isto está de acordo com a definição de comprimento ou
distância.
1
Para obter um vetor unitário u a partir de um vetor não nulo x, basta fazer u = x.
x
Exemplo 4. O vetor unitário obtido a partir do vetor x do Exemplo 1, com a norma calculada
no Exemplo 3, é
1 1 −1 2 T
u= x = (−1, 0, 2)T = , 0,
x 5 5 5
Assim como a norma para vetores, existe uma norma para matrizes, que também deriva
do produto interno. Ela é conhecida como a norma de Frobenius [2].
Definição 9. A norma de Frobenius de uma matriz A m × n, escrita como A F, é dada por
1
m n 2
1
A F = ( A, A ) =2
∑ ∑ a2j
i . (3)
i=1 j=1
3
7. Exemplo 5. A norma de Frobenius da matriz A no Exemplo 2 é calculada como
√
A F = A, A = 12 + 32 + (−2)2 + 42 = 30·
A Observação 1 feita para norma de vetores, também é válida para a norma matricial. Por
meio da norma, pode-se também determinar a distância entre dois vetores ou duas matrizes [2].
Definição 10. A distância d entre dois vetores x e y e a distância D entre duas matrizes A e B
são definidas, respectivamente, como
d = x−y e D = A−B F · (4)
Exemplo 6. Considere as matrizes A e B do Exemplo 2. A distância entre elas é dada por
√
D = A−B F = (1 − 1)2 + (3 − 3)2 + (−2 − 4)2 + (4 − 2)2 = 2 10·
Além das aplicações já discutidas para a norma, ela também é utilizada para calcular o
produto interno entre dois vetores [2].
Teorema 1. Sejam x e y dois vetores não nulos em Rn e seja θ o menor ângulo entre eles, então
o produto interno entre x e y pode ser determinado por x, y = x y cos θ .
Os conceitos desenvolvidos nesta seção serão úteis, posteriormente, para o método da
SVD. Além disso, o Teorema 1 é proveitoso na discussão e compreensão de ortogonalidade que
será visto na seção seguinte.
Ortogonalidade. A palavra ortogonal significa ângulo reto [8]. Neste contexto, dois vetores
são ditos ortogonais se o ângulo formado entre eles é um ângulo reto.
Segundo David Poole (2004), o conceito de ortogonalidade é um dos mais importantes e
úteis na álgebra linear [8]. Devido a isto e também pela importância deste na SVD, para um
melhor entendimento, esta seção tratará exclusivamente deste assunto .
Definição 11. Os vetores x e y em Rn são ortogonais entre si se x, y = 0 [8].
Por meio da Definição 11 e do Teorema 1 constata-se que, para dois vetores estarem
ortogonais entre si, basta que um deles, x ou y, seja nulo ou senão o ângulo entre eles seja de
90°.
Vetores ortogonais, em Rn , podem ser utilizados para formar uma matriz quadrada, n × n,
onde cada coluna da matriz é um destes vetores. Indo um pouco além e normalizando cada um
deles, obtém-se o que é conhecida por matriz ortogonal. Diz-se, então, que os vetores coluna
desta matriz formam um conjunto ortonormal em Rn .
Definição 12. Uma matriz Q, n × n, é denominada matriz ortogonal se seus vetores coluna
formam um conjunto ortonormal em Rn [2].
Teorema 2. Uma matriz Q, n × n, é ortogonal se, e somente se, QT Q = I [2].
Portanto, pelo Teorema 2 e de acordo com a Definição 5, QT Q = I = Q−1 Q. Isto ocorre
se, e somente se, Q é invertível. Logo QT = Q−1 [8].
T T
1 1 1 1
Exemplo 7. Seja a matriz ortogonal Q = x1 x2 , onde x1 = √2 , − √2 e x2 = √2 , √2 ,
então
1 1 1 1
T
√
2
− √2 √
2
√
2 = x1 , x1 x1 , x2 1 0
Q Q= 1 1 1 1 = ·
√
2
√
2
− √2 √2 x2 , x1 x2 , x2 0 1
4
8. Os vetores x1 e x2 são ortogonais, pois x1 , x2 = x2 , x1 = x1 x2 cos(90°) = 0. Ade-
mais, como x1 e x2 são vetores unitários, segue que x1 , x1 = x1 x1 cos 0° = 1 × 1 × 1 = 1.
A mesma relação é válida para x2 .
Outra propriedade relevante de matrizes ortogonais refere-se ao fato destas preservarem
produtos internos [2, 8]. Pode-se observar que para uma matriz ortogonal n × n, Q
Qx, Qy = (Qx)T (Qy) = xT QT Qy = xT (QT Q)y = xT y = x, y .
E, se x = y, conforme a equação (2), Qx 2 = (Qx)T (Qx) = x, x = x 2 . Logo Qx = x .
Portanto, a multiplicação de uma matriz ortogonal por um vetor preserva seu comprimento [2].
Os conceitos vistos nesta seção não serão apenas úteis para justificar a SVD. Estes tam-
bém ajudarão a encontrar uma forma simples de determinar a distância entre duas matrizes, por
meio da SVD.
Produto externo. O produto externo discutido aqui não é o produto vetorial usual. Aquele
diferentemente deste, é, geralmente, utilizado para representar a multiplicação entre matrizes,
de forma distinta da usual.
Na SVD e em diversas aplicações é conveniente multiplicar uma matriz n×1, vetor coluna
x, por uma 1 × n, vetor linha yT . Essa operação resulta em uma matriz n × n e é conhecida por
produto externo [2].
Exemplo 8. O produto externo entre x = (1, 2, 3)T e y = (4, 3, 2)T é
1 1×4 1×3 1×2 4 3 2
xyT = 2 (4, 3, 2) = 2 × 4 2 × 3 2 × 2 = 8 6 4 .
3 3×4 3×3 3×2 12 9 6
É interessante observar que as linhas (vetores linha) de xyT são múltiplas umas das outras.
Por exemplo: a linha 2 é igual a linha 1 multiplicada por 2. Dessa forma, a matriz resultante
sempre terá posto 1. É proveitoso relembrar que o posto de uma matriz A é igual ao número de
linhas não nulas em qualquer forma escalonada por linhas de A [4].
Conforme abordado em Leon (2011), é possível particionar uma matriz C em diversas
submatrizes, traçando-se retas horizontais entre as linhas e verticais entre as colunas [2]. Estas
partições são chamadas de blocos. A técnica pode ser utilizada para efetuar a multiplicação
por blocos entre duas matrizes A e B, devidamente particionadas. Se os blocos tiverem as
dimensões apropriadas, a multiplicação de blocos poderá ser realizada da mesma maneira que
a multiplicação habitual de matrizes.
Exemplo 9. Particionando X, m × n, em colunas e a transposta de Y , k × n, em linhas, tem-se
T
x11 x12 · · · x1n y11 y21 · · · yk1 y1
x21 x22 · · · x2n y12 y22 · · · yk2 yT
T 2
X = . . = x1 , x2 , · · · , xn e Y = . . = . ·
. .
. . .
. .
. . . .
. . .
. .
xm1 xm2 · · · xmn y1n y2n · · · ykn yT
n
Então, a multiplicação XY T pode ser executada da seguinte forma:
5
9. yT
1
yT
2
XY T = x1 , x2 , · · · , xn . = x1 yT + x2 yT + · · · + xn yT ·
1 2 n
.
.
yT
n
Conforme visto no Exemplo 8, XY T é escrita como a soma de produtos externos de veto-
res, soma de matrizes de posto 1, que é conhecida como a expansão de produto externo [2].
Autovalores, autovetores e diagonalização. Esta é a seção chave para entender a SVD, pois a
maior parte do processo de fatoração de uma matriz A, m × n, em um produto UΣV T envolve os
mesmos métodos e conceitos desenvolvidos aqui. O objetivo agora é, por meio de autovalores e
autovetores, buscar uma fatoração para uma matriz A, n × n, em um produto da forma XDX −1 ,
no qual D, n × n, é uma matriz diagonal.
Quando um vetor é multiplicado por um escalar λ , ele pode sofrer contração ou alonga-
mento, com ou sem inversão em seu sentido. Porém, a direção deste vetor não se altera. Por
ora, o que pretende-se é: encontrar vetores, não nulos, para uma matriz quadrada A, que quando
multiplicados por ela se comportem como se estivem sendo multiplicados por um escalar λ . Ou
seja, pretende-se encontrar as soluções da equação Ax = λ x, x = 0.
Definição 13. Seja A n × n. Um escalar λ é denominado um autovalor de A se existe um vetor
x, não nulo, tal que Ax = λ x. O vetor x é dito um autovetor de A associado a λ [4].
Pode-se reescrever a equação na Definição 13 como Ax = λ Ix, e então (A−λ I)x = 0. Para
λ ser autovalor de A, as componentes de x não podem ser todas iguais a 0, ou seja, o sistema
deve ter solução não trivial [2]. Logo, a matriz (A − λ I) tem de ser singular (não inversível).
Portanto, o determinante de (A − λ I) deve ser igual a zero. Com isso, os autovalores de A são
obtidos por meio da equação
det (A − λ I) = 0, (5)
denominada equação característica de A. A expansão desta resulta em um polinômio de grau
n em λ . Os vetores x, soluções do sistema, são os chamados autovetores de A associados ao
autovalor λ [2, 4].
−1 0
Exemplo 10. Seja a matriz A = . A equação característica associada é
0 1
−1 0 λ 0 −1 − λ 0
det (A − λ I) = − = = (−1 − λ )(1 − λ ) = 0·
0 1 0 λ 0 1−λ
Então, os autovalores de A são λ1 = −1 e λ2 = 1. Para encontrar os autovetores associados
a λ1 , substitui-se o valor dele no sistema (A − λ I)x = 0, fazendo:
−1 + 1 0 x1 0
(A − (−1)I)x1 = = .
0 1+1 x2 0
Resolvendo o sistema, obtém x2 = 0 e x1 = qualquer número ∈ R. Então, x1 = (x1 , x2 )T =
(x1 , 0)T = x1 (1, 0)T . Portanto, (1, 0)T é um autovetor de A associado a λ1 = −1. De forma
idêntica, para encontrar os autovetores para λ2 resolve-se o sistema: (A − 1I)x2 = 0. Deste
modo, x2 = (0, x2 )T = x2 (0, 1)T . Logo, (0, 1)T é autovetor de A associado a λ2 = 1.
Visto como encontrar os autovalores e autovetores de uma matriz, pode-se, por fim, tentar
resolver o problema de fatoração de uma matriz A, n × n, em um produto da forma XDX −1 ,
6
10. do qual os vetores coluna de X são autovetores de A, X −1 é a inversa de X e D é uma matriz
diagonal formada pelos autovalores de A.
Definição 14. Uma matriz A, n × n, é dita diagonalizável se existir uma matriz não singular X
e uma diagonal D, de modo que X −1 AX = D ou, equivalentemente, A = XDX −1 . Neste caso,
diz-se que X diagonaliza A [2].
Definição 15. Um vetor v pertencente a Rn é combinação linear dos vetores x1 , x2 , . . . , xn , tam-
bém pertencentes a Rn , se v pode ser escrito como
v = c1 x1 + c2 x2 + · · · + cn xn · (6)
onde c1 , c2 , . . . , cn são escalares [4].
Vale observar, que se c2 = c3 = · · · = cn = 0 e c1 = 0, então v é múltiplo escalar de x1 .
Teorema 3. Uma matriz A de ordem n é diagonalizável se, e somente se, A possuir n autovetores
linearmente independentes [4].
Dizer que A tem n autovetores linearmente independentes, significa dizer que nenhum
destes n autovetores de A é combinação linear dos outros n − 1 autovetores. O motivo está na
matriz diagonalizante X, porque pela Definição 14, X deve ser não singular. Logo, para que X
seja não singular, os vetores colunas de X, que são os autovetores de A, devem ser linearmente
independentes. Segundo o Teorema 4, isto sempre ocorre se os autovalores forem distintos.
Teorema 4. Se uma matriz A, n × n, possuir n autovalores distintos, λ1 , . . . , λn , com os corres-
pondentes autovetores x1 , . . . , xn , então x1 , . . . , xn são linearmente independentes [2].
Exemplo 11. Seja A a matriz do Exemplo 10. As matrizes D e X, são
λ1 0 −1 0 1 0
D= = e X = x1 x2 = ·
0 λ2 0 1 0 1
1 0 −1 0 1 0 −1 0
Como X = X −1 , tem-se A = XDX −1 = = ·
0 1 0 1 0 1 0 1
Observação 2. Uma matriz diagonalizante X não é única. Se multiplicar X por escalares dife-
rentes de zero ou reordenar suas colunas produzirá outra matriz diagonalizável [2].
Decomposição em Valores Singulares - SVD. A SVD têm aplicações à “compressão”, ar-
mazenamento e transmissão de dados digitais. Ela está estreitamente relacionada ao problema
matemático de aproximar uma matriz por outra de posto menor. Eckart e Young (1936), em Psy-
chometrika, demonstram a SVD para matrizes retangulares, formulando o seguinte problema:
encontrar uma matriz B de posto r, de modo que não exista outra matriz de posto r tal que a
distância de outra até a matriz A seja menor que a distância de B a A [6]. A SVD será, então,
utilizada para encontrar a matriz B mais próxima de A. Por simplicidade, considera-se m ≥ n.
No entanto, todos os resultados também são válidos para m < n.
O produto matricial de AAT e AT A resulta em uma matriz simétrica, m × m, e uma simé-
trica, n × n, respectivamente [4]. Isto pode ser verificado pela Definição 4 (matriz simétrica),
fazendo
(AAT )T = (AT )T AT = AAT e (AT A)T = AT (AT )T = AT A.
Algumas propriedades importantes de matrizes simétricas são mostradas no teorema seguinte.
Teorema 5. Os Autovalores de uma matriz simétrica são reais. E ainda, autovetores associados
a autovalores distintos são ortogonais [2].
7
11. O diferencial da SVD está no fato desta poder ser aplicada a qualquer matriz m × n como
afirmado no teorema seguinte.
Teorema 6 (SVD de uma matriz). Se A é uma matriz m × n, então existe uma Decomposição
em Valores Singulares de A da seguinte forma:
A = UΣV T , (7)
onde U, m × m, e V , n × n, são matrizes ortogonais e Σ , m × n, é uma matriz onde os elementos
fora da diagonal principal são todos iguais a zero e cujo os elementos da diagonal são os valores
singulares (σi ) de A ordenados de tal modo que σ1 ≥ σ2 ≥ · · · ≥ σn [2, 4].
Buscando, agora, a Decomposição em Valores singulares de A e lembrando do Teorema
2 (V T = V −1 e U T = U −1 ), tem-se
AT A = (UΣV T )T (UΣV T ) = (ΣV T )T U T UΣV T = V Σ T ΣV T (8)
AAT = (UΣV T )(UΣV T )T = UΣV T V Σ T U T = UΣ Σ T U T . (9)
De acordo com o Teorema 5, os autovalores de AT A e AAT são reais. Além disso, eles
também são todos não negativos, pois Ax 2 = (Ax)T Ax = xT AT Ax = λ xT x = λ x 2 e assim
Ax 2
λ= ≥ 0.
x 2
Pela Definição 14, V diagonaliza AT A e, portanto, os vetores coluna de V (v1 , . . . , vn ) são os
autovetores de AT A. E ainda, como U diagonaliza AAT , os vetores coluna de U (u1 , . . . , um ) são
autovetores de AAT . Outro resultado das equações (8) e (9), é obtido das matrizes diagonais
Σ Σ T e Σ T Σ , cujo os valores diferentes de zero na diagonal principal são iguais em ambas.
Logo, os autovalores de AT A e AAT são os mesmos e, desta forma, os valores singulares de A
satisfazem
σj = λj ≥ 0 j = 1, 2, . . . , n. (10)
Sabe-se que se o posto de A é r < n, então o posto de AT A e de AAT também será r.
Como o posto de uma matriz simétrica é igual ao número de autovalores diferentes de zero,
segue, da equação (10), que o posto de A é igual ao número de valores singulares diferentes
de zero [2]. Os valores singulares podem, então, ser ordenados na matriz Σ de forma que
σ1 ≥ σ2 ≥ · · · ≥ σr > σr+1 = · · · = σn = 0. Desta forma, a SVD da matriz A = UΣV T , com
posto r, será
T
v1
.
.T
σ1
.
..
A = ( u1 ,...,ur ,ur+1 ,...,um ) . O vr ·
vT
σr r+1
O O . .
.
vT
n
Efetuando-se a multiplicação por meio da expansão do produto externo tem-se
A = σ1 u1 vT + σ2 u2 vT + · · · + σr ur vT .
1 2 r (11)
4 4 4 −3 4 4 25 7
Exemplo 12. Considere A = , então AT A = = · Para
−3 3 4 3 −3 3 7 25
8
12. encontrar os autovalores de AT A calcula-se
25 − λ 7
det(AT A − λ I) = = λ 2 − 50λ + 576 = 0.
7 25 − λ
√ √
√ autovalores são λ1 = 32 e λ2 = 18. Os valores singulares de A são σ1 =
Os λ1 = 32 e σ2 =
18. O autovetor v2 é obtido por meio da equação
25 − 18 7 v1 0
(AT A − 18I)v2 = = ·
7 25 − 18 v2 0
Resolvendo-se o sistema, obtém-se (v1 , v2 )T = (−1, 1)T . Como a matriz V é ortogonal, é ne-
1 1 −1 −1 1
cessário normalizá-lo, fazendo: v2 = ( − 1, 1)T = √ = √ ,√ ·
(−1, 1)T 2 1 2 2
Procedendo da mesma maneira, encontra-se o autovetor normalizado v1 associado a λ1 =
1 1
32, v1 = ( √2 , √2 )T . Com estes resultados, pode-se construir as matrizes Σ e V . Portanto
√ 1
√ −1
√
32 √0 2 2
Σ= e V= 1 1 .
0 18 √ √
2 2
Para determinar as colunas da matriz U, pode-se calcular os autovetores de AAT , seguin-
do-se os mesmos passos tomados para V ou, de outra forma, simplesmente multiplicar por
V , à direita, em ambos os lados de A = UΣV T , obtendo AV = UΣ . Logo, Av j = σ j u j ou,
1
equivalentemente, u j = Av j . Então,
σj
1
√ −1
√
1 1 4 4 2 1 1 4 4 2 0
u1 = Av1 = √ 1 = , u2 = √ 1 = ·
σ1 32 −3 3 √ 0 18 −3 3 √ 1
2 2
Segue-se então que
√ √1 1
√
1 0
T 32 √0 2 2
A = UΣV = −1 1 ·
0 1 0 18 √ √
2 2
A SVD simplifica o cálculo da norma de uma matriz. Se A = UΣV T , então
A F = U(ΣV T ) F = ΣV T F = (ΣV T )T F = ΣT F = Σ F = 2 2 2
σ1 + σ2 + · · · + σn ·
Conforme abordagem de Leon (2011), se A, m × n, é uma matriz com posto r, então existe
uma matriz A , m × n, de posto k, onde 0 < k < r, tal que A é a matriz mais próxima de A em
relação à norma de Frobenius [2]. Neste caso, a distância entre as matrizes é dada por
A−A = 2 2 2
σk+1 + σk+2 + · · · + σn · (12)
F
Observação 3. A equação (12) diz que se a matriz A tem posto n, onde A = σ1 u1 vT + σ2 u2 vT +
1 2
· · · + σn un vT , então
n
9
13. An−1 = σ1 u1 vT + σ2 u2 vT + · · · + σn−2 un−2 vT + σn−1 un−1 vT
1 2 n−2 n−1
An−2 = σ1 u1 vT + σ2 u2 vT + · · · + σn−2 un−2 vT
1 2 n−2
.
.
.
A1 = σ1 u1 vT
1
serão as matrizes com postos n − 1, n − 2, . . ., 1, respectivamente, mais próximas de A em
relação à norma de Frobenius (equação (3)), naquela ordem.
Imagem. A maioria das imagens são representadas como matrizes, onde cada elemento de uma
matriz corresponde a um píxel da imagem [1]. Por exemplo, a figura 1(a) mostra uma imagem
de intensidade em tons de cinza, na qual cada píxel da imagem é representada por um elemento
da matriz com valor em ponto flutuante, variando entre 0,0000 (preto) a 1,0000 (branco). No
entanto, para algumas imagens, como por exemplo as RGB (Red, Green, Blue), são necessárias
três matrizes de mesma dimensão, onde a primeira destas (banda 1) representa as intensidades
em tons de vermelho; a segunda (banda 2) em tons de verde; e a terceira (banda 3) em tons de
azul. Deste modo, conforme mostram os números em negrito na figura 1(b), representa-se a
cor de cada píxel pela combinação das intensidades de vermelho, verde e azul por elementos na
mesma posição de cada matriz [9].
(a) Imagem de Intensidade, em tons de cinza. (b) Imagem RGB. Três matrizes combinadas são
Apenas uma matriz representa imagem. utilizadas para formar a imagem RGB.
Figura 1: Utilização de matrizes para representar imagens. Fonte: Adaptado de [9].
Similarmente ao RGB, na imagem HSV (Hue, Saturation, Value), também utiliza-se três
matrizes. No entanto, a primeira representa a matiz (tonalidade), a segunda a saturação e a
terceira o brilho. Além disso, alguns tipos de imagens, como as de Cores Indexadas, utilizam
“mapeamento direto”. Estas, como apresenta a figura 2, requerem duas matrizes para suas
representações. Uma delas, a matriz map (m × 3), armazena em suas linhas as cores vermelho,
verde e azul, onde cada linha representa uma cor dada pela combinação daquelas três. A outra,
a matriz de dados, guarda a cor de cada píxel da imagem, que corresponde a uma das linhas da
matriz map [9, 10].
De fato, os valores de cada elemento das matrizes que representam imagens RGB, com
Cores Indexadas e de Intensidades, podem estar no intervalo de valores, em ponto flutuante,
entre 0,0000 e 1,0000 ou dentro do intervalo de números inteiros, de 0 a 255. Entretanto,
elementos de matrizes em imagens HSV, estão apenas naquele intervalo de 0,0000 a 1,0000
[9, 10].
10
14. Figura 2: Imagem de Cores Indexadas. O píxel referente ao número cinco na matriz de dados,
é a cor da quinta linha na matriz de cores de três colunas. Fonte: [9].
Qualidade de imagens. Para medir a qualidade das imagens foi utilizado o software SSIM, de-
senvolvido pelos autores do artigo “Image Quality Assessment: From Error Visibility to Struc-
tural Similarity” e disponibilizado em https://ece.uwaterloo.ca/ z70wang/research/
ssim/ [11].
Este sistema avalia a qualidade da imagem baseada na degradação desta, empregando ou-
tra imagem normalmente não degradada como referência. As imagens em RGB são convertidas
para imagens de Intensidade em tons de cinza antes de serem submetidas para avaliação do
SSIM. O valor referente a qualidade das imagens varia entre o intervalo de números flutuantes
0,0000 (“pior qualidade”) e 1,0000 (qualidade da imagem “original”).
MATERIAIS E MÉTODOS
O processamento digital das imagens foi efetuado por meio do software IMSVD desen-
volvido em ambiente de programação MATLAB durante este trabalho. O MATLAB é em-
pregado no desenvolvimento de algoritmos, análise de dados, visualização e cálculo numé-
rico [12]. A documentação e a versão de testes (trial) do MATLAB, podem ser obtidas em
http://www.mathworks.com/help/. O código fonte do IMSVD pode ser encontrado no
APÊNDICE A - CÓDIGOS FONTE.
O software IMSVD, para processamento de imagens por meio da SVD, foi desenvolvido
com o auxilio do Professor Fabio Antonio Dorini do Departamento Acadêmico de Matemática
(DAMAT) da UTFPR. Desde o início, ele instruiu na pesquisa e realização dos testes. A Pro-
fessora Leyza Baldo Dorini do Departamento Acadêmico de Informática (DAINF) da UTFPR,
também colaborou com o trabalho, apresentando sugestões nas pesquisas e fornecendo infor-
mações importantes sobre imagens e ferramentas do MATLAB.
Os testes foram realizados com imagens RGB e de intensidade em tons de cinza. Elas
foram processadas via IMSVD, nos modos HSV, RGB, Cores Indexadas e de Intensidade. Os
processamentos no modo Cores Indexadas foram feitos no MATLAB versão 5.3 (R11), insta-
lado em Sistema Operacional (SO) Windows XP de 32 bits. Para os demais modos, foi utilizado
o MATLAB versão R2010b, instalado no SO Windows 7 de 32 bits. Para o Windows 7 são dis-
ponibilizados 3 GB de memória ram e para o Windows XP 1,5 GB, ambos com SO instalados
em um notebook com processador Intel 2 DUO de 2.1 GHz.
Fazendo uso das ferramentas citadas, foi possível processar imagens com tamanho má-
ximo de aproximadamente 2700×2100 píxeis, sem que ocorresse erro por falta de memória.
As imagens RGB processadas com a versão R2010b do MATLAB, no modo Cores Indexadas,
apresentaram resultados insatisfatórios. A visualização destas ocorria somente quando as ima-
11
15. gens eram reconstruídas com o posto igual ou muito próximo ao da “original”, devido ao ruído
apresentado nelas. A melhor solução encontrada para este problema foi processar as imagens
na versão 5.3 do MATLAB.
Justificativa e análise do método. Por que a SVD é útil para otimizar o armazenamento de
imagens? Para uma imagem de intensidade, de acordo com a Observação 3 da equação (12)
pode-se truncar o somatório da expansão do produto externo da matriz A, que representa a ima-
gem “original”, nos p primeiros termos. E desta forma obter outra matriz A , próxima à A, em
relação à norma de Frobenius. Isto significa que a imagem reconstruída com A será similar a
“original”. Além disso, quanto mais termos σi ui vT forem adicionados na soma da expansão
i
do produto externo que resulta em A , mais próxima será a imagem reconstruída da “original”.
A ideia então é, ao invés de armazenar todos os elementos da matriz da imagem “original”,
simplesmente armazenar os p primeiros σi da diagonal de Σ e os p primeiros vetores coluna ui
de U e vi de V , resultantes da decomposição de A = UΣV T . Isto permite reduzir o espaço ne-
cessário no armazenamento das matrizes de imagens, e acelerar a transmissão eletrônica destas.
No caso de a imagem ser RGB ou HSV, por exemplo, o método é aplicado em cada uma das
três matrizes que as representam (isto pode ser melhor observado no pseudocódigo do código
1).
É importante frisar, que a matriz A pode ser obtida pelo produto matricial usual U Σ V T ,
onde U = (u1 , . . . , u p ), Σ = diagonal(σ1 , . . . , σ p ) e V = (v1 , . . . , v p ). Deste modo se A , assim
como A, conter m linhas e n colunas, serão necessários armazenar p × m + p × 1 + p × n =
p(m + n + 1) elementos e não mais os m × n elementos de A. Portanto, é claro que para que a
aplicação do método seja viável, é preciso satisfazer p(m + n + 1) < m × n e assim
m×n
p< . (13)
(m + n + 1)
Como será visto na seção RESULTADOS E DISCUSSÕES, geralmente a matriz A possui
muitos valores singulares pequenos. Em vista disso, é praticamente sempre possível aproximá-
la por uma matriz A de posto bem menor e, mesmo assim, obter uma imagem com qualidade
próxima a da imagem “original”. O exemplo seguinte demonstra a aplicação do método com
uma imagem em tons de cinza.
Exemplo 13 (Aplicação do Método no MATLAB). Será processada, no MATLAB, a imagem
“mozilla.jpg” convertida para imagem de Intensidade, com resolução de 40×40 píxeis e posto
40 (obs.: a pontuação utilizada nos comandos é somente a do MATLAB).
Inicia-se com a leitura da imagem, representando-a como uma matriz, através do comando
A = imread( mozilla. j pg );
O comando seguinte converte a imagem, lida, para uma imagem de intensidade em tons
de cinza: A = rgb2gray(A);
Agora, para efeito de cálculo, converte-se a matriz A para double, fazendo A = double(A)
+ 1;
O MATLAB requer +1 para acertos. Para aplicar a Decomposição SVD, fatorando A em
um produto UΣV T , basta digitar [U, D,V ] = svd(A);
Para reconstruir a matriz A1 = U1 Σ1V1T com posto 1, pode-se usar o comando
A1 = U(:, 1 : 1) ∗ D(1 : 1, 1 : 1) ∗V (:, 1 : 1) ;
Então, para visualizar a imagem correspondente a A1, realiza-se primeiro a conversão para uint8
(explicação linha 45 do código 1), com -1 para acertos, e então utiliza-se o comando imshow.
12
16. Isto pode ser feito diretamente, digitando: imshow(uint8(A1 − 1))
Da mesma forma, para visualizar as matrizes com posto = 2, 3, . . ., 40 deve-se fazer
A2 = U(:, 1 : 2) ∗ D(1 : 2, 1 : 2) ∗V (:, 1 : 2) ;
.
.
.
A40 = U(:, 1 : 40) ∗ D(1 : 40, 1 : 40) ∗V (:, 1 : 40) ;
seguido respectivamente dos comandos: imshow(uint8(A2 − 1)) . . . imshow(uint8(A40 − 1))
A figura 3 apresenta a imagem “original”, seguida das outras com posto reduzido. Con-
forme a inequação (13) para reduzir o espaço no armazenamento da imagem, o posto p deve
satisfazer
40 × 40
p< = 19.
(40 + 40 + 1)
(a) Original (b) p = 1 (c) p = 3 (d) p = 5 (e) p = 15 (f) p = 20
Figura 3: Imagem “original” (a), seguida das imagens, de posto menor, reconstruídas com o
Exemplo 13. Fonte: adaptado de icongal.com.
Visão do sistema. O código 1 apresenta o pseudocódigo do software IMSVD. Após a decom-
posição da(s) matriz(es) (linha 25), o programa reconstrói e exibe a imagem em cada novo
incremento do posto (laço PARA externo, linha 35). O IMSVD pausa o processo (linha 48),
a cada iteração, para permitir que o usuário analise a imagem correspondente ao posto atual.
Para continuar o processo ininterruptamente, este deve manter pressionada qualquer tecla ou,
com apenas um clique, ele pode visualizar a imagem resultante da iteração seguinte, e parar
novamente a execução do programa. A aplicação é finalizada quando o posto da imagem em
aproximada se iguala ao posto da “original”. Em imagens RGB ou HSV, o posto é definido,
neste trabalho, pelo menor posto dentre as três matrizes que representam as bandas 1, 2 e 3 da
imagem.
Código 1: Pseudocódigo do software desenvolvido para o processamento de imagens. Fonte:
Autoria Própria.
1 % i m s v d ( imagem , modo ) p r o c e s s a IMAGENs n o s MODOs: HSV , RGB , C o r e s I n d e x a d a s ( i n d ) e , também , de
2 % I n t e n s i d a d e . Os o p e r a d o r e s ==, = e != r e p r e s e n t a m i g u a l d a d e , atribuição e negação , n e s t a ordem
3 imsvd ( imagem , modo )
4 % A == (A1 , A2 , A3 ) é um " a r r a y " m × n × 3 s e A f o r RGB ou HSV . Caso contrário , A == A1 . Os Ai s são a s
5 % m a t r i z e s r e f e r e n t e s a s b a n d a s 1 , 2 e 3 da imagem . A m a t r i z map , com dimensões k× 3 ,
6 % r e p r e s e n t a o mapa de c o r e s d a s i m a g e n s i n d e x a d a s . Se a imagem f o r RGB , map será v a z i a
7 [ A,map ] = l e r ( imagem )
8 SE A f o r RGB, ENTÃO
9 SE modo == hsv , ENTÃO
10 c o n v e r t a A p a r a hsv
11 SENÃO , SE modo == i n d , ENTÃO
12 c o n v e r t a A p a r a o modo C o r e s I n d e x a d a s , a r m a z e n a n d o
13 256 c o r e s em map ( k == 2 5 6 )
14 FIM SE
15 FIM SE
16 % A é c o n v e r t i d o p a r a d o u b l e p a r a que o MATLAB p o s s a e f e t u a r o s cálculos .
13
17. 17 % M a t r i z e s em h s v já são d o u b l e
18 SE modo ! = hsv , ENTÃO
19 converta A para double
20 FIM SE
21 % dimensão ( A ) == 3 p a r a r g b e h s v ou dimensão ( A ) == 1 p a r a o u t r o s c a s o s
22 PARA i == 1 até v a l o r da dimensão ( A ) FAÇA
23 % cálculo da s v d de Ai == Ui ΣiViT , onde Ui == (ui1 , . . . , uim ) , Σi == d i a g o n a l (σi11 , . . . , σinn )
24 % e Vi == (vi1 , . . . , vin )
25 [Ui , Σi ,Vi ] = s v d ( Ai )
26 pi = calcular_posto(Ai )
27 FIM PARA
28 SE dimensão ( A ) == 1 , ENTÃO
29 p o s t o = p1
30 SENÃO
31 p o s t o = mínimo ( p1 , p2 , p3 )
32 FIM SE
33 % i n i c i a l i z a n d o A como " a r r a y " n u l o . A tem a s mesmas dimensões de A .
34 A =O
35 PARA j == 1 até o v a l o r do p o s t o FAÇA
36 PARA i == 1 até o v a l o r da dimensão ( A ) FAÇA
37 % expansão do p r o d u t o e x t e r n o
38 Ai = Ai + σi j j ui j vTj
i
39 FIM PARA
40 A =A
41 SE modo == hsv , ENTÃO
42 c o n v e r t a A p a r a RGB
43 SENÃO
44 % u i n t 8 é um t i p o e s p e c i a l de i n t e i r o que v a r i a de 0 a 2 5 5 .
45 converta A para uint8
46 FIM SE
47 mostrar (A )
48 pausar iteração
49 SE usuário p r e s s i o n a r q u a l q u e r t e c l a , ENTÃO
50 c o n t i n u a r iteração
51 FIM SE
52 FIM PARA
53 FIM imsvd
Devido ao software propiciar a visualização da imagem em evolução, torna-se conveni-
ente aplicar a expansão do produto externo na reconstrução desta (linha 38). Assim, os cálculos
realizados para formar a imagem atual, de posto p − 1, são armazenados para serem utilizados
na construção da imagem seguinte, de posto p. Isto reduz o custo computacional evitando-se a
aplicação do produto entre as matrizes Ui , Σi , e ViT em cada repetição do laço PARA interno.
Entretanto, se o propósito for reconstruir a imagem definitiva com o posto p já determi-
nado, e assim, visualizá-la somente com este posto, geralmente será melhor efetuar o produto
matricial usual do MATLAB, Ui ∗ Σi ∗ViT diretamente. Os testes demostraram que desta forma,
o processamento da imagem é muito mais eficiente do que o método abordado anteriormente.
Por exemplo, o tempo de processamento de uma imagem RGB com tamanho 1024×768 píxeis,
fazendo uso do produto matricial usual e no modo RGB, foi de aproximadamente 5 segundos.
Por outro lado, o tempo gasto para processar a mesma imagem, utilizando a expansão do pro-
duto externo no mesmo modo, foi de cerca de 80 segundos. Em ambos os testes a imagem
foi reconstruída com o posto máximo (768) e visualizada somente após o término do processa-
mento. O código fonte do programa para processamento no modo RGB por meio do produto
matricial usual empregado neste teste, está no APÊNDICE A - CÓDIGOS FONTE.
Cronograma de atividades. A pesquisa cumpriu o cronograma com as seguintes atividades:
(i) estudo de matrizes e do ambiente de programação MATLAB; (ii) estudo de espaços ve-
toriais e transformações lineares (espaços vetoriais, subespaços, independência linear, base e
dimensão, mudança de base, espaços linha e coluna, transformações lineares, representação
matricial de transformações lineares, semelhança); (iii) estudo de produto interno e ortogona-
lidade (produto interno, subespaços ortogonais, espaços munidos de produto interno, espaços
14
18. normados, conjuntos ortonormais, processo de ortogonalização de Gram-Schmidt); (iv) estudo
de autovalores e autovetores (autovalores e autovetores, diagonalização, matrizes autoadjuntas,
matrizes positivas definidas); (v) decomposição SVD de uma matriz; (vi) aplicações da SVD
em “compressão” de imagens; (vii) redação do relatório final em L TEX.
A
RESULTADOS E DISCUSSÕES
Nesta seção primeiramente são apresentados os resultados obtidos nos ensaios realizados
(1 a 7). Em seguida ocorre uma breve interpretação e análise daqueles na subseção Interpretação
e análise dos resultados. As imagens utilizadas nos ensaios são exibidas na figura 4 e suas
informações aparecem na tabela 1.
(a) spiral.png (b) mundo.jpg (c) lena.jpg (d) pentagono.jpg
(e) hawaii.jpg (f) peppers.png
Figura 4: Imagens utilizadas nos ensaios de 1 a 7. A imagem (a) foi construída com o comando
spiral do MATLAB.
Tabela 1: Informações das imagens na figura 4. A coluna R.A Posto quer dizer que a redução
no armazenamento da imagem somente ocorre para os valores do posto p indicado.
Imagem R.A. Posto Altura × Largura (píxeis) Fonte
(a) spiral.png p <= 3 8×8 Autoria Própria
(b) mundo.jpg p <= 1023 2048 × 2048 [13]
(c) lena.jpg p <= 127 256 × 256 [14]
(d) pentagono.jpg p <= 200 382 × 425 [15]
(e) hawaii.jpg p <= 685 1200 × 1600 [16]
(f) peppers.png p <= 219 384 × 512 [17]
Fonte: Autoria Própria.
Os valores singulares serão abreviados por VS e o posto por p. Além disso, A1 , A2 e
A3 representam as bandas 1, 2 e 3 da imagem RGB ou HSV (Ai = Ui ΣiViT ). Para os casos
de Imagens de Intensidade e com Cores Indexadas, A1 representa a única banda destas. A
15
19. qualidade SSIM (QS) da imagem processada é com relação a imagem “original” e varia entre 0
(pior qualidade) e 1 (qualidade da “original”).
Vale lembrar que, quando o programa IMSVD processa imagens RGB no modo HSV, ele
as converte para HSV e então computa tanto a SVD quanto QS, com relação a imagem HSV.
O mesmo vale para o processamento no modo Cores Indexadas. Para imagens de Intensidade,
não há conversão. O software recebe a imagem já convertida e efetua os cálculos diretamente.
A tabela 2 mostra o posto de cada uma das imagens da figura 4 nos modos RGB, HSV, Cores
Indexadas e de Intensidade. Como visto na subseção Visão do sistema, o posto de uma imagem
é definido aqui, pelo menor posto dentre as três matrizes A1 , A2 e A3 .
Tabela 2: Posto das Imagens na figura 4, após a conversão para o modo indicado.
Modo RGB HSV Cores Indexadas Intensidade
Posto spiral.png 6 3 7 8
Posto mundo.jpg 1798 - 1816 1799
Posto lena.jpg 255 197 255 256
Posto pentagono.jpg 382 346 382 382
Posto hawaii.jpg 1200 641 1200 1200
Posto peppers.png 384 279 384 384
Fonte: Autoria Própria.
Nos processos dos modos RGB, Cores Indexadas e de Intensidade, os elementos das
matrizes computadas, estão dentro do intervalo de números inteiros de 0 a 255. Já no modo
HSV o intervalo de valores está em ponto flutuante e varia entre números de 0 a 1.
Ensaio 1. Imagem “spiral.png”
Gráficos dos valores singulares
Figura 5: Modo RGB. Gráficos dos VS das matrizes das bandas 1, 2 e 3 com relação as colunas de Σ1 , Σ2 e Σ3 .
Figura 6: Modo HSV. Gráficos dos VS das matrizes das bandas 1, 2 e 3 com relação as colunas de Σ1 , Σ2 e Σ3 .
16
20. Figura 7: Modo Cores Indexadas (esquerda) e Intensidade (direita). VS de A1 com relação as colunas de Σ1 .
Imagens obtidas do processamento de “spiral.png”
(a) p=1, QS=0,710 (b) p=2, QS=0,983 (c) p=4, QS=0,997 (d) p=6, QS=1
(e) p=1, QS=0,930 (f) p=2, QS=0,964 (g) p=3, QS=0,978
(h) p=1, QS=0,785 (i) p=2, QS=0,878 (j) p=4, QS=0,986 (k) p=6, QS=0,989
(l) p=1, QS=0,812 (m) p=2, QS=0,990 (n) p=4, QS=0,997 (o) p=8, QS=1
Figura 8: Modos: (a-d) RGB; (e-g) HSV; (h-k) Cores Indexadas; (l-o) Intensidade.
Ensaio 2. Imagem “peppers.png”
Gráficos dos valores singulares
17
21. Figura 9: Modo RGB. Gráficos dos VS das bandas 1, 2 e 3 com relação as colunas de Σ1 , Σ2 e Σ3 .
Figura 10: Modo HSV. Gráficos dos VS das bandas 1, 2 e 3 com relação as colunas de Σ1 , Σ2 e Σ3 .
Figura 11: Modo Cores Indexadas (esquerda) e Intensidade (direita). VS de A1 em relação as colunas de Σ1 .
Imagens obtidas do processamento de “peppers.png”
(a) p=4, QS=0,671 (b) p=20, QS=0,885 (c) p=60, QS=0,978 (d) p=160, QS=0,998
(e) p=4, QS=0,558 (f) p=20, QS=0,670 (g) p=61, QS=0,771 (h) p=160, QS=0,872
(i) p=4, QS=0,403 (j) p=20, QS=0,526 (k) p=60, QS=0,601 (l) p=160, QS=0,644
Figura 12: Modos: (a-d) RGB; (e-h) HSV; (i-l) Cores Indexadas.
18
22. (a) p=4, QS=0,650 (b) p=20, QS=0,860 (c) p=60, QS=0,968 (d) p=160, QS=0,998
Figura 13: Modo de Intensidade.
Ensaio 3. Imagem “mundo.jpg”
Gráficos dos valores singulares
Figura 14: Modo RGB. Gráficos dos VS das bandas 1, 2 e 3 com relação as colunas de Σ1 , Σ2 e Σ3 .
Figura 15: Modo Cores Indexadas (esquerda) e Intensidade (direita). VS de A1 em relação as colunas de Σ1 .
Imagens obtidas do processamento de “mundo.jpg”
(a) p=4, QS=0,489 (b) p=20, QS=0,733 (c) p=85, QS=0,932 (d) p=200, QS=0,971
(e) p=4, QS=0,357 (f) p=20, QS=0,492 (g) p=85, QS=0,660 (h) p=661, QS=0,776
Figura 16: Modos: (a-d) RGB; (e-h) Cores Indexadas.
19
23. (a) p=4, QS=0,490 (b) p=20, QS=0,728 (c) p=87, QS=0,931 (d) p=200, QS=0,971
Figura 17: Modo de Intensidade.
Ensaio 4. Imagem “lena.jpg”
Gráficos dos valores singulares
Figura 18: Modo RGB. Gráficos dos VS das bandas 1, 2 e 3 com relação as colunas de Σ1 , Σ2 e Σ3 .
Figura 19: Modo HSV. Gráficos dos VS das bandas 1, 2 e 3 com relação as colunas de Σ1 , Σ2 e Σ3 .
Figura 20: Modo Cores Indexadas (esquerda) e Intensidade (direita). VS de A1 em relação as colunas de Σ1 .
Imagens obtidas do processamento de “lena.jpg”
(a) p=4, QS=0,567 (b) p=15, QS=0,704 (c) p=60, QS=0,899 (d) p=100, QS=0,966
Figura 21: Modo RGB.
20
24. (a) p=4, QS=0,373 (b) p=15, QS=0,282 (c) p=100, QS=0,306 (d) p=197, QS=0,848
(e) p=4, QS=0,466 (f) p=15, QS=0,607 (g) p=60, QS=0,767 (h) p=100, QS=0,817
(i) p=4, QS=0,551 (j) p=15, QS=0,694 (k) p=60, QS=0,886 (l) p=100, QS=0,958
Figura 22: Modos: (a-d) HSV; (e-h) Cores Indexadas; (i-l) Intensidade.
Ensaio 5. Imagem “hawaii.jpg”
Gráficos dos valores singulares
Figura 23: Modo RGB. Gráficos dos VS das bandas 1, 2 e 3 com relação as colunas de Σ1 , Σ2 e Σ3 .
Figura 24: Modo HSV. Gráficos dos VS das bandas 1, 2 e 3 com relação as colunas de Σ1 , Σ2 e Σ3 .
21
25. Figura 25: Modo Cores Indexadas (esquerda) e Intensidade (direita). VS de A1 em relação as colunas de Σ1 .
Imagens obtidas do processamento de “hawaii.jpg”
(a) p=4, QS=0,516 (b) p=20, QS=0,745 (c) p=100, QS=0,938 (d) p=200, QS=0,980
(e) p=4, QS=0,485 (f) p=20, QS=0,707 (g) p=100, QS=0,901 (h) p=200, QS=0,960
(i) p=4, QS=0,187 (j) p=20, QS=0,285 (k) p=100, QS=0,397 (l) p=685, QS=0,570
(m) p=4, QS=0,505 (n) p=20, QS=0,720 (o) p=100, QS=0,922 (p) p=200, QS=0,972
Figura 26: Modos: (a-d) RGB; (e-h) HSV; (i-l) Cores Indexadas; (m-p) Intensidade.
Ensaio 6. Imagem “pentagono.jpg”
Gráficos dos valores singulares
Figura 27: Modo RGB. Gráficos dos VS das bandas 1, 2 e 3 com relação as colunas de Σ1 , Σ2 e Σ3 .
22
26. Figura 28: Modo HSV. Gráficos dos VS das bandas 1, 2 e 3 com relação as colunas de Σ1 , Σ2 e Σ3 .
Figura 29: Modo Cores Indexadas (esquerda) e Intensidade (direita). VS de A1 em relação as colunas de Σ1 .
Imagens obtidas do processamento de “pentagono.jpg”
(a) p=10, QS=0,313 (b) p=40, QS=0,613 (c) p=120, QS=0,888 (d) p=190, QS=0,970
(e) p=10, QS=0,302 (f) p=40, QS=0,587 (g) p=120, QS=0,867 (h) p=190, QS=0,951
(i) p=10, QS=0,303 (j) p=40, QS=0,588 (k) p=120, QS=0,859 (l) p=190, QS=0,936
(m) p=10, QS=0,310 (n) p=40, QS=0,609 (o) p=120, QS=0,886 (p) p=190, QS=0,970
Figura 30: Modos: (a-d) RGB; (e-h) HSV; (i-l) Cores Indexadas; (m-p) Intensidade.
23
27. Ensaio 7. Adição de Ruído em Algumas Imagens - Somente Modo RGB
Para adicionar ruído às imagens, foi utilizado o comando imnoise do MATLAB, com a
opção ’speckle’ (ruído multiplicativo). A tabela 3 exibe o posto de imagens da figura 4, usadas
neste ensaio, após a adição de ruído.
Tabela 3: Posto de imagens na figura 4, após a adição de ruído.
Imagem peppers.png lena.jpg hawaii.jpg pentagono.jpg
Posto 384 256 1200 382
Fonte: Autoria Própria.
Gráficos dos valores singulares
Os gráficos desta seção, referem-se aos valores singulares das bandas 1, 2 e 3 (A1 , A2 e
A3 ) das imagens, processadas com ruído, com relação as colunas das matrizes diagonais Σ1 , Σ2
e Σ3 , respectivamente.
Figura 31: Gráficos referentes a imagem “peppers.png” com ruído.
Figura 32: Gráficos referentes a imagem “lena.jpg” com ruído.
Figura 33: Gráficos referentes a imagem “hawaii.jpg” com ruído.
Figura 34: Gráficos referentes a imagem “pentagono.jpg” com ruído.
24
28. Resultado do processamento das imagens com ruído
(a) p=4, QS=0,560 (b) p=20, QS=0,769 (c) p=60, QS=0,883 (d) p=160, QS=0,960
(e) p=4, QS=0,288 (f) p=15, QS=0,452 (g) p=60, QS=0,768 (h) p=100, QS=0,889
(i) p=4, QS=0,493 (j) p=20, QS=0,715 (k) p=100, QS=0,909 (l) p=200, QS=0,953
(m) p=10, QS=0,241 (n) p=40, QS=0,550 (o) p=120, QS=0,862 (p) p=190, QS=0,950
Figura 35: Imagens: (a-d) peppers.png; (e-h) lena.jpg; (i-l) hawaii.jpg; (m-p) pentagono.jpg.
Interpretação e análise dos resultados. Os valores singulares tornam-se rapidamente peque-
nos da primeira para a última coluna nas matrizes diagonais, nos quatro modos de processa-
mento observados. Em todos os casos, o primeiro valor singular de cada matriz da imagem,
possui um valor muito alto, e consideravelmente maior que todos os demais. Por este motivo,
ele é o valor singular que “guarda” mais informações da imagem e, visivelmente, é o principal
formador desta. Por outro lado, a maior parte dos valores singulares são bem pequenos e, em
consequência disto, a(s) matriz(es) da imagem pode(m) ser aproximada(s) por outra(s) de posto
muito menor. Isto ocorre porque geralmente os valores de um dado elemento desta(s) matriz(es)
estão próximos dos valores dos elementos vizinhos. Em outras palavras, uma “linha de píxeis”
qualquer na imagem é, normalmente, muito parecida à “linha de píxeis” vizinha.
Para processamento nos modos RGB e de Intensidade, foi possível obter imagens com
qualidade próxima a qualidade da imagem “original”, onde QS = 1, empregando na reconstru-
ção desta um posto bem menor que o maior posto necessário para reduzir o espaço de arma-
zenamento da(s) matriz(es) da imagem (Tab. 1). Isto fica claro na análise de imagens maiores,
como a “mundo.jpg” e “hawaii.jpg” (Fig. 4(b) e 4(e)). Além destes resultados, os processos no
modo RGB, envolvendo imagens com ruído, mostraram que este método pode ser aplicado até
mesmo em imagens onde a qualidade não é tão boa. Isto pode ser exemplificado em imagens
obtidas de radares de trânsito durante à noite, que possuem ruído semelhante.
25
29. De maneira geral, os resultados do processo de imagens nos modos HSV e Cores Inde-
xadas foram satisfatórios. Entretanto, embora utilizando valores altos para o posto, algumas
imagens apresentaram ruído e/ou pequenas alterações nos tons de suas cores, que provocaram
diminuições evidentes na qualidade destas. Pode-se observar isto, com clareza, no ensaio 4 com
a imagem “lena.jpg”. Alguns testes realizados no modo HSV, que não são mostrados aqui, indi-
cam que o ruído ocorre na banda que representa a matiz (banda 1). As distorções nas cores das
imagens são mais comuns nos processamentos do modo Cores Indexadas. Isto ocorre devido
a matriz do mapa de cores, eventualmente, apresentar cores de linhas vizinhas bem diferentes.
Assim, por exemplo, suponha-se que a cor da linha x do mapa de cores seja azul e a linha x + 1
amarelo. Então, se a matriz da imagem aproximada, ao invés de ter o elemento ei j = x, como
na matriz “original”, tiver o elemento ei j = x + 1, a imagem aproximada terá no píxel i j a cor
amarelo e não a azul. Em todo caso, em estudos futuros seria interessante pesquisar maneiras
para solucionar os problemas encontrados no modo HSV e RGB.
Por fim, conclui-se que a qualidade de imagens processadas nos modos RGB e de Inten-
sidade são melhores em relação aos outros dois modos ensaiados. Além disso, os resultados
comprovam a validade da SVD para aplicações que envolvem a redução no espaço de armaze-
namento de imagens.
CONCLUSÕES
Considera-se que todos os objetivos estabelecidos foram alcançados devido aos resulta-
dos obtidos mediante a aplicação do método proposto. Os resultados dos ensaios mostraram
diferenças claras na qualidade de imagens RGB, HSV, de Cores Indexadas e de Intensidade re-
construídas por meio da SVD. Foi possível verificar que uma imagem reconstituída com apenas
as primeiras colunas da matriz U, as primeiras linhas de V T e alguns valores singulares podem
apresentar praticamente a mesma qualidade da imagem “original”.
Alguns problemas como a falta de memória ram, para processar imagens maiores que as
discutidas, não chegaram a prejudicar na análise do método. Contudo trabalhos futuros poderão
resolver este problema, com o desenvolvimento de algoritmos, que possam dividir uma matriz
com grandes dimensões em blocos de matrizes menores, para processá-las individualmente.
Outros problemas citados anteriormente, como o aparecimento de ruído em imagens HSV e o
processamento de imagens com Cores Indexadas utilizando a SVD nas versões mais novas do
MATLAB, também podem ser abordados em trabalhos futuros.
Ressalta-se o aprendizado obtido por meio deste trabalho. Foi possível estudar e compre-
ender a maioria dos temas abordados em livros de graduação de Álgebra Linear, indo além do
que é visto em sala de aula. Por esses e outros motivos a realização deste projeto foi de grande
satisfação.
REFERÊNCIAS
[1] MATHWORKS. Working with Images in MATLAB Graphics. 2012. Disponível em:
<http://www.mathworks.com/help/techdoc/creating_plots/f2-145.html#brb6oxj >. Acesso
em: 16 de julho de 2012.
[2] LEON, S. J. Álgebra Linear com Aplicações. 8. ed. [S.l.]: Editora LTC, 2011.
[3] PEDRINI, H.; SCHWARTZ, W. R. ANÁLISE DE IMAGENS DIGITAIS: Princípios,
Algoritmos e Aplicações. [S.l.]: Editora Thomson Learning Edições Ltda, 2007. ISBN 978-
85-221-0595-3.
26
30. [4] ANTON, H.; BUSBY, R. C. Álgebra Linear Contemporânea. [S.l.]: Bookman, 2006.
ISBN 9788536306155.
[5] KLEMA, V.; LAUB, A. The singular value decomposition: Its computation and some ap-
plications. Automatic Control, IEEE Transactions on, v. 25, n. 2, p. 164 – 176, apr 1980.
ISSN 0018-9286.
[6] ECKART, C.; YOUNG, G. The approximation of one matrix by another of lower
rank. Psychometrika, Springer New York, v. 1, p. 211–218, 1936. ISSN 0033-3123.
10.1007/BF02288367. Disponível em: <http://dx.doi.org/10.1007/BF02288367>.
[7] BOLDRINI, J.; COSTA, S.; FIGUEREDO, V.; WETZLER, H. Álgebra Linear. 3. ed.
[S.l.]: Editora Harbra ltda., 1980.
[8] POOLE, D. Álgebra Linear. 1. ed. [S.l.]: Pioneira Thomson Learning, 2004. ISBN
9788522103591.
[9] MATHWORKS. Image Types. 2012. Disponível em: <http://www.mathworks.com/help/
techdoc/creating_plots/f2-10709.html>. Acesso em: 16 de julho de 2012.
[10] MATHWORKS. Converting Color Data Between Color Spaces. 2012. Disponível em:
<http://www.mathworks.com/help/toolbox/images/f8-20792.html>. Acesso em: 16 de ju-
lho de 2012.
[11] WANG, Z.; BOVIK, A. C.; SHEIKH, H. R.; P., S. E. Image quality assessment:
From error visibility to structural similarity. Image Processing, IEEE Transactions
on, v. 13, n. 4, p. pp. 600–612, Abril 2004. Disponível em: <https://ece.uwaterloo.ca
/~z70wang/research/ssim/>.
[12] MATHWORKS. MATLAB - The Language of Technical Computing. 2012. Disponível
em: <http://www.mathworks.com/products/matlab/index.html>. Acesso em: 19 de julho de
2012.
[13] IMAGE-MAX.ORG. Image Max. 2012. Disponível em: <http://www.image-max.org/
Globe_West_nasa.htm>. Acesso em: 20 de julho de 2012.
[14] COPYS.BIZ. The secret ingredient. 2012. Disponível em: <http://copys.biz/2012/07/
the-secret-ingredient-of-blog-sites-top/>. Acesso em: 20 de julho de 2012.
[15] GUANABARA.INFO. Primeiras imagens do satélite da Google. 2012. Disponível em:
<http://www.guanabara.info/2008/10/primeiras-imagens-do-satelite-da-google/ >. Acesso
em: 20 de julho de 2012.
[16] MY-WALLPAPERS.ORG. Hanauma Bay. 2011. Disponível em: <http://www.my-
wallpapers.org/picture/22254/hanauma-bay-oahu-hawaii>. Acesso em: 20 de julho de 2012.
[17] MATHWORKS. Registering an Image Using Normalized Cross-Correlation. 2012.
Disponível em: <http://www.mathworks.com/products/image/examples.html?file=/produc
ts/demos/shipping/images/ipexnormxcorr2.html>. Acesso em: 20 de julho de 2012.
Nome Orientador Nome Aluno
27
31. APÊNDICE A - CÓDIGOS FONTE
Código 2: Software IMSVD para processamento de imagens por meio da SVD.
1 f u n c t i o n imsvd ( nome_imagem , modo )
2 %
3 % Eh r e c o m e n d a v e l e x e c u t a r o modo i n d e x a d o no m a t l a b 5 . 3 com a
4 % s u b s t i t u i c a o do o p e r a d o r | | p o r |
5 %
6 % Decomposicao em V a l o r e s S i n g u l a r e s ( SVD − S i n g u l a r V a l u e D e c o m p o s i t i o n ) .
7 %
8 % i m s v d ( imagem , modo ) p r o d u z a Decomposicao em V a l o r e s S i n g u l a r e s da ( s )
9 % m a t r i z ( e s ) da IMAGEM, p r o c e s s a n d o e s t a ( s ) n o s MODOs: hsv , r g b ou
10 % i n d e x a d a e , s e a IMAGEM f o r de i n t e n s i d a d e , em m a t r i z de i n t e n s i d a d e .
11 % Apos a Decomposicao , a f u n c a o i m s v d r e c o n s t r o i a imagem p e l a a p r o x i m a c a o
12 % do p o s t o , i n c r e m e n t a n d o −o em um a cada i t e r a c a o e e n t a o p a r a n d o o p r o c e s s o
13 % p a r a que o u s u a r i o p o s s a v i s u a l i z a r a imagem r e c o n s t r u i d a com o p o s t o a t u a l .
14 % Para c o n t i n u a r o p r o c e s s o , b a s t a c l i c a r ou m a n t e r p r e s s i o n a d a q u a l q u e r t e c l a .
15 % Para i n t e r r o m p e r o p r o c e s s o p r e s s i o n e c t r l +c
16 %
17 % ENTRADA :
18 % ( 1 ) nome_imagem : ’ nome_imagem . e x t e n s a o ’ .
19 % ( 2 ) modo : ’ hsv ’ p a r a hsv , ’ i n d ’ p a r a i n d e x a d a , ’ rgb ’ p a r a r g b e
20 % ’ i n t ’ p a r a i n t e n s i d a d e ( e x : t o n s de c i n z a ) .
21 %
22 % Se a imagem nao f o r de i n t e n s i d a d e s e l a s e r a p r o c e s s a d a no modo r g b e .
23 % v i c e −v e r s a .
24 %
25 % PROGRAMA INSTITUCIONAL DE INICIACAO CIENTIFICA ( PIBIC )
26 % TITULO : O t i m i z a c a o no Armazenamento de I m a g e n s p o r meio da Decomposicao
27 % em V a l o r e s S i n g u l a r e s
28 % A l u n o : A g n a l d o C e s a r C o e l h o − B o l s i s t a FUNDACAO ARAUCARIA
29 % O r i e n t a d o r : P r o f . Dr . F a b i o A n t o n i o D o r i n i (DAMAT)
30
31 %%% v e r i f i c a s o o modo eh v a l i d o . Se nao f o r r e t o r n a .
32 i f ~ ( strcmp ( modo , ’hsv’ ) | | strcmp ( modo , ’rgb’ ) | | strcmp ( modo , ’ind’ ) | | strcmp ( modo , ’int’ ) )
33 f p r i n t f ( ’modo incorreto! digite help imsvd , para ajudan’ )
34 return ;
35 end
36
37 %%% l e n d o a imagem e armazenando na m a t r i z
38 %%% s e a imagem f o r RGB , a v a r i a v e l map nao r e c e b e nada
39 [ A, map ] = i m r e a d ( nome_imagem ) ;
40
41 tolerancia = 0.1; % %% t o l e r a n c i a u t i l i z a d a no c a l c u l o do p o s t o
42 B = z e r o s ( s i z e (A) ) ; % %% pre−a l o c a c a o de B , m x n x d , u t i l i z a n d o z e r o s
43 p = zeros (1 ,3) ; % %% pre−a l o c a c a o de P , 1 x 3 , u t i l i z a n d o z e r o s
44 m = s i z e (A, 1 ) ; % %% q u a n t i d a d e de l i n h a s da m a t r i z A
45 n = s i z e (A, 2 ) ; % %% q u a n t i d a d e de c o l u n a s da m a t r i z A
46 q u a n t i d a d e _ b a n d a s = s i z e (A, 3 ) ; % %% q u a n t i d a d e de d i m e n s o e s da m a t r i z A
47
48 u = z e r o s (m, m, q u a n t i d a d e _ b a n d a s ) ; % %% pre−a l o c a c a o de u , m x m x d , com z e r o s
49 d = z e r o s (m, n , q u a n t i d a d e _ b a n d a s ) ; %%% pre−a l o c a c a o de d , m x n x d , com z e r o s
50 v = zeros (n , n , quantidade_bandas ) ; % %% pre−a l o c a c a o de v , n x n x d , com z e r o s
51
52 %%% v e r i f i c a s e a imagem eh RGB p a r a e n t r a r na s e l e c a o
53 i f i s r g b (A)
54 % %% compara s e s t r i n g em modo eh i g u a l a h s v p a r a e n t r a r na s e l e c a o
55 i f strcmp ( modo , ’hsv’ )
56 % %% c o n v e r t e a m a t r i z A de r g b p a r a h s v ( em d o u b l e de 0 . 0 a 1 . 0 )
57 A = rgb2hsv (A) ;
58 % %% compara s e s t r i n g em modo eh i g u a l a i n d p a r a e n t r a r na s e l e c a o
59 e l s e i f strcmp ( modo , ’ind’ )
60 % %% c o n f i g u r a a r r a y p a r a t e r a p e n a s uma m a t r i z ( uma d i m e n s a o )
61 quantidade_bandas = 1;
62 % %% c o n v e r t e n d o a imagem p a r a INDexada
63 % %% A :m x n e map : 256 x 3
64 [A, map ] = r g b 2 i n d (A, 2 5 6 ) ;
65 % %% pre−a l o c a c a o de B , m x n x 1 , u t i l i z a n d o z e r o s
66 B = z e r o s (m, n , q u a n t i d a d e _ b a n d a s ) ;
67 end
68 end
69
70 %%% compara s e s t r i n g em modo NAO eh i g u a l a h s v p a r a e n t r a r na s e l e c a o
71 i f ~ strcmp ( modo , ’hsv’ )
72 % %% t o d a s a s m a t r i z e s d a s i m a g e n s que nao s e r a o p r o c e s s a d a s como h s v
73 % %% s a o c o n v e r t i d a s em d o u b l e . O M a t l a b r e q u e r +1 p a r a a c e r t o s
74 A = d o u b l e (A) + 1 ;
75 end
76
77 %%% l a c o f o r , v a r i a n d o de um a t e o maximo de d i m e n s o e s do a r r a y
78 %%% p a r a c a l c u l a r a s v d de A p a r a cada d i m e n s a o
79 %%% e a r m a z e n a r na m a t r i z u ( r e p r e s e n t a U) , d ( Sigma ) , v ( V )
80 for banda = 1 : q u a n t i d a d e _ b a n d a s
81 %%% c a l c u l a a s v d de A
82 [ u ( : , : , b a n d a ) , d ( : , : , b a n d a ) , v ( : , : , b a n d a ) ] = svd ( A ( : , : , b a n d a ) ) ;
83 %%% c a l c u l a o p o s t o u t i l i z a n d o a soma ( sum ) da q u a n t i d a d e de
84 %%% e l e m e n t o s da d i a g o n a l da m a t r i z d ( d i m e n s a o banda ) m a i o r e s que 1 .
85 %%% Se d i a g ( . . . ) m a i o r que t o l e r a n c i a r e t o r n a 1 , s e n a o r e t o r n a 0
86 p ( b a n d a ) = sum ( d i a g ( d ( : , : , b a n d a ) ) > t o l e r a n c i a ) ;
87 end
88
89 %%% s e q u a n t i d a d e d a s d i m e n s o e s f o r 1 , o p o s t o r e c e b e o v a l o r de
90 %%% do p r i m e i r o e l e m e n t o no v e t o r p
91 %%% senao , r e c e b e o minimo e n t r e o s p o s t o s d a s t r e s m a t r i z e s
92 i f q u a n t i d a d e _ b a n d a s == 1
28
32. 93 posto = p (1) ;
94 else
95 p o s t o = min ( p ( 1 ) , min ( p ( 2 ) , p ( 3 ) ) ) ;
96 end
97
98 %%% l a c o f o r v a r i a n d o de um a t e o p o s t o
99 %%% p a r a c a l c u l a r a s m a t r i z e s m a i s p r o x i m a s de A ( norma F r o b e n i u s )
100 for i = 1: posto
101
102 %%% l a c o f o r v a r i a n d o de um a t e a q u a n t i d a d e de d i m e n s o e s p a r a a
103 %%% r e s c o n t r u c a o da imagem u t i l i z a n d o a e x p a n s a o do p r o d u t o e x t e r n o ,
104 %%% A = s i g m a _ 1 * u_1 * v_1 ’+ s i g m a _ 2 * u_2 * v_2 ’ + . . . + s i g m a _ p * u_p * v_p ’
105 %%% onde p == p o s t o ( A = s o m a t o r i o de m a t r i z e s de p o s t o 1 )
106 for banda = 1 : q u a n t i d a d e _ b a n d a s
107 B ( : , : , banda ) = B ( : , : , banda ) + d ( i , i , banda ) *u ( : , i , banda ) *v ( : , i , banda ) ’ ;
108 end
109
110 %%% compara s e s t r i n g em modo eh i g u a l a h s v p a r a e n t r a r na s e l e c a o
111 i f strcmp ( modo , ’hsv’ )
112 %%% m o s t r a a imagem a p o s c o n v e r t e r de h s v p a r a r g b
113 imshow ( hsv2rgb ( B ) ) ;
114 else
115 %%% m o s t r a a imagem a p o s c o n v e r t e r de d o u b l e p a r a u i n t 8 (0 −255)
116 %%% e s e map nao e s t i v e r v a z i o e l e s e r a u s a d o como mapa de c o r e s
117 imshow ( u i n t 8 ( B − 1 ) , map ) ;
118 end
119 %%% i m p r i m e o p o s t o a t u a l de B acima da imagem . O p o s t o da imagem
120 %%% p r o c e s s a d a em h s v ou r g b eh dado p e l o menor p o s t o d e n t r e a s t r e s m a t r i z e s
121 t i t l e ( s t r c a t ( ’posto atual=’ , num2str ( i ) , ’ , ’ , ’ posto total=’ , num2str ( p o s t o ) ) ) ;
122 %%% p a u s a a e x i b i c a o de imagens , p a r a eh c o n t i n u a r p r e s s i o n a r q u a q u e r t e c l a
123 pause ;
124 end
Código 3: Processamento no modo RGB por meio da SVD, usando o produto matricial usual.
1 f u n c t i o n i m s v d _ r g b ( nome_imagem , p o s t o _ m a x )
2 %
3 % i m s v d ( imagem , p o s t o _ m a x ) p r o d u z a d e c o m p o s i c a o d a s m a t r i z e s da IMAGEM,
4 % p r o c e s s a n d o a imagem em r g b .
5 %
6 % nome_imagem >> ’ nome_imagem . e x t e n s a o ’ .
7 % p o s t o _ m a x >> i n t e i r o > 0 . P o s t o u t i l i z a d o no c a l c u l o da r e c o n s t r u c a o da m a t r i z d e c o m p o s t a
8
9 A = i m r e a d ( nome_imagem ) ; %%% l e n d o a imagem e armazenando na m a t r i z A
10
11 i f i s r g b (A) % %% v e r i f i c a s e a imagem eh RGB p a r a e n t r a r na s e l e c a o
12 A = d o u b l e (A) + 1 ; % %% c o n v e r s a o p a r a d o u b l e . M a t l a b r e q u e r +1 p a r a a c e r t o s
13 for i = 1:3
14 [U, D, V] = svd ( A ( : , : , i ) , ’econ ’ ) ; % %% c a l c u l a a s v d de A ( f o r m a e c o n o m i c a )
15 p ( i ) = sum ( d i a g (D) > 0 . 1 ) ; % %% c a l c u l a o posto
16
17 i f p o s t o _ m a x > p ( i ) | | p o s t o _ m a x <= 0 % %% v e r i f i c a s e o p o s t o d e t e r m i n a d o p e l o
18 posto_max = p ( i ) ; % %% u s u a r i o eh v a l i d o . Se nao f o r r e c e b e r a o p o s t o
19 end %%% de A _ i ( m a t r i z R , G ou B )
20
21 u = 1 : f i x ( posto_max ) ; % %% u = [ 1 2 3 . . . p o s t o _ m a x ]
22 A ( : , : , i ) = U ( : , u ) *D( u , u ) *V ( : , u ) ’ ; %%% r e s c o n t r u c a o da imagem u t i l i z a n d o
23 %%% o p r o d u t o m a t r i c i a l u s u a l A=U* Sigma * V ’
24 end
25 p o s t o = min ( p ( 1 ) , min ( p ( 2 ) , p ( 3 ) ) ) ;
26 imshow ( u i n t 8 ( A − 1 ) ) ; % %% m o s t r a a imagem a p o s c o n v e r t e r de d o u b l e p a r a u i n t 8 (0 −255)
27 % %% com t i t u l o m o s t r a n d o p o s t o e p o s t o t o t a l
28 t i t l e ( s t r c a t ( ’posto=’ , num2str ( p o s t o _ m a x ) , ’ , ’ , ’ posto total=’ , num2str ( p o s t o ) ) ) ;
29 else
30 f p r i n t f ( ’Imagem nao eh RGB!nn’ ) ;
31 end
29