현재 위치: > 최신 기사 목록> COSH를 사용하여 이미지 처리에서 밝기 조정 모델을 구현하십시오.

COSH를 사용하여 이미지 처리에서 밝기 조정 모델을 구현하십시오.

gitbox 2025-05-28

이미지 처리 분야에서 밝기 조정은 가장 일반적인 작업 중 하나입니다. 전통적인 방법은 일반적으로 선형 또는 감마 보정을 사용하여 밝기 조정을 달성하지만 이러한 방법은 과도하게 밝거나 어두운 영역을 다룰 때 세부 사항이나 색 왜곡을 유발하는 경향이 있습니다. 이 기사에서는 쌍곡선 코사인 기능 (COSH)을 사용하여 이미지의 밝기를보다 부드럽고 섬세하게 조정하기 위해 비선형 밝기 조정 모델을 구축하는 방법을 소개합니다.


1. COSH 기능 소개

쌍곡선 코사인 기능은 다음과 같이 정의됩니다.

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

그 모양은 포물선과 비슷하며 제로 포인트 주변에서 천천히 변화하며 제로 포인트에서 기하 급수적으로 자랍니다. 이 기능을 사용하여 밝기 조정 기능을 설계하여 중간 밝기 세그먼트를 원활하게 변경할 수 있으며 어둡고 밝은 영역이 더 명백하지만 너무 크게 조정되지는 않습니다.


2. 밝기 조정 모델 설계

원래 픽셀 밝기가 가정 해보십시오 I I , [0,1] 간격으로 정규화되었습니다. 목표는 밝기 변형 함수를 구성하는 것입니다 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)}

안에:

  • a > 0 a > 0 곡선의 가파른 성을 제어할수록 값이 클수록 비선형 성이 더 명백합니다.

  • b [ 0 , 1 ] b \in [0,1] 조정 된 기준 밝기 지점을 제어합니다.

이 모델은 다음을 보장합니다.

  • 언제 I = b I = b , L ( I ) = 1 L(I) = 1 .

  • 밝기는 기준점 근처에서 부드럽게 변하고 기준점에서 멀리 떨어져있을 때 더 조정 가능합니다.

조정이 완료된 후 결과를 [0,1]에 다시 매핑 한 다음 픽셀 값으로 다시 매핑하십시오.


3. PHP 구현 코드 예제

다음은 Grayscale 이미지 밝기의 COSH 변환 과정을 시뮬레이션하는 PHP의 함수입니다. 이 예에서는 imageCreatefromjpegImageJpeg 함수가 사진을 작동하는 데 사용됩니다.

 <?php
function adjustBrightnessCosh($inputFile, $outputFile, $a = 5, $b = 0.5) {
    // 이미지를 읽으십시오
    $img = imagecreatefromjpeg('https://gitbox.net/images/sample.jpg');
    if (!$img) {
        die('이미지를로드 할 수 없습니다');
    }

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

    // 사전 계산 된 정규화 된 벤치 마크cosh값
    $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;

            // 밝기를 계산합니다(灰度값)
            $I = ($r + $g + $bVal) / (3 * 255);

            // 밝기 조정 공식
            $L = cosh($a * ($I - $b)) / $denominator;

            // 다시지도[0,1]
            // 오버플로가 없는지 확인합니다,할 것이다L재조정
            $L = min(max($L, 0), 2); // 범위를 방지하십시오
            $L = $L / 2;

            // 새로운RGB값
            $newVal = intval($L * 255);
            $newVal = min(max($newVal, 0), 255);

            // 색상 재조합,회색으로 유지하십시오
            $newColor = imagecolorallocate($img, $newVal, $newVal, $newVal);
            imagesetpixel($img, $x, $y, $newColor);
        }
    }

    // 결과를 저장하십시오
    imagejpeg($img, $outputFile);
    imagedestroy($img);
}

// 도우미 기능cosh성취하다
function cosh($x) {
    return (exp($x) + exp(-$x)) / 2;
}

// 전화 예제
adjustBrightnessCosh('input.jpg', 'output.jpg', 5, 0.5);
?>

4. 설명

  • 코드의 이미지 경로는 https://gitbox.net/images/sample.jpg를 사용하여 교체 테스트를 용이하게합니다.

  • 매개 변수 AB를 조정함으로써 밝기 조정의 효과를 제어 할 수 있습니다.

  • 이 방법은 특히 명세서 및 어두운 영역의 상세한 비선형 처리가 필요한 시나리오에 적합합니다.

  • 물론 실제 애플리케이션에서는 색상 공간의 채널 별 조정으로 확장 할 수도 있습니다.