برای انجام کانولوشن های خطی روی تصاویر، از image.convolve()
استفاده کنید. تنها آرگومان برای در هم پیچیدن یک ee.Kernel
است که با یک شکل و وزن های موجود در هسته مشخص می شود. هر پیکسل از تصویر خروجی توسط convolve()
ترکیب خطی مقادیر کرنل و پیکسل های تصویر ورودی است که توسط کرنل پوشانده شده است. هسته ها به صورت جداگانه برای هر باند اعمال می شوند. به عنوان مثال، ممکن است بخواهید از یک هسته پایین گذر (صاف کننده) برای حذف اطلاعات با فرکانس بالا استفاده کنید. شکل زیر یک هسته 15x15 پایین گذر را نشان می دهد که روی یک تصویر Landsat 8 اعمال شده است:
ویرایشگر کد (جاوا اسکریپت)
// 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 تنظیم شود، مجموع ضرایب کرنل یک خواهد بود. اگر پارامتر magnitude
تنظیم شود، ضرایب هسته در بزرگی ضرب میشوند (اگر normalize
نیز درست باشد، ضرایب به magnitude
جمع میشوند). اگر مقدار منفی در هر یک از ضرایب هسته وجود داشته باشد، با تنظیم normalize
روی true، مجموع ضرایب صفر می شود.
از هسته های دیگر برای رسیدن به اثر پردازش تصویر مورد نظر استفاده کنید. این مثال از یک هسته لاپلاسی برای تشخیص لبه همسانگرد استفاده می کند:
ویرایشگر کد (جاوا اسکریپت)
// 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 باشد.
همچنین هسته های تشخیص لبه ناهمسانگرد (مانند Sobel، Prewitt، Roberts) وجود دارد که جهت آنها را می توان با kernel.rotate()
تغییر داد. دیگر هسته های پایین گذر شامل هسته گاوسی و هسته هایی با اشکال مختلف با وزن یکنواخت است. برای ایجاد کرنل هایی با وزن و شکل دلخواه، از ee.Kernel.fixed()
استفاده کنید. به عنوان مثال، این کد یک هسته 9x9 از 1 با یک صفر در وسط ایجاد می کند:
ویرایشگر کد (جاوا اسکریپت)
// 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);
برای انجام کانولوشن های خطی روی تصاویر، از image.convolve()
استفاده کنید. تنها آرگومان برای در هم پیچیدن یک ee.Kernel
است که با یک شکل و وزن های موجود در هسته مشخص می شود. هر پیکسل از تصویر خروجی توسط convolve()
ترکیب خطی مقادیر کرنل و پیکسل های تصویر ورودی است که توسط کرنل پوشانده شده است. هسته ها به صورت جداگانه برای هر باند اعمال می شوند. به عنوان مثال، ممکن است بخواهید از یک هسته پایین گذر (صاف کننده) برای حذف اطلاعات با فرکانس بالا استفاده کنید. شکل زیر یک هسته 15x15 پایین گذر را نشان می دهد که روی یک تصویر Landsat 8 اعمال شده است:
ویرایشگر کد (جاوا اسکریپت)
// 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 تنظیم شود، مجموع ضرایب کرنل یک خواهد بود. اگر پارامتر magnitude
تنظیم شود، ضرایب هسته در بزرگی ضرب میشوند (اگر normalize
نیز درست باشد، ضرایب به magnitude
جمع میشوند). اگر مقدار منفی در هر یک از ضرایب هسته وجود داشته باشد، با تنظیم normalize
روی true، مجموع ضرایب صفر می شود.
از هسته های دیگر برای رسیدن به اثر پردازش تصویر مورد نظر استفاده کنید. این مثال از یک هسته لاپلاسی برای تشخیص لبه همسانگرد استفاده می کند:
ویرایشگر کد (جاوا اسکریپت)
// 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 باشد.
همچنین هسته های تشخیص لبه ناهمسانگرد (مانند Sobel، Prewitt، Roberts) وجود دارد که جهت آنها را می توان با kernel.rotate()
تغییر داد. دیگر هسته های پایین گذر شامل هسته گاوسی و هسته هایی با اشکال مختلف با وزن یکنواخت است. برای ایجاد کرنل هایی با وزن و شکل دلخواه، از ee.Kernel.fixed()
استفاده کنید. به عنوان مثال، این کد یک هسته 9x9 از 1 با یک صفر در وسط ایجاد می کند:
ویرایشگر کد (جاوا اسکریپت)
// 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);