이미지에 선형 컨볼루션을 실행하려면 image.convolve()
를 사용하세요. convolve의 유일한 인수는 모양과 커널의 가중치로 지정된 ee.Kernel
입니다. convolve()
에서 출력하는 이미지의 각 픽셀은 커널 값과 커널로 덮인 입력 이미지 픽셀의 선형 조합입니다. 커널은 각 대역에 개별적으로 적용됩니다. 예를 들어 저역 통과 (평활화) 커널을 사용하여 고주파 정보를 삭제할 수 있습니다. 다음은 Landsat 8 이미지에 적용된 15x15 저역 통과 커널을 보여줍니다.
코드 편집기 (JavaScript)
// Load and display an image. var image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318'); Map.setCenter(-121.9785, 37.8694, 11); Map.addLayer(image, {bands: ['B5', 'B4', 'B3'], max: 0.5}, 'input image'); // Define a boxcar or low-pass kernel. var boxcar = ee.Kernel.square({ radius: 7, units: 'pixels', normalize: true }); // Smooth the image by convolving with the boxcar kernel. var smooth = image.convolve(boxcar); Map.addLayer(smooth, {bands: ['B5', 'B4', 'B3'], max: 0.5}, 'smoothed');
저역 통과 필터와의 컨볼루션 출력은 그림 1과 같이 표시됩니다. 커널의 인수가 크기와 계수를 결정합니다.
특히 units
매개변수가 픽셀로 설정된 경우 radius
매개변수는 커널이 커버할 중심에서 픽셀 수를 지정합니다. normalize
이 true로 설정되면 커널 계수의 합계는 1이 됩니다. magnitude
매개변수가 설정되면 커널 계수에 크기가 곱해집니다 (normalize
도 true인 경우 계수의 합계가 magnitude
가 됨). 커널 계수에 음수 값이 있는 경우 normalize
를 true로 설정하면 계수의 합계가 0이 됩니다.

다른 커널을 사용하여 원하는 이미지 처리 효과를 얻습니다. 이 예에서는 등방성 가장자리 감지에 라플라스 커널을 사용합니다.
코드 편집기 (JavaScript)
// Define a Laplacian, or edge-detection kernel. var laplacian = ee.Kernel.laplacian8({ normalize: false }); // Apply the edge-detection kernel. var edgy = image.convolve(laplacian); Map.addLayer(edgy, {bands: ['B5', 'B4', 'B3'], max: 0.5, format: 'png'}, 'edges');
시각화 매개변수의 형식 지정자를 확인합니다. Earth Engine은 효율성을 위해 디스플레이 타일을 JPEG 형식으로 코드 편집기에 전송하지만, 이미지 경계 외부의 픽셀 투명도를 처리하기 위해 가장자리 타일은 PNG 형식으로 전송됩니다. 시각적 불연속이 발생하면 형식을 PNG로 설정하면 일관된 디스플레이가 표시됩니다. 라플라스 에지 감지 커널로 컨볼루션한 결과는 그림 2와 같이 표시됩니다.

또한 kernel.rotate()
로 방향을 변경할 수 있는 비등방향 가장자리 감지 커널 (예: Sobel, Prewitt, Roberts)도 있습니다. 다른 저역 통과 커널에는 가우스 커널과 균일한 가중치를 갖는 다양한 모양의 커널이 있습니다. 임의로 정의된 가중치와 도형으로 커널을 만들려면 ee.Kernel.fixed()
를 사용하세요. 예를 들어 다음 코드는 중앙에 0이 있는 1의 9x9 커널을 만듭니다.
코드 편집기 (JavaScript)
// Create a list of weights for a 9x9 kernel. var row = [1, 1, 1, 1, 1, 1, 1, 1, 1]; // The center of the kernel is zero. var centerRow = [1, 1, 1, 1, 0, 1, 1, 1, 1]; // Assemble a list of lists: the 9x9 kernel weights as a 2-D matrix. var rows = [row, row, row, row, centerRow, row, row, row, row]; // Create the kernel from the weights. var kernel = ee.Kernel.fixed(9, 9, rows, -4, -4, false); print(kernel);