Position actuelle: Accueil> Derniers articles> Utilisez COSH pour implémenter le modèle de réglage de la luminosité dans le traitement d'image

Utilisez COSH pour implémenter le modèle de réglage de la luminosité dans le traitement d'image

gitbox 2025-05-28

Dans le domaine du traitement de l'image, l'ajustement de la luminosité est l'une des opérations les plus courantes. Les méthodes traditionnelles utilisent généralement une correction linéaire ou gamma pour obtenir un ajustement de la luminosité, mais ces méthodes ont tendance à provoquer une perte de détails ou une distorsion des couleurs lorsqu'ils traitent des zones excessivement lumineuses ou sombres. Cet article présentera comment utiliser la fonction de cosinus hyperbolique (COSH) pour construire un modèle de réglage de la luminosité non linéaire pour ajuster la luminosité de l'image plus douce et délicatement.


1. Introduction à la fonction COSH

La fonction de cosinus hyperbolique est définie comme:

cosh ? ( x ) = e x + e ? x 2 \cosh(x) = \frac{e^x + e^{-x}}{2}

Sa forme ressemble à une parabole, changeant lentement autour du point zéro, et s'éloignant de façon exponentielle du point zéro. En utilisant cette fonctionnalité, nous pouvons concevoir une fonction de réglage de la luminosité pour faire changer en douceur le segment de luminosité moyen, et les zones sombres et brillantes s'adaptent plus évidentes, mais pas trop radicalement.


2. Conception du modèle de réglage de la luminosité

Supposons que la luminosité du pixel d'origine soit I I , normalisé à l'intervalle [0,1]. Le but est de construire une fonction de transformation de luminosité L ( I ) L(I) :

L ( I ) = cosh ? ( a ? ( I ? b ) ) cosh ? ( a ? b ) L(I) = \frac{\cosh(a \cdot (I - b))}{\cosh(a \cdot b)}

dans:

  • a > 0 a > 0 contrôle la pente de la courbe, plus la valeur est grande, plus la non-linéarité est évidente.

  • b [ 0 , 1 ] b \in [0,1] contrôle le point de luminosité de référence ajusté.

Ce modèle garantit:

  • quand I = b I = b Quand , L ( I ) = 1 L(I) = 1 et 1

  • La luminosité change bien près du point de référence et est plus réglable lorsqu'elle est loin du point de référence.

Une fois le réglage terminé, ramenez le résultat à [0,1], puis partez à la valeur du pixel.


3. Exemple de code d'implémentation PHP

Ce qui suit est une fonction de PHP pour simuler le processus de transformation COSH de la luminosité de l'image en niveaux de gris. Dans l'exemple, les fonctions ImageCreateFromJPEG et ImageJPEG sont utilisées pour faire fonctionner des images.

 <?php
function adjustBrightnessCosh($inputFile, $outputFile, $a = 5, $b = 0.5) {
    // Lire l&#39;image
    $img = imagecreatefromjpeg('https://gitbox.net/images/sample.jpg');
    if (!$img) {
        die('Impossible de charger l&#39;image');
    }

    $width = imagesx($img);
    $height = imagesy($img);

    // Repères normalisés pré-calculéscoshvaleur
    $denominator = cosh($a * $b);

    for ($y = 0; $y < $height; $y++) {
        for ($x = 0; $x < $width; $x++) {
            $rgb = imagecolorat($img, $x, $y);
            $r = ($rgb >> 16) & 0xFF;
            $g = ($rgb >> 8) & 0xFF;
            $bVal = $rgb & 0xFF;

            // Calculer la luminosité(灰度valeur)
            $I = ($r + $g + $bVal) / (3 * 255);

            // Formule de réglage de la luminosité
            $L = cosh($a * ($I - $b)) / $denominator;

            // Ramener[0,1]
            // Pour s&#39;assurer qu&#39;il n&#39;y a pas de débordement,VolontéLRediffusion
            $L = min(max($L, 0), 2); // Empêcher hors de portée
            $L = $L / 2;

            // NouveauRGBvaleur
            $newVal = intval($L * 255);
            $newVal = min(max($newVal, 0), 255);

            // Couleurs recombinantes,Garder le gris
            $newColor = imagecolorallocate($img, $newVal, $newVal, $newVal);
            imagesetpixel($img, $x, $y, $newColor);
        }
    }

    // Enregistrer les résultats
    imagejpeg($img, $outputFile);
    imagedestroy($img);
}

// Fonctions d&#39;assistancecoshaccomplir
function cosh($x) {
    return (exp($x) + exp(-$x)) / 2;
}

// Exemple d&#39;appel
adjustBrightnessCosh('input.jpg', 'output.jpg', 5, 0.5);
?>

4. Description

  • Le chemin d'image du code utilise https://gitbox.net/images/sample.jpg pour faciliter les tests de remplacement.

  • En ajustant les paramètres A et B, l'effet du réglage de la luminosité peut être contrôlé.

  • Cette méthode est particulièrement adaptée aux scénarios où un traitement non linéaire détaillé des zones claires et sombres est nécessaire.

  • Bien sûr, dans les applications réelles, il peut également être étendu au réglage canal par canal de l'espace colorimétrique.