Signed Square Difference

1 개요

스칼라 또는 이미지와의 Signed Square Difference 연산을 수행하는 알고리즘입니다. 이미지 픽셀값을 스칼라 또는 대응하는 이미지 픽셀값과의 부호 정보를 보존한 차이의 제곱을 구하는 연산입니다.

2 알고리즘 상세 설명

Source Scalar Value : (120)
Result
Source Result
Fig. Scalar 값에 따른 결과 비교 (Wrapping Overflow Method)

Source
Operand Result
Source Operand Operand result
Fig. Image 값에 따른 결과 비교 (Clamping Overflow Method)

Signed Square Difference 알고리즘은 각 채널에 대해 Signed Square Difference 연산을 수행합니다. 스칼라 연산과 이미지 연산을 지원합니다.

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

  1. 오버플로우 처리 방법 설정

    • API
      const CResult SetOverflowMethod(EOverflowMethod eOverflowMethod = EOverflowMethod_Clamping)
      
      • 오버플로우 처리 방법을 설정합니다. 기본 값 : EOverflowMethod_Clamping
      • EOverflowMethod_Clamping
        • 자료형의 표현 가능한 범위를 넘어서면 표현 가능한 범위만큼의 값으로 설정됩니다.
      • EOverflowMethod_Wrapping
        • 표현 가능한 범위를 넘어섰을 때 별도의 처리를 하지 않습니다.
  2. 스칼라 연산 설정

    • Source 픽셀의 각 채널에 대해 Scalar 연산을 수행할 Scalar 값을 설정합니다.
    • API
      SetScalarValue(Base::CMultiVar<double>);
      
  3. 이미지 연산 설정

    • Operand 이미지를 설정합니다.
    • API
      SetOperandImage(Base::CFLImage);
      

4 예제 코드

Scalar 연산

COperationSignedSquareDifference operationSignedSquareDifference;

CFLImage fliSourceImage;
CFLImage fliDestinationImage;
CMultiVar<double> mulVarScalar;

fliSourceImage.Load("../../ExampleImages/OperationSignedSquareDifference/Gradation.flif");

operationSignedSquareDifference.SetSourceImage(fliSourceImage);
operationSignedSquareDifference.SetDestinationImage(fliDestinationImage);
operationSignedSquareDifference.SetOperationSource(EOperationSource_Scalar);
operationSignedSquareDifference.SetScalarValue(mulVarScalar);
operationSignedSquareDifference.SetOverflowMethod(EOverflowMethod_Wrapping);

operationSignedSquareDifference.Execute();
COperationSignedSquareDifference operationSignedSquareDifference = new COperationSignedSquareDifference();

CFLImage fliSourceImage = new CFLImage();
CFLImage fliDestinationImage = new CFLImage();
CMultiVar<double> mulVarScalar = new CMultiVar<double>();

fliSourceImage.Load("../../ExampleImages/OperationSignedSquareDifference/siamesecat3ch.flif");

operationSignedSquareDifference.SetSourceImage(ref fliSourceImage);
operationSignedSquareDifference.SetDestinationImage(ref fliDestinationImage);
operationSignedSquareDifference.SetOperationSource(EOperationSource.Scalar);
operationSignedSquareDifference.SetScalarValue(mulVarScalar);
operationSignedSquareDifference.SetOverflowMethod(EOverflowMethod.Wrapping);

operationSignedSquareDifference.Execute();

Image 연산

COperationSignedSquareDifference operationSignedSquareDifference;

CFLImage fliSourceImage;
CFLImage fliOperandImage;
CFLImage fliDestinationImage;
fliSourceImage.Load("../../ExampleImages/OperationSignedSquareDifference/Valley1.flif");
fliOperandImage.Load("../../ExampleImages/OperationSignedSquareDifference/Valley2.flif");

operationSignedSquareDifference.SetSourceImage(fliSourceImage);
operationSignedSquareDifference.SetOperandImage(fliOperandImage);
operationSignedSquareDifference.SetDestinationImage(fliDestinationImage);
operationSignedSquareDifference.SetOperationSource(EOperationSource_Image);
operationSignedSquareDifference.SetOverflowMethod(EOverflowMethod_Clamping);

operationSignedSquareDifference.Execute();
COperationSignedSquareDifference operationSignedSquareDifference = new COperationSignedSquareDifference();

CFLImage fliSourceImage = new CFLImage();
CFLImage fliOperandImage = new CFLImage();
CFLImage fliDestinationImage = new CFLImage();
fliSourceImage.Load("../../ExampleImages/OperationSignedSquareDifference/Valley1.flif");
fliOperandImage.Load("../../ExampleImages/OperationSignedSquareDifference/Valley2.flif");

operationSignedSquareDifference.SetSourceImage(ref fliSourceImage);
operationSignedSquareDifference.SetOperandImage(ref fliOperandImage);
operationSignedSquareDifference.SetDestinationImage(ref fliDestinationImage);
operationSignedSquareDifference.SetOperationSource(EOperationSource.Image);
operationSignedSquareDifference.SetOverflowMethod(EOverflowMethod.Clamping);

operationSignedSquareDifference.Execute();