Annuler un flou Gaussie

Par une méthode algorithmique

a marqué ce sujet comme résolu.

Salut,

Je viens ici vous soumettre un petit problème, non pas que j'ai besoin de la réponse, mais plus par curiosité.

Je me demandais s'il était possible "d'annuler" un flou gaussien, c'est à dire de retrouver l'original d'une image après application d'un flou gaussien

En effet, chaque pixel de l'image flouté est obtenu à partir d'une moyenne pondérée des pixels voisins.
Habituellement une moyenne est une fonction de $\mathbb{R}^n \rightarrow \mathbb{R}$ d'où une évidente perte d'informations.

Mais là, pour $L\times C$ pixels de l'image de départ, il y a toujours $L\times C$ pixels dans l'image d'arrivée.

Donc pour chaque pixel $f$ de l'image floutée, avec $d$ le pixel de l'image de départ, et la matrice suivante :

1
2
3
0.0 0.2 0.0
0.2 0.2 0.2
0.0 0.2 0.0

On peut alors écrire les relations suivantes :

$f_{ij} = (d_{ij} + d_{(i+1)j} + d_{(i-1)j} + d_{i(j+1)} + d_{i(j-1)}) \times \frac{1}{5}$

Je me demandais s'il existait des outils mathématiques pour une résolution de ce genre de systèmes.

D'autant plus que, par bonheur, l'espace de recherche est assez limité. En effet chaque pixel pour être séparé en trois canaux RGB, on peut alors calculé la moyenne pour chaque couleur séparément. Celles-ci étant entières, et stockées sur 8 bits, seules 256 valeurs peuvent être prises par R, V ou B pour chaque pixel. J'ignore si cela simplifie le problème, compte tenu du fait la véritable valeur de la moyenne sera toujours arrondie à l'entier inférieur (codage entier oblige).

S'il existe une infinité de solutions (chose que je soupçonne, sans en être sûr) existe-t-il des critères heuristiques pour en sélectionner une ?

Peut-on ramener la résolution du système à un problème de satisfaction de contraintes ? Par exemple : "quelles valeurs choisir dans l'intervalle $[|0;255|]$ pour chaque $d_{ij}$ de façon que l'équation précédente soit vérifiée" ?

La programmation linéaire sait-elle répondre à ce genre de problèmes ?

+0 -0
Banni

En tous cas étudier cette transformation linéaire. Peut-être qu'il y a des propriétés à exploiter.

edit : au fait, je n'ai jamais compris pourquoi ce que tu appelle « matrice » (le truc 3×3 avec les 0 et les 0.2 dans ton premier message) est appelé ainsi, et plus généralement pourquoi on appelle un tableau de nombres une matrice même quand ça ne représente pas une transformation linéaire. C'est comme les « vectors » en algorithmique, mais ça apparemment c'est un accident historique.

+0 -0

En considérant ton image comme étant un vecteur de pixels on peut déterminer la matrice qui transforme ton image d'origine en une image floutée.

Vu que mes cours d'algèbre linéaire datent, je suis pas vraiment sûr de ce que je vais dire, mais ça peut être une piste :

Sauf erreur de ma part, ta matrice sera stochastique, donc son déterminant est quelque part entre -1 et 1. Il est même possible (démontrable) que, vu la manière dont elle est construite, son déterminant soit non nul et donc ta matrice est inversible.

Est-ce que ça résout le problème? Non. J'ai fait un test sur une image 3x3 et le déterminant était de l'ordre de $10^{-4}$, soit très proche de 0. Or les algorithmes numériques d'inversion de matrice n'aiment vraiment pas ça, ce qui risque de compliquer le calcul d'une matrice inverse qui ne fait pas n'importe quoi.

Mais le plus important pour moi est les problèmes induits par les arrondis : si durant le calcul l'ordinateur arrive à une valeur non entière, il va l'arrondir et ça entraîne forcément une perte d'information. Et intuitivement, je dirais que cette perte d'information va avoir tendance à s'accentuer lorsque tu appliqueras la matrice inverse.

Donc pour conclure un peu : je dirais que c'est probablement mathématiquement possible si on a des pixels dont les 3 composantes sont dans $\mathbb{R}$. Le problème de précision dû au fait que l'on travail uniquement avec des valeurs entières aurait tendance à rendre le problème impossible plutôt qu'à le simplifier.

edit : au fait, je n'ai jamais compris pourquoi ce que tu appelle « matrice » (le truc 3×3 avec les 0 et les 0.2 dans ton premier message) est appelé ainsi, et plus généralement pourquoi on appelle un tableau de nombres une matrice même quand ça ne représente pas une transformation linéaire. C'est comme les « vectors » en algorithmique, mais ça apparemment c'est un accident historique.

Idéophage

Parce qu'une matrice c'est un tableau de nombres. Pour les applications linéaires, on parle de matrice représentative d'une application linéaire.

Comme exemple de matrice qui ne représente pas une application linéaire tu peux regarder les matrices de la forme :

$$ \begin{pmatrix}1 & 2 & 3 & 4\\ 3 & 2 & 4 & 1\end{pmatrix} $$

qui représentent des permutations.

Cependant, comme les matrices que l'on manipule et connait le plus sont celles de l'algèbre linéaire, on fait l'abus de langage de considérer toutes les matrices comme des applications linéaire (en passant sous le tapis le choix de deux bases).

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte