Objectif : Améliorer la qualité des images diffusées sur les échographes produits par la société ECM et conserver une fréquence d’affichage correcte pour la visualisation.
La societe Echo Control Medical est basée à Angoulême, elle fabrique des échographes à ultrasons portatifs nommés ExaPad. Les images échographiques sont connues pour contenir un bruit specifique, le speckle, qui nuit à la qualité de l’image. Le but du stage etait d’améliorer la qualité des images diffusées sur leurs échographes. Nous avons pour cela developpé des algorithmes de lissage d’images implémentés d’abord en Python puis en language C, directement à l’intérieur des échographes.
Voici un exemple d’image sans traitement diffusée sur l’ExaPad
On voit que cette image est fortement bruitée. La difficulté du débruitage est d’essayer de lisser l’image sans toucher aux contours de l’image qui sont très importants. Un simple filtre moyenneur ne suffit pas.
Premier algorithme réalisé et implementé sur l’ExaPad: l’algorithme de moyennes non locales NLM
Nous avons commencé par effectuer un lissage des images à partir de l’algorithme de moyennes non locales.
Voici le resultat sur l’ExaPad, les paramètres de taille de fenêtre, patch et lissage sont réglables en direct grâce à une interface, ces paramètres devant être facilement ajustés suivant les choix de l’utilisateur.
Il s’avère que ce premier traitement a tendance à trop lisser l’image, certains détails de contour pertinents pour l’expert utilisateur n’apparaissant plus clairement. Nous avons donc, dans un deuxième temps, developpé un algorthme de rehaussement de contours qui consiste à récupérer les hautes fréquences de l’image NLM et à en rajouter une partie à l’image NLM.
Après implementation sur l’ExaPad, on obtient ce resultat:
Algorithme de rehaussement de contours
Comme précédemment, les paramètres de l’algorithme sont reglables par l’utilisateur en direct.
La qualité de notre image est déjà grandement ameliorée, mais l’image parait peu naturelle pour l’utilisateur. Pour redonner un peu de grain à cette dernière, nous réinsérons dans l’image lissée un peu du bruit d’origine de l’image
Algorithme de rajout de bruit
On peut récupérer le bruit d’origine en soustrayant à l’image bruitée l’image bruitée filtrée par un filtre Gaussien. On ajoute ensuite le résultat de cette opération à l’image NLM. Il est alors possible de jouer sur la taille du filtre uniforme et le pourcentage de bruit rajouté à l’image NLM pour obtenir différents résultats.
Implémentation en langage C pour ExaPAd :
L’algorithme doit s’adapter aux pratiques de l’expert : un vétérinaire va préférer travailler avec des images fortement bruitées alors qu’un autre peut préférer travailler avec des images très lissées. Il est donc essentiel d’offrir aux praticiens le plus de contrôle possible au niveau de l’image avec pour chaque fonctionnalités des paramètres modulables en direct.
Voici un comparatif de l’affichage sur l’ExaPad des images sans traitement et avec le traitement décrit ci-dessus, en choisissant les paramètres qui me semblent les plus appropriés
Image bruitée | Image lissée |
---|---|
Optimisation du temps de calcul
Pour un visuel satisfaisant, il est nécessaire de pouvoir afficher au moins 20 images par seconde. Dans la suite de traitement proposé, c’est l’algorithme des moyennes non locales qui consomme le plus de temps de calcul. Par exemple, pour une taille de fenêtre de recherche de 4, l’ExaPad affiche une image toute les 0.3 secondes, et donne ce type de résultat :
L’optimisation du code C devrait permettre de diviser par 4 ou 5 les temps de calcul de notre première implémentation et donc d’approcher la fréquence d’affichage requise.
Conclusion
Avec les algorithmes implementés sur l’ExaPad, nous sommes arrivés à la qualité d’image qui était atendue chez ECM. La fréquence d’affichage reste trop élevée mais une bonne optimisation du code C devrait permettre d’atteindre l’objectif fixé.