Pular para conteúdo

Produto Imagem-Template

Introdução

Produto imagem-template

Vamos tratar agora de operações que combinam imagens com templates e templates com templates, como correlação e convolução.


Definições Preliminares

Operações Binárias

Sejam \( \gamma \) e \( \circ \) duas operações binárias em \( \mathbb{F} \), sendo que:

  • \( \gamma \) é associativa e comutativa
  • \( \circ \) distribui sobre \( \gamma \)

Template e Imagem

Seja então o template \( \mathbf{t} \in (\mathbb{F}^{\mathbf{X}})^{\mathbf{Y}} \), i.e., para cada \( \mathbf{y} \in \mathbf{Y} \), \( \mathbf{t}_{\mathbf{y}} \in \mathbb{F}^{\mathbf{X}} \).

Seja ainda a imagem \( \mathbf{a} \in \mathbb{F}^{\mathbf{X}} \), com \( \mathbf{X} \) finito.


Operação Produto

Operação produto

Para cada \( \mathbf{y} \), podemos operar:

\[ \mathbf{a} \circ \mathbf{t}_{\mathbf{y}} \in \mathbb{F}^{\mathbf{X}} \]

E ainda fazer a operação de redução global induzida por \( \gamma \):

\[ \Gamma(\mathbf{a} \circ \mathbf{t}_{\mathbf{y}}) \in \mathbb{F} \]

Operação Binária Induzida

Chegamos assim à seguinte operação binária induzida:

\[ \textcircled{$\gamma$} : \mathbb{F}^{\mathbf{X}} \times (\mathbb{F}^{\mathbf{X}})^{\mathbf{Y}} \rightarrow \mathbb{F}^{\mathbf{Y}} \]

expressa por:

\[ \mathbf{b} = \mathbf{a} \textcircled{$\gamma$} \mathbf{t} \in \mathbb{F}^{\mathbf{Y}} \]

definida por:

\[ \mathbf{b}(\mathbf{y}) = \Gamma(\mathbf{a} \circ \mathbf{t}_{\mathbf{y}}) = \Gamma_{\mathbf{x} \in \mathbf{X}}[\mathbf{a}(\mathbf{x}) \circ \mathbf{t}_{\mathbf{y}}(\mathbf{x})] \]

Convolução

Convolução

Se \( \mathbf{X} = \{\mathbf{x}_1, \mathbf{x}_2, \ldots, \mathbf{x}_n\} \):

\[ \mathbf{b}(\mathbf{y}) = (\mathbf{a}(\mathbf{x}_1) \circ \mathbf{t}_{\mathbf{y}}(\mathbf{x}_1)) \gamma (\mathbf{a}(\mathbf{x}_2) \circ \mathbf{t}_{\mathbf{y}}(\mathbf{x}_2)) \gamma \ldots \gamma (\mathbf{a}(\mathbf{x}_n) \circ \mathbf{t}_{\mathbf{y}}(\mathbf{x}_n)) \]

expressão esta chamada de convolução à direita de \( \mathbf{a} \) com \( \mathbf{t} \).

Mudança de Domínio

Note que o domínio da imagem de saída é \( \mathbf{Y} \) e não mais \( \mathbf{X} \) como na original.

Produto Linear Imagem-Template

Se o grupo \( (\mathbb{F}, \gamma, \circ) \) em questão for \( (\mathbb{R}, +, \cdot) \), então:

\[ \mathbf{b} = \mathbf{a} \oplus \mathbf{t} \]

é o chamado produto linear imagem-template ou simplesmente convolução de \( \mathbf{a} \) com \( \mathbf{t} \), tal que:

\[ \mathbf{b}(\mathbf{y}) = \sum_{\mathbf{x} \in \mathbf{X}} [\mathbf{a}(\mathbf{x}) \cdot \mathbf{t}_{\mathbf{y}}(\mathbf{x})] \]

Resumo

Conceito Definição
Operação genérica \( \mathbf{b}(\mathbf{y}) = \Gamma_{\mathbf{x}}[\mathbf{a}(\mathbf{x}) \circ \mathbf{t}_{\mathbf{y}}(\mathbf{x})] \)
Convolução Caso especial com \( (\mathbb{R}, +, \cdot) \)
Fórmula da convolução \( \mathbf{b}(\mathbf{y}) = \sum_{\mathbf{x}} \mathbf{a}(\mathbf{x}) \cdot \mathbf{t}_{\mathbf{y}}(\mathbf{x}) \)
Domínio de saída \( \mathbf{Y} \) (não \( \mathbf{X} \))

