IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Traitement d'images Discussion :

Filtre de Kirsch


Sujet :

Traitement d'images

  1. #1
    Membre averti
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Février 2020
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Février 2020
    Messages : 24
    Par défaut Filtre de Kirsch
    Bonjour,


    Je m'intéresse au traitement d'images et en particulier aux méthodes de convolution. Il existe des dizaines de filtres, mais très peu de définition faisant consensus : pour la matrice 5x5 du filtre de Sobel, je connais au moins cinq descriptions différentes, et aucune formule permettant de construire ces matrices en toutes tailles.
    Pire, dans le cas du filtre de Kirsch, je ne trouve que la donnée brutale de la matrice 3x3 (et donc je ne sais pas comment l'étendre à d'autres tailles) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    533
    5  03
    533
    Et toutes les rotations.
    Quelqu'un saurait-il d'où viennent ces coefficients et comment les généraliser (toute info sur d'autres filtres sont les bienvenues).

  2. #2
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    26 776
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2008
    Messages : 26 776
    Par défaut


    Citation Envoyé par MorpionSolitaire Voir le message
    pour la matrice 5x5 du filtre de Sobel, je connais au moins cinq descriptions différentes, et aucune formule permettant de construire ces matrices en toutes tailles.
    Sobel, n'est-ce pas "simplement" une approximation du gradient, avec deux matrices de convolution pour obtenir les deux composantes du gradient ? Tu as donc des manières d'évaluer une dérivée discrète sur une image. https://www.researchgate.net/publica...dient_Operator explique que c'est une moyenne pondérée (avec les poids 1, 2 et 1) de différences centrées (d'où des vecteurs -1, 0, 1). Plus précisément, si tu n'as que des différences centrées, le premier opérateur et la transposée du second ressembleront à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    -1, 0, 1
    -1, 0, 1
    -1, 0, 1
    C'est la version discrète de ce qui est présenté dans https://fr.wikipedia.org/wiki/Diff%C...%A9rence_finie : f(x) correspond au pixel centré, f(x - h/2) au pixel à gauche, f(x + h/2) au pixel à droite. Si tu veux une meilleure approximation de la dérivée, tu prends plus de termes avec une formule de différences centrées d'ordre supérieur (attention à ne pas confondre avec des différences finies pour des dérivées secondes, troisièmes, etc.) : https://en.wikipedia.org/wiki/Finite...ce_coefficient.

    Citation Envoyé par MorpionSolitaire Voir le message
    Pire, dans le cas du filtre de Kirsch, je ne trouve que la donnée brutale de la matrice 3x3 (et donc je ne sais pas comment l'étendre à d'autres tailles) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    533
    5  03
    533
    Et toutes les rotations.
    Quelqu'un saurait-il d'où viennent ces coefficients et comment les généraliser (toute info sur d'autres filtres sont les bienvenues).
    Déjà, pourquoi veux-tu étendre ces matrices ? Si c'est pour limiter les faux positifs dans une détection d'arête, ne peux-tu pas flouter légèrement l'image (convolution avec un noyau gaussien, par exemple) ? De ce que je vois, pour ce noyau en particulier, comme il a été conçu de manière un peu arbitraire, bonne chance pour trouver une formule : cependant, tu peux garder les mêmes idées que précédemment pour générer de nouvelles matrices de convolution, avec de gros coefficients positifs dans une direction (parmi huit, pour garder l'idée d'origine : haut, haut-droite, droite, etc.), puis des coefficients négatifs de l'autre, avec une somme nulle.
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  3. #3
    Membre averti
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Février 2020
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Février 2020
    Messages : 24
    Par défaut
    Merci de ces infos.
    Ce qui m'énerve c'est de ne pas trouver une définition mathématiques, claire et précise de ces matrices (par contre, pour le filtre Gaussien la définition ne laisse aucune place au hasard), pourquoi existe-t-il au moins 5 d"finitions incompatibles pour Sobel et aucune pour Kirsch, juste "en 3x3 c'est ça !".
    Je vais pouvoir me débrouiller avec cela.

  4. #4
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    26 776
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2008
    Messages : 26 776
    Par défaut
    Citation Envoyé par MorpionSolitaire Voir le message
    au moins 5 d"finitions incompatibles pour Sobel
    En fait, quelles définitions as-tu trouvées ? À part la classique en 3x3 (deux matrices) et les généralisations en plus grande taille, je n'ai pas trouvé d'autre définition de l'opérateur . Pour Kirsch, ça me paraît normal : j'en comprends que c'est un opérateur défini très arbitrairement, sans raisonnement d'origine mathématique pure (contrairement à Sobel).
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  5. #5
    Membre averti
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Février 2020
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Février 2020
    Messages : 24
    Par défaut
    Voilà ce que j'ai trouvé (je n'ai plus les sources sous la main, mais avec un peu de temps, je pourrais, sans doute, les retrouver):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    -5	-4	0	4	5
    -8	-10	0	10	8
    -10	-20	0	20	10
    -8	-10	0	10	8
    -5	-4	0	4	5
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    2	1	0	-1	-2
    2	1	0	-1	-2
    4	2	0	2	4
    2	1	0	-1	-2
    2	1	0	-1	-2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    1	2	021
    4	8	084
    6	12	0126
    4	8	084
    1	2	021
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    -3	-4	0	4	3
    -4	-6	0	6	4
    -6	-12	0	12	6
    -4	-6	0	6	4
    -3	-4	0	4	3
    Pour la cinquième, j'ai confondu avec une matrice de poids qui permet de calculer le filtre proprement dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    5	8	10	8	5
    8	20	40	20	8
    10	40	50	40	10
    8	20	40	20	8
    5	8	10	8	5
    PS : certaines sont orientées vers le nord d'autres vers le sud, mais cela devrait rester compréhensibles.

    Merci de ton intérêt

  6. #6
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 706
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 706
    Par défaut
    Bonjour,

    Comme souvent, on travaille avec des entiers, les matrices ont un coefficient de normalisation (ou de gain) qui ramène les résultats dans une gamme.

    Mathématiquement, ces matrice intègrent ces coefficients et ne se présentent alors que sous une unique forme.

    Mais informatiquement on cherche à minimiser les calculs d'où l'existence de formes approximatives variées. Par exemple, on pourra choisir les éléments entiers des matrices de telle manière que le coefficient de normalisation soit une puissance de 2 afin de pouvoir remplacer les divisions par des décalages.

    Salutations

  7. #7
    Membre averti
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Février 2020
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Février 2020
    Messages : 24
    Par défaut
    Salut,

    Mais justement, je ne vois pas deressemblance flagrante, de plus la N° 4 est obtenu par un calcul sur des entiers.

  8. #8
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 706
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 706
    Par défaut
    Bonjour,

    Sauf si je n'ai pas compris l'objectif, les matrices sont incomplètes sans le facteur de normalisation (ou de gain pour les détections de fronts ou les passe-haut).

    Les 1, 3 et sont des détections de fronts.

    La 4 est une moyenne pondérée donc un passe-bas (1/k = 414).

    Dans le cas d'une détection de front, on peut soumettre le filtre à un échelon unité dans le sens de la détection. Un échelon unité sur la première matrice donnera (9, 18,30, 18, 9)t soit 84 de contribution pour le point central et -84 pour l'échelon unité complémentaire Pour retrouver une gamme 0..l, il faudrait donc ajouter 84 puis diviser par 2x84. Mais dans le cas des détections on souhaite souvent avoir un gain.

    La matrice 2 est plus complexe car elle mélange de la détection et une moyenne centrée, mais il est possible que des signes manquent.

    Salutations

  9. #9
    Membre averti
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Février 2020
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Architecte de base de données

    Informations forums :
    Inscription : Février 2020
    Messages : 24
    Par défaut
    Merci de ces infos, je précise que ces matrices ont été trouvées sur le net sous le nom "Filtre de Sobel", c'est cela qui me trouble.

Discussions similaires

  1. recherche filtre flou gaussien
    Par gimlithedwarf dans le forum Langage
    Réponses: 4
    Dernier message: 01/08/2002, 23h32
  2. TADOTable et filtre
    Par GaL dans le forum C++Builder
    Réponses: 16
    Dernier message: 02/07/2002, 17h52
  3. Filtre passe Bande
    Par Mau dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 28/06/2002, 18h03
  4. Probleme de filtre dans bdd
    Par scorpiwolf dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/06/2002, 11h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo