Radon Transform pour Java

Vous pouvez lire la théorie de cette transformation sur ce lien de Wikipédia.

Désignation

J'ai d'abord entendu le nom de cette transformation en lisant l'article que j'ai acheté à l'IEEE pour obtenir une grille d'échiquier pour la programmation d'une fonction dans l'application ChessPdfBrowser.

Article IEEE .


Ceci est une bibliothèque avec mon implémentation de cette transformation pour Java.


Le code de la bibliothèque est également partagé sur GitHub. Lien vers GitHub .

Description du code

Étant donné que le traitement prend du temps, la bibliothèque fournit un exécuteur qui renvoie un futur, afin d'éviter de bloquer l'exécution de l'appelant pendant que le traitement est en cours.

Les calculs parallèles sont facilement pris en charge pour l'utilisation de plusieurs threads.


La classe RadonTransformCalculator calcule les valeurs de transformation et les stocke dans un tableau bidimensionnel.


Après traitement, les valeurs de transformation peuvent être analysées en utilisant les indices de tableau pour y accéder.

Ces indices peuvent être facilement traduits en un élément (Rho, Theta) (, ) en appelant la fonction sur l'objet résultat, qui est de type RadonTransformResult.


Il est également possible d'obtenir les N valeurs maximales, ce qui donne la possibilité de rejeter les doublons (différents (, ) qui sont très proches) grâce à une tolérance, et un filtre peut également être appliqué en même temps sur (, ) pour jeter au préalable ceux qui ne répondent pas à nos conditions.

Par exemple, si vous recherchez des lignes presque horizontales ou verticales, et qu'il y a une diagonale avec une valeur très élevée, alors cette valeur pourrait être rejetée.

Windows

Transformation du radon pour Java (2026)

Télécharger

Exemples

image
image

Un exemple est inclus dans le fichier zip contenant le code de la bibliothèque, que nous expliquerons ci-dessous.

Cet exemple vise à obtenir les côtés du carré qui définit l'échiquier dans l'image cible.

L'image d'entrée pour le calcul de la transformée de Radon est une détection de bord (type Canny) de l'image cible.


La transformée est calculée pour cette image de type Canny, puis les quatre lignes principales sont obtenues.

Ceci est réalisé en appelant la fonction pour obtenir les valeurs les plus élevées de la transformée, en la passant quatre comme le nombre d'éléments à rechercher.

En outre, une tolérance appropriée de (, ) est également passée pour éliminer les doublons, et un filtre pour éliminer les valeurs qui ne sont pas presque horizontales ou verticales.


Dans l'exemple, ces quatre lignes qui définissent les côtés de l'échiquier sont obtenues avec succès avec ces outils.

Avec la bibliothèque, les intersections de ces lignes peuvent être calculées, obtenant ainsi les sommets.

Un trieur de sommet est également invoqué de sorte que lorsque les lignes sont tracées séquentiellement, l'effet "bowtie" ne se produit pas.


Cet ordre de sommet se fait en itérant à travers les permutations de l'ordre de sommet jusqu'à ce que le premier qui répond au critère d'adéquation soit trouvé.

Le critère choisi est que les sommets dans cet ordre définissent un polygone convexe (comme le carré que nous voulons détecter).

Pour ce faire, il est nécessaire de vérifier que la rotation des sommets est toujours dans le même sens (sens horaire ou antihoraire).

Pour obtenir le sens de rotation de trois sommets consécutifs, il suffit de calculer le signe du produit croisé des deux vecteurs définis par ces trois sommets.

Par conséquent, la condition nécessaire et suffisante pour définir un polygone convexe est que tous les sous-ensembles ordonnés de trois sommets consécutifs (en supposant la liste circulaire) ont le même signe dans le produit croisé calculé de cette manière.


Après ces calculs, nous dessinons les bords qui relient les sommets, et nous obtenons l'image finale.

Mission accomplie!


image
image

Téléchargements