BitShift

1.1.1 개요

스칼라 또는 이미지와의 BitShift 연산을 수행하는 알고리즘입니다. 이미지 픽셀 값을 스칼라 또는 대응되는 이미지 픽셀 값만큼 정한 방향으로 비트를 이동시킵니다.

1.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 SetShiftDirection(EShiftDirection eShiftDirection = EShiftDirection_Left)
      
      • Shift 방향을 설정합니다. 기본 값 : EShiftDirection_Left
  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>);
      
    • 예제 코드

      COperationBitShift BitShift;
      CFLImage fliSourceImage;
      CFLImage fliDestinationImage;
      
      // 지정된 경로에서 이미지 로드
      if(fliSourceImage.Load(L"../../ExampleImages/OperationShift/Flower.flif").IsFail())
      	break;
      
      BitShift.SetSourceImage(fliSourceImage);
      BitShift.SetDestinationImage(fliDestinationImage);
      // 연산 방식 설정
      BitShift.SetOperationSource(ImageProcessing::EOperationSource_Scalar);
      // Shift 방향 설정
      BitShift.SetShiftDirection(COperationBitShift::EShiftDirection_Right);
      // 스칼라 값 설정
      CMultiVar<double> mvScalar(3.000000, 5.000000, 2.000000);
      
      BitShift.SetScalarValue(mvScalar);
      
      // 알고리즘 수행
      if(BitShift.Execute().IsFail())
      	break;
      
      // 수행된 결과 이미지를 저장
      if(fliDestinationImage.Save(L"../../ExampleImages/OperationShift/Result.flif").IsFail())
      	break;
      
      COperationBitShift BitShift = new COperationBitShift();
      CFLImage fliSourceImage = new CFLImage();
      CFLImage fliDestinationImage = new CFLImage();
      
      // 지정된 경로에서 이미지 로드
      if(fliSourceImage.Load("../../ExampleImages/OperationShift/Flower.flif").IsFail())
      	break;
      
      BitShift.SetSourceImage(ref fliSourceImage);
      BitShift.SetDestinationImage(ref fliDestinationImage);
      // 연산 방식 설정
      BitShift.SetOperationSource(EOperationSource.Scalar);
      // Shift 방향 설정
      BitShift.SetShiftDirection(COperationBitShift.EShiftDirection.Right);
      // 스칼라 값 설정
      CMultiVar<double> mvScalar = new CMultiVar<double>(3.000000, 5.000000, 2.000000);
      
      BitShift.SetScalarValue(mvScalar);
      
      // 알고리즘 수행
      if(BitShift.Execute().IsFail())
      	break;
      
      // 수행된 결과 이미지를 저장
      if(fliDestinationImage.Save("../../ExampleImages/OperationShift/Result.flif").IsFail())
      	break;
      
  3. 이미지 연산 설정

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

    • API

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

      COperationBitShift BitShift;
      CFLImage fliSourceImage;
      CFLImage fliOperandImage;
      CFLImage fliDestinationImage;
      
      // 지정된 경로에서 이미지 로드
      if(fliSourceImage.Load(L"../../ExampleImages/OperationShift/Flower.flif").IsFail())
      	break;
      if(fliOperandImage.Load(L"../../ExampleImages/OperationShift/Moon.flif").IsFail())
      	break;
      
      BitShift.SetSourceImage(fliSourceImage);
      // Operand 이미지 설정
      BitShift.SetOperandImage(fliOperandImage);
      BitShift.SetDestinationImage(fliDestinationImage);
      
      // 연산 방식 설정
      BitShift.SetOperationSource(ImageProcessing::EOperationSource_Image);
      // Shift 방향 설정
      BitShift.SetShiftDirection(COperationBitShift::EShiftDirection_Right);
      
      // 알고리즘 수행
      if(BitShift.Execute().IsFail())
      	break;
      
      // 수행된 결과 이미지를 저장
      if(fliDestinationImage.Save(L"../../ExampleImages/OperationShift/Result.flif").IsFail())
      	break;
      
      COperationBitShift BitShift = new COperationBitShift();
      CFLImage fliSourceImage = new CFLImage();
      CFLImage fliOperandImage = new CFLImage();
      CFLImage fliDestinationImage = new CFLImage();
      
      // 지정된 경로에서 이미지 로드
      if(fliSourceImage.Load("../../ExampleImages/OperationShift/Flower.flif").IsFail())
      	break;
      if(fliOperandImage.Load("../../ExampleImages/OperationShift/Moon.flif").IsFail())
      	break;
      
      BitShift.SetSourceImage(ref fliSourceImage);
      // Operand 이미지 설정
      BitShift.SetOperandImage(ref fliOperandImage);
      BitShift.SetDestinationImage(ref fliDestinationImage);
      
      // 연산 방식 설정
      BitShift.SetOperationSource(EOperationSource.Image);
      // Shift 방향 설정
      BitShift.SetShiftDirection(COperationBitShift.EShiftDirection.Right);
      
      // 알고리즘 수행
      if(BitShift.Execute().IsFail())
      	break;
      
      // 수행된 결과 이미지를 저장
      if(fliDestinationImage.Save("../../ExampleImages/OperationShift/Result.flif").IsFail())
      	break;