Divide

1 개요

스칼라 또는 이미지와의 나누기 연산을 수행하는 알고리즘입니다. 결과는 반올림 처리 되어 출력됩니다.

2 알고리즘 상세 설명

Source Scalar Value : (3, 5, 2)
Result
Source Result
Fig. Scalar 값(3, 5, 2)에 따른 결과

Source
Operand Result
Source Operand Operand result
Fig. Image 값에 따른 결과

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>);
      SetScalarValue(Base::CMultiVar<float>);
      SetScalarValue(Base::CMultiVar<int64_t>);
      SetScalarValue(Base::CMultiVar<int32_t>);
      SetScalarValue(Base::CMultiVar<uint32_t>);
      SetScalarValue(Base::CMultiVar<uint64_t>);
      
    • 예제 코드

      COperationDivide Divide;
      CFLImage fliSourceImage;
      CFLImage fliDestinationImage;
      
      // 지정된 경로에서 이미지 로드
      if(fliSourceImage.Load(L"../../ExampleImages/OperationDivide/FlowerWall.flif").IsFail())
      	break;
      
      Divide.SetSourceImage(fliSourceImage);
      Divide.SetDestinationImage(fliDestinationImage);
      // 스칼라 값 설정
      CMultiVar<double> mvScalar(3.000000, 5.000000, 2.000000);
      // 연산 방식 설정
      Divide.SetOperationSource(ImageProcessing::EOperationSource_Scalar);
      Divide.SetScalarValue(mvScalar);
      // 오버플로우 방법 설정
      Divide.SetOverflowMethod(EOverflowMethod_Clamping);
      
      // 알고리즘 수행
      if(Divide.Execute().IsFail())
      	break;
      
      // 수행된 결과 이미지를 저장
      if(fliDestinationImage.Save(L"../../ExampleImages/OperationDivide/Result.flif").IsFail())
      	break;
      
      COperationDivide Divide = new COperationDivide();
      CFLImage fliSourceImage = new CFLImage();
      CFLImage fliDestinationImage = new CFLImage();
      
      // 지정된 경로에서 이미지 로드
      if(fliSourceImage.Load("../../ExampleImages/OperationDivide/FlowerWall.flif").IsFail())
      	break;
      
      Divide.SetSourceImage(ref fliSourceImage);
      Divide.SetDestinationImage(ref fliDestinationImage);
      // 스칼라 값 설정
      CMultiVar<double> mvScalar = new CMultiVar<double>(3.000000, 5.000000, 2.000000);
      // 연산 방식 설정
      Divide.SetOperationSource(EOperationSource.Scalar);
      Divide.SetScalarValue(mvScalar);
      // 오버플로우 방법 설정
      Divide.SetOverflowMethod(EOverflowMethod.Clamping);
      
      // 알고리즘 수행
      if(Divide.Execute().IsFail())
      	break;
      
      // 수행된 결과 이미지를 저장
      if(fliDestinationImage.Save("../../ExampleImages/OperationDivide/Result.flif").IsFail())
      	break;
      
  3. 이미지 연산 설정

    • Operand 이미지를 설정합니다.

    • API

      SetOperandImage(Base::CFLImage);
      
    • 예제 코드

      COperationDivide Divide;
      CFLImage fliSourceImage;
      CFLImage fliOperandImage;
      CFLImage fliDestinationImage;
      
      // 지정된 경로에서 이미지 로드
      if(fliSourceImage.Load(L"../../ExampleImages/OperationDivide/FlowerWall.flif").IsFail())
      	break;
      if(fliOperandImage.Load(L"../../ExampleImages/OperationDivide/Moon.flif").IsFail())
      	break;
      
      Divide.SetSourceImage(fliSourceImage);
      // Operand 이미지 설정
      Divide.SetOperandImage(fliOperandImage);
      Divide.SetDestinationImage(fliDestinationImage);
      
      // 연산 방식 설정
      Divide.SetOperationSource(ImageProcessing::EOperationSource_Image);
      // 오버플로우 방법 설정
      Divide.SetOverflowMethod(EOverflowMethod_Clamping);
      
      // 알고리즘 수행
      if(Divide.Execute().IsFail())
      	break;
      
      // 수행된 결과 이미지를 저장
      if(fliDestinationImage.Save(L"../../ExampleImages/OperationDivide/Result.flif").IsFail())
      	break;
      
      COperationDivide Divide = new COperationDivide();
      CFLImage fliSourceImage = new CFLImage();
      CFLImage fliOperandImage = new CFLImage();
      CFLImage fliDestinationImage = new CFLImage();
      
      // 지정된 경로에서 이미지 로드
      if(fliSourceImage.Load("../../ExampleImages/OperationDivide/FlowerWall.flif").IsFail())
      	break;
      if(fliOperandImage.Load("../../ExampleImages/OperationDivide/Moon.flif").IsFail())
      	break;
      
      Divide.SetSourceImage(ref fliSourceImage);
      // Operand 이미지 설정
      Divide.SetOperandImage(ref fliOperandImage);
      Divide.SetDestinationImage(ref fliDestinationImage);
      
      // 연산 방식 설정
      Divide.SetOperationSource(EOperationSource.Image);
      // 오버플로우 방법 설정
      Divide.SetOverflowMethod(EOverflowMethod.Clamping);
      
      // 알고리즘 수행
      if(Divide.Execute().IsFail())
      	break;
      
      // 수행된 결과 이미지를 저장
      if(fliDestinationImage.Save("../../ExampleImages/OperationDivide/Result.flif").IsFail())
      	break;