Radon Transform
1 개요
이미지의 라돈 변환을 연산하는 알고리즘입니다.
2 알고리즘 상세 설명
𝑓(𝑥, 𝑦) : 원본 2차원 함수
𝛿(⋅) : 디랙 델타 함수
𝜌 : 원점으로부터 선까지의 거리
𝜃 : 선의 방향 각도
라돈 변환은 2차원 함수에 대하여 모든 방향(각도)에 대해 한 줄씩 선 적분을 취하는 연산입니다.
각 방향에서 본 그림자의 투영값을 라돈 변환 결과(sinogram)로 얻을 수 있습니다.
N채널 8비트 이상 이미지 연산만 지원합니다.
해당 알고리즘은 NVIDIA Cuda 연산을 지원하기 때문에, NVIDIA Cuda 가 사용 가능한 환경에서 더 빠른 연산을 수행할 수 있습니다.
| Source Image | Destination Image |
|---|---|
![]() |
![]() |
3 파라미터 설정 및 사용 방법
| 멤버함수 | 파라미터 | 설 명 | ||
|---|---|---|---|---|
| SetResultType | EFloatingPointAccuracy | eResultType | IN | 이미지 결과 타입 |
이미지 결과 타입을 설정합니다. EFloatingPointAccuracy_Bit32 로 설정 시 결과 이미지는 float 이미지로 생성되고, EFloatingPointAccuracy_Bit64 로 설정 시 결과 이미지는 double 이미지로 생성됩니다.
eResultType - Default Value: EFloatingPointAccuracy_Bit32
| 멤버함수 | 파라미터 | 설 명 | ||
|---|---|---|---|---|
| SetStartAngle | double | f64StartAngle | IN | 변환 시작 각도 |
변환 시작 각도를 설정합니다.
f64StartAngle - Default Value: 0
| 멤버함수 | 파라미터 | 설 명 | ||
|---|---|---|---|---|
| SetEndAngle | double | f64EndAngle | IN | 변환 끝 각도 |
변환 끝 각도를 설정합니다.
f64EndAngle - Default Value: 180
| 멤버함수 | 파라미터 | 설 명 | ||
|---|---|---|---|---|
| EnableIncludeEndAngle | bool | bIncludeEndAngle | IN | 변환 끝 각도 사용 유무 |
변환 끝 각도 사용 유무를 설정합니다. true 상태 시 f64StartAngle <= Angle <= f64EndAngle 범위로 연산되고, fals 상태 시 f64StartAngle <= Angle < f64EndAngle 범위로 연산됩니다.
bIncludeEndAngle - Default Value: true
| 멤버함수 | 파라미터 | 설 명 | ||
|---|---|---|---|---|
| EnableInscribedCircleOnly | bool | bInscribedCircleOnly | IN | 내접원 영역 연산 제한 유무 |
내접원 영역 연산 제한 유무를 설정합니다. true 상태 시 이미지와 동일한 중심을 가지는 내접원 영역에 대해서만 라돈 변환 연산을 진행하고, false 상태 시 이미지 전체에 대한 라돈 변환 연산을 진행합니다.
bInscribedCircleOnly - Default Value: true
| 멤버함수 | 파라미터 | 설 명 | ||
|---|---|---|---|---|
| EnableRangePreservation | bool | bRangePreservation | IN | 값 범위 보존 유무 |
값 범위 보존 유무를 설정합니다. true 상태 시 이미지 값 그대로 연산하고, false 상태 시 이미지를 0~1 범위로 정규화 후 연산합니다.
bRangePreservation - Default Value: false
4 예제 코드
CRadonTransform radonTransform;
CFLImage fliSourceImage;
radonTransform.SetSourceImage(fliSourceImage);
CFLImage fliDestinationImage;
radonTransform.SetDestinationImage(fliDestinationImage);
radonTransform.SetResultType(EFloatingPointAccuracy::EFloatingPointAccuracy_Bit32);
radonTransform.SetStartAngle(0);
radonTransform.SetEndAngle(180);
radonTransform.EnableIncludeEndAngle(true);
radonTransform.EnableInscribedCircleOnly(true);
radonTransform.EnableRangePreservation(false);
radonTransform.Execute();

