Earth Engine 이미지 등록 알고리즘은 이미지 정렬의 최종, 직교 후, 세밀한 단계로 설계되었습니다. 등록할 이미지가 이미 초기 정렬 단계를 거쳤으므로 이미 서로 몇도 이내로 회전되어 있고 약간의 변환만 다르다고 가정합니다. 등록은 '러버 시트' 기술을 사용하여 로컬 이미지 왜곡을 통해 이전 처리의 직교 보정 오류 및 기타 아티팩트를 수정할 수 있습니다. 기본적인 정렬 기법은 이미지 상관성이므로 알고리즘이 정확한 정렬을 계산하려면 입력 이미지와 참조 이미지의 밴드가 시각적으로 유사해야 합니다.
이미지 변위
이미지를 등록하는 방법에는 두 가지가 있습니다. displacement()
를 사용하여 변위 이미지를 결정한 다음 displace()
로 적용합니다. 필요한 입력은 등록할 이미지 쌍과 최대 변위 매개변수(maxOffset
)입니다.
displacement()
알고리즘은 참조 이미지, 최대 변위 매개변수 (maxOffset
), 알고리즘 동작을 수정하는 두 가지 선택적 매개변수를 사용합니다. 출력은 각 픽셀에서 변위 벡터의 X 및 Y 구성요소 (미터)를 나타내는 밴드 dx
및 dy
가 있는 변위 이미지입니다.
호출 이미지와 참조 이미지의 모든 밴드가 등록 중에 일치에 사용되므로 밴드 수가 정확히 같아야 합니다. 등록이 성공하려면 입력 밴드가 시각적으로 유사해야 합니다. 그렇지 않은 경우 이미지를 사전 처리 (예: 부드럽게 처리, 가장자리 감지)하여 더 유사하게 보이게 할 수 있습니다. 등록 계산은 알고리즘에 제공된 세 가지 투영에 따라 (멀티스케일) 작동하는 투영과 함께 멀티스케일의 대략적인 프로세스를 사용하여 수행됩니다.
- 호출 이미지의 기본 프로젝션 (Pc)
- 참조 이미지의 기본 투영 (Pr)
- 출력 투영 (Po)
계산을 최소화하기 위해 가장 높은 해상도의 작업 프로젝션 (Pw)은 Pr의 CRS에 있으며, 이 세 프로젝션 중 가장 거친 해상도로 결정된 크기를 갖습니다. 그런 다음 Pr의 결과를 입력 'projection' 매개변수로 지정된 투영으로 리샘플링합니다.
출력은 다음과 같은 밴드가 있는 변위 이미지입니다.
dx
- 지정된 참조 이미지 픽셀 위치의 경우 이 밴드에는 호출 이미지에서 일치하는 위치에 도달하기 위해 이동해야 하는 X 방향의 거리가 포함됩니다. 단위는 지오데시 미터입니다.
dy
- 지정된 참조 이미지 픽셀 위치의 경우 이 밴드에는 호출 이미지에서 일치하는 위치에 도달하기 위해 이동해야 하는 Y 방향의 거리가 포함됩니다. 단위는 지오데시 미터입니다.
confidence
- 유효한 일치가 발견된 영역의 상관 점수를 기반으로 한 이동 신뢰도 (0은 신뢰도 낮음, 1은 신뢰도 높음)의 픽셀당 추정치입니다. 일치가 발견되지 않은 영역에서는 가우시안 커널을 사용하여 근처 상관관계에서 신뢰도를 추정하여 근처 상관관계에 더 높은 가중치를 부여합니다.
다음 예에서는 두 개의 고해상도 Terra Bella 이미지 간의 변위 크기와 각도를 계산합니다.
코드 편집기 (JavaScript)
// Load the two images to be registered. var image1 = ee.Image('SKYSAT/GEN-A/PUBLIC/ORTHO/MULTISPECTRAL/s01_20150502T082736Z'); var image2 = ee.Image('SKYSAT/GEN-A/PUBLIC/ORTHO/MULTISPECTRAL/s01_20150305T081019Z'); // Use bicubic resampling during registration. var image1Orig = image1.resample('bicubic'); var image2Orig = image2.resample('bicubic'); // Choose to register using only the 'R' band. var image1RedBand = image1Orig.select('R'); var image2RedBand = image2Orig.select('R'); // Determine the displacement by matching only the 'R' bands. var displacement = image2RedBand.displacement({ referenceImage: image1RedBand, maxOffset: 50.0, patchWidth: 100.0 }); // Compute image offset and direction. var offset = displacement.select('dx').hypot(displacement.select('dy')); var angle = displacement.select('dx').atan2(displacement.select('dy')); // Display offset distance and angle. Map.addLayer(offset, {min:0, max: 20}, 'offset'); Map.addLayer(angle, {min: -Math.PI, max: Math.PI}, 'angle'); Map.setCenter(37.44,0.58, 15);
이미지 왜곡
이미지를 다른 이미지와 일치하도록 왜곡하는 방법에는 displace()
와 register()
의 두 가지가 있습니다. displace()
알고리즘은 dx
및 dy
밴드를 첫 번째 두 밴드로 포함하는 변위 이미지를 가져와 그에 따라 이미지를 왜곡합니다. 출력 이미지는 변위 이미지에 있는 오프셋으로 입력 이미지의 밴드를 왜곡한 결과입니다. 이전 예에서 계산된 변위를 사용합니다.
코드 편집기 (JavaScript)
// Use the computed displacement to register all original bands. var registered = image2Orig.displace(displacement); // Show the results of co-registering the images. var visParams = {bands: ['R', 'G', 'B'], max: 4000}; Map.addLayer(image1Orig, visParams, 'Reference'); Map.addLayer(image2Orig, visParams, 'Before Registration'); Map.addLayer(registered, visParams, 'After Registration');
변위 밴드가 필요하지 않은 경우 Earth Engine은 displacement()
다음에 displace()
를 호출하는 바로가기인 register()
메서드를 제공합니다. 예를 들면 다음과 같습니다.
코드 편집기 (JavaScript)
var alsoRegistered = image2Orig.register({ referenceImage: image1Orig, maxOffset: 50.0, patchWidth: 100.0 }); Map.addLayer(alsoRegistered, visParams, 'Also Registered');
이 예에서 register()
의 결과는 displace()
의 결과와 다릅니다. 이는 두 접근 방식에서 서로 다른 대역 세트를 사용했기 때문입니다. register()
는 항상 입력 이미지의 모든 대역을 사용하는 반면 displacement()
예에서는 결과를 displace()
에 제공하기 전에 빨간색 대역만 사용했습니다. 여러 밴드를 사용할 때 밴드 분산이 매우 다른 경우, 밴드의 공간 상관성 점수가 결합될 때 밴드가 공동으로 정규화되므로 분산이 큰 밴드에 가중치가 더 많이 부여될 수 있습니다. 이는 등록할 때 시각적으로 가장 유사한 밴드를 선택하는 것이 얼마나 중요한지 보여줍니다. 이전 예와 마찬가지로 displacement()
및 displace()
를 사용하여 변위를 계산하는 데 사용되는 밴드를 제어합니다.