Integral Image
1 개요
적분합 이미지를 계산하는 알고리즘으로, 이미지의 특정 영역에 대한 누적값을 효율적으로 계산합니다.
2 알고리즘 상세 설명
결과 이미지 크기
ROI(Region of Interest)는 직사각형(Rect)만 지원하며, 결과 이미지는 ROI의 크기에 가로와 세로 각각 1씩 더해진 크기로 출력됩니다.
지원 자료형
결과 이미지는 6개의 자료형을 지원하며, 이미지의 크기 및 값에 따라 적분합의 결과가 자료형의 표현 범위를 초과하는 경우 오버플로우가 발생할 수 있으므로 적절한 자료형을 사용자가 선택해야 합니다.
결과 값의 범위에 따라 아래 자료형을 선택합니다.
Int32
,Int64
Uint32
,Uint64
Float32
,Float64
Direction (적분 방향)
Direction
파라미터에 따라 적분 방향을 설정합니다.
- XY: X축과 Y축 모두 누적. 좌측 상단부터 우측 하단까지 합산.
- X: X축 방향으로 누적. 동일한 Y축 간의 픽셀은 독립적.
- Y: Y축 방향으로 누적. 동일한 X축 간의 픽셀은 독립적.
Calculate Option
각 적분합에는 Weights(가중치) Parameter가 존재하며, 기본값은 모두 1입니다.
아래는 각 적분합 옵션의 수식에 대해 설명합니다. Direction은 XY로 설정되었다고 가정합니다.
총 네 가지 계산 옵션을 지원합니다:
- Sum : 원본 픽셀 값의 누적합.
- Square Sum: 원본 픽셀 값의 제곱에 대한 누적합.
- Sum and Square Sum: 위 두 가지를 합한 값.
- Polynomial: 상수항을 포함한 2차 다항식.
동작 예시
Source Image | Result Image |
---|---|
![]() |
![]() |
Source Value | Result Value |
![]() |
![]() |
Fig. Integral Image 동작 예시
- 파라미터 :
- Type :
Float32
- Direction :
XY
- Calculate Option :
Sum
- Weights : 1
- Type :
원본 이미지는 Uint8 타입의 단일 채널 이미지이며,
결과 이미지는 XY 방향으로 누적합을 계산한 Float32 타입의 이미지입니다.
좌상단에서 우하단으로 갈수록 값이 누적되며 밝아지는 것을 확인할 수 있습니다.
3 예제
CIntegral integral;
CFLImage fliSourceImage;
integral.SetSourceImage(fliSourceImage);
CFLImage fliDestinationImage;
integral.SetDestinationImage(fliDestinationImage);
integral.SetCalculationMode(CIntegral::ECalculationMode_Sum);
integral.SetDirection(CIntegral::EDirection_XY);
integral.SetDataType(CIntegral::EDataType_Float32);
integral.Execute();