Template Transposto

Template transposto

Um template \( \mathbf{s} \in (\mathbb{F}^{\mathbf{Y}})^{\mathbf{X}} \) tem seu transposto \( \mathbf{s}' \) definido por:

\[ \mathbf{s}'_{\mathbf{y}}(\mathbf{x}) = \mathbf{s}_{\mathbf{x}}(\mathbf{y}) \]

Exemplo (Invariante a Escala)

Considere um template onde os pesos originais são:

Pesos originais
\( \mathbf{t}_{(1,1)}(1, 1) = 1 \) \( \mathbf{t}_{(1,1)}(1, 2) = 2 \) \( \mathbf{t}_{(1,1)}(2, 1) = 3 \)
\( \mathbf{t}_{(1,2)}(1, 2) = 1 \) \( \mathbf{t}_{(1,2)}(1, 3) = 2 \) \( \mathbf{t}_{(1,2)}(2, 2) = 3 \)
\( \mathbf{t}_{(2,1)}(2, 1) = 1 \) \( \mathbf{t}_{(2,1)}(2, 2) = 2 \) \( \mathbf{t}_{(2,1)}(3, 1) = 3 \)
\( \mathbf{t}_{(2,2)}(2, 2) = 1 \) \( \mathbf{t}_{(2,2)}(2, 3) = 2 \) \( \mathbf{t}_{(2,2)}(3, 2) = 3 \)

Transposto

Transposto

Pesos transpostos
\( \mathbf{t}_{(1,1)}(1, 1) = 1 \) \( \mathbf{t}_{(1,2)}(1, 1) = 2 \) \( \mathbf{t}_{(2,1)}(1, 1) = 3 \)
\( \mathbf{t}_{(1,2)}(1, 2) = 1 \) \( \mathbf{t}_{(1,3)}(1, 2) = 2 \) \( \mathbf{t}_{(2,2)}(1, 2) = 3 \)
\( \mathbf{t}_{(2,1)}(2, 1) = 1 \) \( \mathbf{t}_{(2,2)}(2, 1) = 2 \) \( \mathbf{t}_{(3,1)}(2, 1) = 3 \)
\( \mathbf{t}_{(2,2)}(2, 2) = 1 \) \( \mathbf{t}_{(2,3)}(2, 2) = 2 \) \( \mathbf{t}_{(3,2)}(2, 2) = 3 \)

Convolução à Esquerda

Convolução à esquerda

Assim, \( \mathbf{s}'_{\mathbf{y}} \circ \mathbf{a} \in \mathbb{F}^{\mathbf{X}} \) e \( \Gamma(\mathbf{s}'_{\mathbf{y}}(\mathbf{a})) \in \mathbb{F} \) gerando a operação induzida:

\[ \textcircled{$\gamma$} : (\mathbb{F}^{\mathbf{Y}})^{\mathbf{X}} \times \mathbb{F}^{\mathbf{X}} \rightarrow \mathbb{F}^{\mathbf{Y}} \]

sendo:

\[ \mathbf{b} = \mathbf{s} \textcircled{$\gamma$} \mathbf{a} \in \mathbb{F}^{\mathbf{Y}} \]

definida por:

\[ \mathbf{b}(\mathbf{y}) = \Gamma(\mathbf{s}'_{\mathbf{y}} \circ \mathbf{a}) = \Gamma_{\mathbf{x} \in \mathbf{X}}[\mathbf{s}'_{\mathbf{y}}(\mathbf{x}) \circ \mathbf{a}(\mathbf{x})] \]

\( \mathbf{s} \textcircled{$\gamma$} \mathbf{a} \) é o produto de convolução à esquerda de \( \mathbf{a} \) com \( \mathbf{s} \).

Também pode ser escrito sem usar transposto:

\[ \mathbf{b}(\mathbf{y}) = \Gamma_{\mathbf{x} \in \mathbf{X}}(\mathbf{s}_{\mathbf{x}}(\mathbf{y}) \circ \mathbf{a}(\mathbf{x})) \]

Extensão com Monoides

Monoides

Seja agora \( (\mathbb{F}, \gamma) \) um monoide: operação binária associativa \( \gamma \) com um elemento identidade denotado por 0.

Seja a imagem \( \mathbf{a} \in \mathbb{F}^{\mathbf{X}} \) e o template \( \mathbf{t} \in (\mathbb{F}^{\mathbf{Z}})^{\mathbf{Y}} \), em que \( \mathbf{X} \) e \( \mathbf{Z} \) são subconjuntos do mesmo espaço.

Como \( \mathbb{F} \) é monoide podemos estender o operador \( \textcircled{$\gamma$} \):

\[ \textcircled{$\gamma$} : \mathbb{F}^{\mathbf{X}} \times (\mathbb{F}^{\mathbf{Z}})^{\mathbf{Y}} \rightarrow \mathbb{F}^{\mathbf{Y}} \]

em que \( \mathbf{b} = \mathbf{a} \textcircled{$\gamma$} \mathbf{t} \) é definido por:

\[ \mathbf{b}(\mathbf{y}) = \begin{cases} \Gamma_{\mathbf{x} \in \mathbf{X} \cap \mathbf{Z}}(\mathbf{a}(\mathbf{x}) \circ \mathbf{t}_{\mathbf{y}}(\mathbf{x})) & \text{se } \mathbf{X} \cap \mathbf{Z} \neq \emptyset \\ 0 & \text{se } \mathbf{X} \cap \mathbf{Z} = \emptyset \end{cases} \]

Otimização Computacional

Otimização

Semelhantemente, podemos reduzir cálculos computacionais nestas operações se \( (\mathbb{F}, \gamma, \circ) \) for um semi-anel comutativo (não exige inverso aditivo para todos os elementos).

Recordando a noção de suporte de um template podemos escrever:

\[ \Gamma_{\mathbf{x} \in \mathbf{X} \cap \mathbf{Z}}[\mathbf{a}(\mathbf{x}) \circ \mathbf{t}_{\mathbf{y}}(\mathbf{x})] = \Gamma_{\mathbf{x} \in \mathbf{X} \cap S(\mathbf{t}_{\mathbf{y}})}[\mathbf{a}(\mathbf{x}) \circ \mathbf{t}(\mathbf{y})] \]

Complexidade

Isto implica que o cálculo do novo valor para o pixel \( \mathbf{b}(\mathbf{y}) \) não depende do tamanho de \( \mathbf{X} \), mas sim de \( S(\mathbf{t}_{\mathbf{y}}) \).

Se \( k = \text{card}(\mathbf{X} \cap S(\mathbf{t}_{\mathbf{y}})) \), então o cálculo de \( \mathbf{b}(\mathbf{y}) \) envolve \( 2k - 1 \) operações de \( \gamma \) e \( \circ \).


Variedade de Transformações

Variedade

A substituição de \( (\mathbb{F}, \gamma, \circ) \) por diferentes conjuntos de valores e operações binárias gera uma grande variedade de transformações de imagens.


Operadores Morfológicos

Morfológicos

Estrutura

O anel \( (\mathbb{R}, +, \cdot) \) se generaliza para a estrutura \( (\mathbb{R}_{\pm\infty}, \vee, \wedge, +, +') \) gerando os dois produtos de reticulados seguintes.

Operador de Convolução Max Morfológico

\[ \mathbf{b} = \mathbf{a} \boxed{\vee} \mathbf{t} \]

em que:

\[ \mathbf{b}(\mathbf{y}) = \bigvee_{\mathbf{x} \in \mathbf{X} \cap S_{-\infty}(\mathbf{t}_{\mathbf{y}})} [\mathbf{a}(\mathbf{x}) + \mathbf{t}_{\mathbf{y}}(\mathbf{x})] \]

Operador de Convolução Min Morfológico

\[ \mathbf{b} = \mathbf{a} \boxed{\wedge} \mathbf{t} \]

em que:

\[ \mathbf{b}(\mathbf{y}) = \bigwedge_{\mathbf{x} \in \mathbf{X} \cap S_{\infty}(\mathbf{t}_{\mathbf{y}})} [\mathbf{a}(\mathbf{x}) +' \mathbf{t}_{\mathbf{y}}(\mathbf{x})] \]

Operações Morfológicas à Esquerda

À esquerda

Temos ainda as operações max e min morfológicos à esquerda:

\[ \mathbf{t} \boxed{\vee} \mathbf{a} = \left\{ (\mathbf{y}, \mathbf{b}(\mathbf{y})) : \mathbf{b}(\mathbf{y}) = \bigvee_{\mathbf{x} \in \mathbf{X} \cap S_{-\infty}(\mathbf{t}'_{\mathbf{y}})} [\mathbf{t}_{\mathbf{x}}(\mathbf{y}) + \mathbf{a}(\mathbf{x})], \mathbf{y} \in \mathbf{Y} \right\} \]
\[ \mathbf{t} \boxed{\wedge} \mathbf{a} = \left\{ (\mathbf{y}, \mathbf{b}(\mathbf{y})) : \mathbf{b}(\mathbf{y}) = \bigwedge_{\mathbf{x} \in \mathbf{X} \cap S_{\infty}(\mathbf{t}'_{\mathbf{y}})} [\mathbf{t}_{\mathbf{x}}(\mathbf{y}) +' \mathbf{a}(\mathbf{x})], \mathbf{y} \in \mathbf{Y} \right\} \]

Dualidade

Estas operações se relacionam por dualidade:

\[ \mathbf{a} \boxed{\wedge} \mathbf{t} = (\mathbf{t}^* \boxed{\vee} \mathbf{a}^*)^* \]

Máximo e Mínimo Multiplicativo

Multiplicativo

A estrutura \( (\mathbb{R}^{\geq 0}_{\infty}, \vee, \wedge, \times, \times') \) também provê operações correspondentes, chamadas de máximo e mínimo multiplicativo:

Máximo Multiplicativo

\[ \mathbf{b} = \mathbf{a} \boxed{\vee} \mathbf{t} \]

em que:

\[ \mathbf{b}(\mathbf{y}) = \bigvee_{\mathbf{x} \in \mathbf{X} \cap S(\mathbf{t}_{\mathbf{y}})} [\mathbf{a}(\mathbf{x}) \times \mathbf{t}_{\mathbf{y}}(\mathbf{x})] \]

Mínimo Multiplicativo

\[ \mathbf{b} = \mathbf{a} \boxed{\wedge} \mathbf{t} \]

em que:

\[ \mathbf{b}(\mathbf{y}) = \bigwedge_{\mathbf{x} \in \mathbf{X} \cap S_{\infty}(\mathbf{t}_{\mathbf{y}})} [\mathbf{a}(\mathbf{x}) \times' \mathbf{t}_{\mathbf{y}}(\mathbf{x})] \]

Multiplicativo à Esquerda

Multiplicativo esquerda

Temos também o max e min multiplicativo à esquerda:

\[ \mathbf{t} \boxed{\vee} \mathbf{a} = \left\{ (\mathbf{y}, \mathbf{b}(\mathbf{y})) : \mathbf{b}(\mathbf{y}) = \bigvee_{\mathbf{x} \in \mathbf{X} \cap S(\mathbf{t}'_{\mathbf{y}})} [\mathbf{t}_{\mathbf{x}}(\mathbf{y}) \times \mathbf{a}(\mathbf{x})], \mathbf{y} \in \mathbf{Y} \right\} \]
\[ \mathbf{t} \boxed{\wedge} \mathbf{a} = \left\{ (\mathbf{y}, \mathbf{b}(\mathbf{y})) : \mathbf{b}(\mathbf{y}) = \bigwedge_{\mathbf{x} \in \mathbf{X} \cap S_{\infty}(\mathbf{t}'_{\mathbf{y}})} [\mathbf{t}_{\mathbf{x}}(\mathbf{y}) \times' \mathbf{a}(\mathbf{x})], \mathbf{y} \in \mathbf{Y} \right\} \]

Dualidade

as quais se relacionam por dualidade:

\[ \mathbf{a} \boxed{\wedge} \mathbf{t} = (\mathbf{t}^* \boxed{\vee} \mathbf{a}^*)^* \]

em que \( r^* \) é o conjugado de \( r \) em \( \mathbb{R}^{\geq 0}_{\infty} \).