다중모달 MRI 영상 정합하기
이 예제에서는 명암 기반 영상 정합을 사용하여 두 MRI(자기 공명 영상) 영상을 하나의 공통 좌표계에 맞추는 방법을 보여줍니다. 이 방법은 특징을 찾거나 제어점을 사용하지 않습니다. 명암 기반 정합은 대개 의료 영상 및 원격탐사 영상에 적합합니다.
1단계: 영상 불러오기
이 예제에서는 무릎 MRI 영상 두 개를 사용합니다. 고정 영상은 스핀 에코 영상이고, 이동 영상은 반전 회복(inversion recovery) 기법이 사용된 스핀 에코 영상입니다. 두 개의 시상면 단층은 같은 시간에 수집했지만 약간 정렬되지 않았습니다.
fixed = dicomread("knee1.dcm"); moving = dicomread("knee2.dcm");
imshowpair
함수는 정합 과정의 모든 단계에서 영상을 시각화하는 데 유용합니다. 몽타주에서 두 영상을 개별적으로 보거나 두 영상을 중첩된 형태로 표시하여 부정합의 정도를 표시하려면 사용하십시오.
imshowpair(moving,fixed,"montage") title("Unregistered")
imshowpair
의 중첩된 영상의 경우 회색 영역은 명암이 비슷한 영역에 해당하지만, 자홍색 및 녹색 영역은 한 영상이 다른 영상보다 밝은 곳을 나타냅니다. 어떤 영상 쌍에서는 녹색 영역과 자홍색 영역을 부정합으로 간주할 수 없는 경우도 있습니다. 하지만 이 예제에서는 색 정보를 사용하여 손쉽게 부정합 위치를 파악할 수 있습니다.
imshowpair(moving,fixed)
title("Unregistered")
2단계: 초기 정합 설정하기
imregconfig
함수를 사용하면 imregister
에 사용하기에 적합한 최적화 함수 및 메트릭 구성을 손쉽게 선택할 수 있습니다. 최적화 함수 및 메트릭 변수는 정합을 제어하는 속성을 가진 객체입니다. 자세한 내용은 Create an Optimizer and Metric for Intensity-Based Image Registration 항목을 참조하십시오.
이 두 영상은 명암 분포가 서로 다르므로 다중모달 구성임을 알 수 있습니다.
[optimizer,metric] = imregconfig("multimodal");
두 영상 간 왜곡의 유형에는 스케일링과 회전은 물론 전단도 포함될 수 있습니다. 영상을 정합하려면 아핀 변환을 사용하십시오.
registeredDefault = imregister(moving,fixed,"affine",optimizer,metric);
결과를 표시합니다. imregister
에서 디폴트 설정에 의해 영상이 완벽하게 맞춰지는 경우는 거의 없습니다. 하지만 어떤 속성을 가장 먼저 조정할지를 판단하는 데 유용한 방법입니다.
imshowpair(registeredDefault,fixed)
title("A: Default Registration")
3단계: 최적화 함수와 메트릭을 조정하여 정합 개선하기
초기 정합은 그리 좋지 않습니다. 특히 오른쪽 경계에 잘 맞춰지지 않은 영역이 많습니다. 최적화 함수 및 메트릭 구성 속성을 조정하여 정합을 개선해 보십시오.
disp(optimizer)
registration.optimizer.OnePlusOneEvolutionary Properties: GrowthFactor: 1.050000e+00 Epsilon: 1.500000e-06 InitialRadius: 6.250000e-03 MaximumIterations: 100
disp(metric)
registration.metric.MattesMutualInformation Properties: NumberOfSpatialSamples: 500 NumberOfHistogramBins: 50 UseAllPixels: 1
최적화 함수의 InitialRadius
속성은 파라미터 공간에서 사용되는 초기 단계 크기를 제어하여 기하 변환을 미세 조정합니다. 다중모달 정합 문제가 디폴트 파라미터만으로 해결되지 않는다면 가장 먼저 InitialRadius
파라미터를 조정하는 것이 좋습니다. 일단 InitialRadius
의 디폴트 값을 스케일링 인자 3.5로 줄여 보십시오.
optimizer.InitialRadius = optimizer.InitialRadius/3.5;
registeredAdjustedInitialRadius = imregister(moving,fixed,"affine",optimizer,metric);
결과를 표시합니다. InitialRadius
를 조정한 결과 긍정적인 효과가 있었습니다. 맨 위 및 오른쪽 경계에 있는 영상의 정렬이 눈에 띄게 좋아졌습니다.
imshowpair(registeredAdjustedInitialRadius,fixed)
title("B: Adjusted InitialRadius")
최적화 함수의 MaximumIterations
속성은 최적화 함수가 수용할 수 있는 최대 반복 횟수를 제어합니다. MaximumIterations
를 늘리면 정합 탐색이 더 오래 실행되어 더 나은 정합 결과를 찾을 수도 있습니다. 마지막 단계의 InitialRadius
에서 반복 횟수를 크게 높인다면 정합이 계속해서 나아질까요?
optimizer.MaximumIterations = 300;
registeredAdjustedInitialRadius300 = imregister(moving,fixed,"affine",optimizer,metric);
결과를 표시합니다. 이전 정합의 InitialRadius
최적화 함수 설정을 다시 사용하고 최적화 함수에서 반복 횟수를 높여 정합을 더 개선했습니다.
imshowpair(registeredAdjustedInitialRadius300,fixed)
title("C: Adjusted InitialRadius, MaximumIterations = 300")
4단계: 초기 조건을 사용하여 정합 개선하기
최적화 기반 정합에서 가장 큰 효과를 얻으려면 이동 영상과 고정 영상을 연결하는 정합에 양호한 초기 조건이 주어져야 합니다. 향상된 정합 결과를 얻는 좋은 방법 중 하나는 더 간단한 변환 유형(예: 강체 변환 또는 유사 변환)으로 시작한 다음 그 결과 변환을 초기 조건으로 사용하여 더 복잡한 아핀 변환을 하는 것입니다.
imregtform
함수는 imregister
와 동일한 알고리즘을 사용하지만, 정합된 출력 영상 대신 기하 변환 객체를 출력값으로 반환합니다. 평행 이동, 회전, 등방성 스케일링으로 구성된 유사 변환을 기반으로 초기 평행 이동 추정값을 얻으려면 imregtform
을 사용하십시오. 조정된 최적화 함수 설정을 사용합니다.
tformSimilarity = imregtform(moving,fixed,"similarity",optimizer,metric)
tformSimilarity = simtform2d with properties: Dimensionality: 2 Scale: 1.0390 RotationAngle: -6.1345 Translation: [-51.1491 6.9891] R: [2x2 double] A: [ 1.0331 0.1110 -51.1491 -0.1110 1.0331 6.9891 0 0 1.0000]
디폴트 좌표계(내재적 좌표계라고도 함)에서 정합이 해결되고 있으므로 고정 영상의 위치 및 해상도를 정의하는 디폴트 공간 참조 객체를 얻습니다.
Rfixed = imref2d(size(fixed));
imregtform
의 기하 변환 출력을 이동 영상에 적용하여 고정 영상에 정렬하려면 imwarp
를 사용하십시오. imwarp
에 OutputView
이름-값 인수를 사용하여 고정 영상과 동일한 해상도 및 세계 제한을 이동 영상에 할당합니다.
registeredSimilarity = imwarp(moving,tformSimilarity,OutputView=Rfixed);
결과를 표시합니다.
imshowpair(registeredSimilarity,fixed)
title("D: Registration Based on Similarity Transformation Model")
아핀 변환 모델을 사용하고 유사 변환을 초기 조건으로 지정하여 정합을 미세 조정합니다. 미세 조정된 정합의 추정값에는 전단의 가능성도 포함됩니다.
registeredAffineWithIC = imregister(moving,fixed,"affine",optimizer,metric, ... InitialTransformation=tformSimilarity);
결과를 표시합니다. 유사 초기 조건으로 정합을 미세 조정하면 좋은 정합 결과를 얻을 수 있습니다.
imshowpair(registeredAffineWithIC,fixed)
title("E: Registration from Affine Model Based on Similarity Initial Condition")
5단계: 충분하다고 생각되는 시점 결정하기
각기 다른 구성 및 초기 조건으로 imregister
를 실행한 결과를 비교하다 보면, 변경할 수 있는 imregister
의 입력 파라미터가 매우 많고 각각이 서로 다른 결과를 낳을 수 있다는 사실이 분명해집니다.
단 하나의 품질 메트릭으로 두 영상의 정렬을 정확히 설명할 수는 없으므로 정합 결과를 정량적으로 비교하기가 어려울 수 있습니다. 대개는 결과를 시각화하여 정성적인 방법으로 정합 결과를 평가해야 합니다. 위의 결과에서 C) 및 E)의 정합 결과는 둘 다 매우 좋으며 시각적으로 구분하기가 어렵습니다.
6단계: 다른 방법으로 시각화하기
다중모달 정합의 품질이 향상되면 정합의 품질을 시각적으로 평가하기가 더 어려워질 때가 많습니다. 명암 차이 때문에 부정합 영역이 가려질 수 있기 때문입니다. imshowpair
의 다른 표시 모드로 전환하면 숨어 있던 세부 묘사가 드러나는 경우도 있습니다. 물론 항상 그런 것은 아닙니다.
참고 항목
imregister
| imregconfig
| imwarp
| imref2d
| OnePlusOneEvolutionary
| MattesMutualInformation
| MeanSquares
| RegularStepGradientDescent