Deutsch   English   Français   Italiano  
<vml6k9$31l7r$1@dont-email.me>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: news.eternal-september.org!eternal-september.org!.POSTED!not-for-mail
From: efji <efji@efi.efji>
Newsgroups: fr.sci.maths
Subject: =?UTF-8?Q?Re=3A_Alg=C3=A8bre_lin=C3=A9aire_et_string_art?=
Date: Mon, 20 Jan 2025 10:56:23 +0100
Organization: A noiseless patient Spider
Lines: 86
Message-ID: <vml6k9$31l7r$1@dont-email.me>
References: <A9bEoEV28vfRo7310cGKP1UxNmk@jntp>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Injection-Date: Mon, 20 Jan 2025 10:56:25 +0100 (CET)
Injection-Info: dont-email.me; posting-host="d39cf2d58fa28913c1e85b068908a2da";
	logging-data="3200251"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX19HUK8G3RT4TxREP/bkJiI+"
User-Agent: Mozilla Thunderbird
Cancel-Lock: sha1:xfo2ioUz31SYkHrOCOtPXuuFl5U=
In-Reply-To: <A9bEoEV28vfRo7310cGKP1UxNmk@jntp>
Content-Language: fr, en-US

Amusant, je n'avais jamais entendu parler de ça.

Le 19/01/2025 à 12:00, Julien Arlandis a écrit :
> Bonjour,
> 
> J'essaye de développer un algorithme rapide et efficace pour représenter 
> des images en niveaux de gris par le string art. Il s'agit de relier un 
> ensemble de points (généralement matérialisés par des clous plantés dans 
> une planche) par un fil tendu jusqu'à s'approcher au plus près de 
> l'image désirée. Pour la suite, on considèrera que les points sont 
> régulièrement espacés sur un cercle de rayon R.
> 
> Intuitivement, on peut être tenté de modéliser le problème par un espace 
> vectoriel constitué des N(N-1)/2 segments formés par chaque paire de 
> points. Cette idée est plus rigoureusement exprimée dans cette vidéo :
> 
> <https://www.youtube.com/watch?v=WGccIFf6MF8>

La vidéo explique très bien tout ce qu'il faut savoir de l'approche 
"directe", de type algèbre linéaire, et dit pourquoi ça ne marche pas 
bien. Elle propose à la fin un algo qui marche raisonnablement, mais on 
pense tout de suite au scanner médical et à la transformée de Radon.

https://www.youtube.com/watch?v=dBlSmg5T13M

Bingo! la seconde vidéo développe la méthode utilisant la transformée de 
Radon de façon super claire. Problem solved. Je ne pense pas qu'on 
puisse faire mieux.

Merci d'avoir indiqué cette chaine youtube qui contient plein de choses 
intéressantes, mais hélas rien sur les nombres complexes pour les 
débiles mentaux :)

> 
> Sous cette approche, le problème se modélise par l'équation matricielle :
> somme(a_i * x_i) = b
> où a_i est le i ème vecteur (image matricielle du segment i)
> x_i est le nombre de fils reliant le segment i
> b l'image à atteindre.
> Sachant que la famille de vecteurs a_i ne forment pas une famille 
> génératrice complète, (il est facile à comprendre qu'une image 
> constituée d'un cadre blanc périphérique ne pourra pas être générée sans 
> assombrir la partie blanche), quelle est la limite et la pertinence de 
> cette approche ?

Non, ce n'est pas la bonne approche pour deux raisons, bien expliquées 
dans la video :

1/ le passage d'un "fil" à une ligne de pixels ne doit pas se faire 
naïvement car sinon on privilégie certaines directions. C'est le même 
problème que l'aliasing en image. La vidéo propose une sorte de profil 
élargi des fils permettant de traiter ce problème de façon heuristique 
et "perceptive".

2/ même si on néglige le point 1, le problème n'est pas linéaire car on 
doit chercher des a_i dans {0,1} et pas dans \R. Résoudre de façon 
classique, par moindres carrés, le problème linéaire surdéterminé que tu 
indiques va donner des a_i réels quelconques, y compris des négatifs qui 
n'ont pas de sens. Minimiser ||somme(a_i * x_i) - b||^2 avec la 
contrainte a_i = 0 ou 1 est un problème appelé "bang-bang" très 
difficile à résoudre, qui a plein de mauvaises propriétés (en 
particulier il est non convexe).

> 
> Pour ma part j'ai commencé à coder une méthode itérative qui consiste à 
> partir d'un point arbitraire pour relier le point dont le segment 
> s'approche au plus près de l'image à construire. Ce n'est pas assez 

Ca a peu de chances de marcher. On doit même pouvoir construire des 
images pour lesquelles ça ne marche pas du tout. Et puis "le segment qui 
s'approche au plus près" ne doit pas être simple à trouver, sauf à 
tester tout exhaustivement. Ensuite il faut soustraire le segment choisi 
de l'image et tout recommencer pour l'itération suivante. Un bel algo en 
n^3 :)

> satisfaisant car en comparant le résultat avec d'autres programmes, le 
> rendu est légèrement moins esthétique.
> Vous pouvez essayer l'un de ces programmes en ligne :
> 
> <https://halfmonty.github.io/StringArtGenerator/>
> 
> 


-- 
F.J.