Retinex

1 개요

이미지에서 빛이 닿지 않아 어두운 영역의 밝기를 증가시키는 알고리즘입니다.

2 알고리즘 상세 설명

이미지의 픽셀 값을 "조명의 밝기 X 빛에 대한 반사율" 로 정의했을 때 빛에 대한 반사율 값을 얻어 조명의 밝기에 무관한 이미지를 만들어 어두운 영역의 밝기를 증가시키는 알고리즘 입니다.

Source Result
Source Result
Fig. Retinex를 적용한 결과 이미지

3 파라미터 설정 및 사용 방법

후처리 과정에 사용하는 파라미터를 설정할 수 있습니다.

멤버함수 파라미터 설 명
SetOffset double f64Offset IN 오프셋 값을 설정합니다.
SetMinIntensityClampingRatio const Base::CMultiVar& mvMinIntensityClampingRatio IN 정규화 시 Clamping할 최소 강도 픽셀 개수 비율을 설정합니다.
SetMaxIntensityClampingRatio const Base::CMultiVar& mMaxIntensityClampingRatio IN 정규화 시 Clamping할 최대 강도 픽셀 개수 비율을 설정합니다.
SetMinNormalizationRange const Base::CMultiVar& mvMinValue IN 최소 정규화 범위를 설정합니다.
SetMaxNormalizationRange const Base::CMultiVar& mvMaxValue IN 최대 정규화 범위를 설정합니다.

4 예제 코드

CRetinex retinex;

CFLImage fliSourceImage;
CFLImage fliDestinationImage;

retinex.SetSourceImage(fliSourceImage);
retinex.SetDestinationImage(fliDestinationImage);
retinex.SetOffset(0.5);

CMultiVar<double> mvMinIntensityClampingRatio(0.01);
CMultiVar<double> mvMaxIntensityClampingRatio(0.01);

retinex.SetMinIntensityClampingRatio(mvMinIntensityClampingRatio);
retinex.SetMaxIntensityClampingRatio(mvMaxIntensityClampingRatio);

CMultiVar<double> mvMinNormalizationValue(0.);
CMultiVar<double> mvMaxNormalizationValue(255.);

retinex.SetMinNormalizationRange(mvMinNormalizationValue);
retinex.SetMaxNormalizationRange(mvMaxNormalizationValue);

retinex.Execute();
CRetinex retinex = new CRetinex();

CFLImage fliSourceImage = new CFLImage();
CFLImage fliDestinationImage = new CFLImage();

retinex.SetSourceImage(ref fliSourceImage);
retinex.SetDestinationImage(ref fliDestinationImage);
retinex.SetOffset(0.5);

CMultiVar<double> mvMinIntensityClampingRatio = new CMultiVar<double>(0.01);
CMultiVar<double> mvMaxIntensityClampingRatio = new CMultiVar<double>(0.01);

retinex.SetMinIntensityClampingRatio(mvMinIntensityClampingRatio);
retinex.SetMaxIntensityClampingRatio(mvMaxIntensityClampingRatio);

CMultiVar<double> mvMinNormalizationValue = new CMultiVar<double>(0.);
CMultiVar<double> mvMaxNormalizationValue = new CMultiVar<double>(255.);

retinex.SetMinNormalizationRange(mvMinNormalizationValue);
retinex.SetMaxNormalizationRange(mvMaxNormalizationValue);

retinex.Execute();
retinex = CRetinex()

fliSourceImage = CFLImage()
fliDestinationImage = CFLImage()

retinex.SetSourceImage(fliSourceImage)
retinex.SetDestinationImage(fliDestinationImage)
retinex.SetOffset(0.5)

mvMinIntensityClampingRatio = CMultiVar[Double](0.01)
mvMaxIntensityClampingRatio = CMultiVar[Double](0.01)

retinex.SetMinIntensityClampingRatio(mvMinIntensityClampingRatio)
retinex.SetMaxIntensityClampingRatio(mvMaxIntensityClampingRatio)

mvMinNormalizationValue = CMultiVar[Double](0.)
mvMaxNormalizationValue = CMultiVar[Double](255.)

retinex.SetMinNormalizationRange(mvMinNormalizationValue)
retinex.SetMaxNormalizationRange(mvMaxNormalizationValue)

retinex.Execute()