Ce document décrit le modèle de traitement d’image de LaserBase. L’objectif est de comprendre son fonctionnement : quelles représentations existent, dans quel ordre la pipeline s’exécute et comment le programme passe de l’image RAW au G-code.
Ce n’est pas une spécification développeur. L’accent est mis sur un modèle mental utilisable et techniquement exact.
LaserBase ne repose pas uniquement sur le dither binaire.
Le système prend en charge plusieurs stratégies de traitement :
Pour cette raison, la question centrale n’est pas seulement de choisir un algorithme de dither, mais de savoir quelle représentation d’image le mode choisi produit et quel type de G-code en découle.
RAW est l’image source chargée.
Il est lié à :
Le crop n’est pas défini sur l’image déjà traitée, mais dans l’espace RAW.
Il s’agit de l’image déjà :
BASE dépend du mode.
Il n’est pas correct de l’enseigner comme toujours binaire.
En mode depth, le système conserve deux rasters traités :
La preview peut basculer entre les deux, et l’export est construit en deux passes.
L’utilisateur fournit :
Le programme ne dessine pas directement un raster à partir de cela. Il calcule un raster réel aligné sur ce que la machine peut pas à pas produire.
Si les lignes sur l’axe de pas ne peuvent être placées qu’à des intervalles précis, le pitch réel et le DPI effectif sont ajustés à cette géométrie autorisée.
Le DPI effectif est :
DPI effectif = 25.4 / real_pitch_mm
Il peut différer du DPI demandé.
Avant le traitement, le système décide :
Si le nombre requis de lignes ou de colonnes dépasse ce que l’image source peut fournir directement, la décision devient REPAIR. Sinon, elle est BASE.
rotate_90 est une transformation géométrique réelle.
Ce n’est pas une astuce de preview. Cela change l’orientation de l’image source. À cause de cela, les étapes suivantes travaillent déjà sur l’image RAW tournée :
Preview rotate back est une couche d’affichage séparée.
Elle transforme uniquement la vue. Elle ne modifie pas :
Les deux rotations restent donc distinctes :
rotate_90 = géométrie de traitementLe crop est défini sur l’image source afin que la découpe se fasse le plus tôt possible.
Cela signifie :
Avec un crop circulaire, la géométrie doit rester carrée. Cette règle est aussi imposée au niveau de l’interface.
Le mode de traitement est le choix central du système.
Il définit quelle représentation prend BASE, ce que signifie la preview et comment le G-code traduit les données raster en puissance et en mouvement.
Dans ce mode, le raster reste en niveaux de gris. Le générateur G-code mappe la tonalité du pixel vers des valeurs PWM.
Il ne s’agit pas d’une gravure on/off, mais d’un profil de puissance plus continu.
Les modes par diffusion d’erreur et ordonnés appartiennent à cette catégorie :
Ici, le résultat final est binaire. Au niveau G-code, un pixel reçoit soit une brûlure complète, soit aucune.
Hybrid n’est pas un mode de dither classique.
Il part d’une image en niveaux de gris et ajoute une correction de motif dépendante du ton. Elle est plus forte dans les tons moyens et plus faible aux extrêmes.
Son rôle est :
En pratique, Hybrid comble l’écart entre un grayscale trop lisse et un dither binaire trop dur. Il est utile quand la conservation des tons est importante, mais qu’un grayscale entièrement lisse ne fournit pas assez de structure.
Depth maintient deux branches séparées :
Chaque branche peut stocker son propre état de contrôle. La preview passe de l’une à l’autre et l’export produit deux passes.
Depth est utile lorsque le ton et la structure de points ne doivent pas être portés par le même raster. Par rapport à un grayscale simple, il offre un espace de travail séparé pour ces deux rôles.
Dans la pipeline, negative intervient tôt.
Cela signifie que les étapes ultérieures pour brightness, contrast, gamma et sharpen travaillent déjà dans l’espace tonal inversé.
Les deux agissent sur l’image de travail en niveaux de gris.
Gamma est une correction non linéaire dans l’espace tonal. Le système limite la valeur saisie à une plage autorisée et l’applique via une LUT.
Le sharpen est basé sur unsharp mask.
Les opérations miroir font partie des transformations d’image et s’exécutent après les étapes de modification des tons.
Threshold n’est pas un curseur universel.
Il n’affecte que le seuil utilisé par les modes binaires à diffusion d’erreur. En Bayer, halftone clustered, grayscale et hybrid, son rôle est différent ou matériellement sans effet.
Ce n’est pas un algorithme de dither séparé, mais une alternance de la direction de propagation de l’erreur d’une ligne à l’autre.
Son rôle :
Il s’agit d’une étape de nettoyage appliquée à une sortie raster binaire.
Ce n’est pas un filtre d’image général. Son objectif est de supprimer des pixels isolés qui ressortent de leur voisinage.
L’ordre logique est :
rotate_90 optionnelnegativecontrast + brightnessgammaradius + amount)mirror_x / mirror_yone_pixel_off optionnelLes conséquences principales sont :
rotate_90 est appliqué avant le cropnegative n’intervient pas après le ditheringCet ordre est important, car le comportement des contrôles en découle. Le même réglage produit des résultats différents selon l’endroit où il entre dans la pipeline.
La preview de droite est construite à partir de _right_view_mode et de
la branche traitée active.
Cette preview n’est pas toujours une image directe 1:1 de la gravure finale. En dither binaire et en depth, elle montre davantage la structure de traitement et le caractère du raster que la réponse finale du matériau.
En pratique, cela signifie :
Cela modifie uniquement l’interpolation d’affichage. L’image traitée n’est pas modifiée.
Le fullscreen utilise la même branche preview active que la vue normale à droite, mais à une échelle plus grande et plus facile à inspecter.
Les entrées sont :
Le système de recommandation agrège des enregistrements issus de la base.
Auto n’est pas seulement une formule de type “puissance proportionnelle à la vitesse”.
La logique combine deux types de recommandation :
Le résultat final peut combiner les deux.
Le fallback n’est pas une remontée hiérarchique arbitraire.
Le système :
Cela définit les limites du comportement de fallback.
En mode Auto, les valeurs recommandées de Speed et Max power sont liées à une base. Si l’utilisateur modifie l’une, l’autre varie autour de cette base.
La recommandation est la plus solide lorsqu’elle provient d’une correspondance exacte. En cas de fallback safe-stop, elle reste un point de départ plus protégé, mais moins directement adapté au matériau donné.
Le système de recommandation s’appuie sur les enregistrements stockés dans la base. Ces enregistrements ne se limitent pas à des données prédéfinies : l’utilisateur peut ajouter ses propres entrées.
Les données enregistrées peuvent être exportées et rechargées dans un autre environnement. Les fichiers de clés importés mettent à jour l’ensemble de données préparé centralement.
La formule d’overscan est :
overscan ≈ 1.15 × v² / (2a)
où :
v est la vitesse de scan en mm/sa est l’accélération de l’axe actif en mm/s²Le facteur 1.15 agit comme une marge de sécurité.
Du point de vue de l’export, il existe trois états :
En mode manual, la valeur saisie remplace le calcul automatique.
Ici, le générateur G-code mappe les valeurs de pixel vers une puissance continue :
power = s_min + (s_max - s_min) × tone
Pour cette raison, min_power agit comme borne basse du mappage tonal.
Dans les modes binaires, les pixels noirs reçoivent le niveau de puissance supérieur et les pixels blancs reçoivent zéro.
Dans ce cas, min_power n’est pas l’élément principal de contrôle de
l’évaluation binaire.
En mode depth, le programme :
La deuxième passe hérite aussi de certaines valeurs d’état d’export de la première, il ne s’agit donc pas de deux exports totalement indépendants.
L’export frame est plus qu’une simple case à cocher.
Quand frame est actif :
Avec un crop circulaire, la trajectoire frame est circulaire ; sinon elle est rectangulaire.
Enregistre l’image traitée actuellement active.
En mode depth, cela signifie que la sortie enregistrée n’est pas un “BASE” abstrait, mais la branche active à ce moment-là.
L’action d’enregistrement stocke également l’état du workspace basé sur des sidecars.
Contenu typique :
Reload reconstruit le workspace puis relance le traitement.
Pour cette raison, save/reload a une logique de session, pas seulement de fiche enregistrée.
Sender n’est pas seulement un flux brut.
Fonctions pertinentes :
Au niveau atelier, cela compte parce que la gestion du frame et le positionnement sont eux aussi des processus à plusieurs états dans Sender.
En bref :
rotate_90 est une opération géométrique réelleCela donne une image correcte et exploitable du fonctionnement de LaserBase.