이미지 처리 분야에서 밝기 조정은 가장 일반적인 작업 중 하나입니다. 전통적인 방법은 일반적으로 선형 또는 감마 보정을 사용하여 밝기 조정을 달성하지만 이러한 방법은 과도하게 밝거나 어두운 영역을 다룰 때 세부 사항이나 색 왜곡을 유발하는 경향이 있습니다. 이 기사에서는 쌍곡선 코사인 기능 (COSH)을 사용하여 이미지의 밝기를보다 부드럽고 섬세하게 조정하기 위해 비선형 밝기 조정 모델을 구축하는 방법을 소개합니다.
쌍곡선 코사인 기능은 다음과 같이 정의됩니다.
그 모양은 포물선과 비슷하며 제로 포인트 주변에서 천천히 변화하며 제로 포인트에서 기하 급수적으로 자랍니다. 이 기능을 사용하여 밝기 조정 기능을 설계하여 중간 밝기 세그먼트를 원활하게 변경할 수 있으며 어둡고 밝은 영역이 더 명백하지만 너무 크게 조정되지는 않습니다.
원래 픽셀 밝기가 가정 해보십시오 , [0,1] 간격으로 정규화되었습니다. 목표는 밝기 변형 함수를 구성하는 것입니다 :
안에:
곡선의 가파른 성을 제어할수록 값이 클수록 비선형 성이 더 명백합니다.
조정 된 기준 밝기 지점을 제어합니다.
이 모델은 다음을 보장합니다.
언제 , .
밝기는 기준점 근처에서 부드럽게 변하고 기준점에서 멀리 떨어져있을 때 더 조정 가능합니다.
조정이 완료된 후 결과를 [0,1]에 다시 매핑 한 다음 픽셀 값으로 다시 매핑하십시오.
다음은 Grayscale 이미지 밝기의 COSH 변환 과정을 시뮬레이션하는 PHP의 함수입니다. 이 예에서는 imageCreatefromjpeg 및 ImageJpeg 함수가 사진을 작동하는 데 사용됩니다.
<?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);
?>
코드의 이미지 경로는 https://gitbox.net/images/sample.jpg를 사용하여 교체 테스트를 용이하게합니다.
매개 변수 A 및 B를 조정함으로써 밝기 조정의 효과를 제어 할 수 있습니다.
이 방법은 특히 명세서 및 어두운 영역의 상세한 비선형 처리가 필요한 시나리오에 적합합니다.
물론 실제 애플리케이션에서는 색상 공간의 채널 별 조정으로 확장 할 수도 있습니다.