Bạn đang gặp phải tình trạng ảnh bị nhiễu với các vùng pixel nhỏ li ti trong Google Earth Engine? Bài viết này sẽ hướng dẫn bạn từng bước cách loại bỏ những "pixel blobs" này một cách hiệu quả, giúp ảnh rõ ràng và chính xác hơn. Chúng tôi sẽ sử dụng Google Earth Engine JavaScript API để cung cấp các giải pháp dễ thực hiện, phù hợp cho cả người mới bắt đầu và người dùng có kinh nghiệm.
Khi làm việc với dữ liệu ảnh trong Google Earth Engine, đặc biệt là sau khi thực hiện các phép tính hoặc phân loại, bạn có thể nhận thấy sự xuất hiện của các pixel blobs. Đây là những vùng pixel nhỏ, thường chỉ có một vài pixel, có giá trị khác biệt so với vùng xung quanh. Chúng có thể do nhiều nguyên nhân, bao gồm nhiễu cảm biến, sai sót trong quá trình xử lý, hoặc đơn giản là do đặc tính tự nhiên của đối tượng được chụp. Việc loại bỏ những pixel blobs này là cần thiết để có được kết quả phân tích chính xác hơn và cải thiện chất lượng hiển thị của ảnh.
Một cách tiếp cận đơn giản để loại bỏ pixel blobs là chuyển đổi ảnh raster thành định dạng vector và sau đó lọc các vector dựa trên diện tích. Ý tưởng là những vùng pixel nhỏ sẽ tạo thành các polygon có diện tích nhỏ, và chúng ta có thể dễ dàng loại bỏ chúng. Tuy nhiên, phương pháp này có thể không hiệu quả với các tập dữ liệu lớn do tốn nhiều tài nguyên tính toán.
// Thử nghiệm với các tham số này
var geomMaxError = 10;
var areaMaxError = 10;
var vectorThresh = 10000; // mét vuông
// ... (Phần mã gốc đã được cung cấp) ...
// Vector solution
var vectors = img.updateMask(img.eq(1)).reduceToVectors();
var largeVectors = vectors
.map(function(f) {
return f.set({size: f.geometry(geomMaxError).area(areaMaxError)});
})
.filterMetadata('size', 'greater_than', vectorThresh);
Map.addLayer(largeVectors, {}, 'large vectors');
Trong đoạn mã trên, `geomMaxError` và `areaMaxError` là các tham số để đơn giản hóa hình học vector, giúp giảm bớt sự phức tạp và tăng tốc độ xử lý. `vectorThresh` xác định diện tích tối thiểu (mét vuông) để một vector được giữ lại. Các vector có diện tích nhỏ hơn ngưỡng này sẽ bị loại bỏ. Đây là một **phương pháp hiệu quả** khi bạn muốn loại bỏ nhanh các đối tượng nhỏ và không quan trọng.
Một giải pháp khác, có khả năng mở rộng tốt hơn cho các tập dữ liệu lớn, là sử dụng convolution với bộ lọc thông thấp. Ý tưởng là làm mờ ảnh, loại bỏ các chi tiết nhỏ (bao gồm pixel blobs), và sau đó khôi phục lại hình dạng ban đầu. Quá trình này bao gồm hai bước chính:
// Thử nghiệm với các tham số này
var smoothRadius = 50; // mét
var thresh1 = 0.5;
var thresh2 = 0.5;
// ... (Phần mã gốc đã được cung cấp) ...
// Định nghĩa bộ lọc thông thấp
var boxcar = ee.Kernel.square({radius: smoothRadius, units: 'meters', normalize: true});
// Áp dụng bộ lọc thông thấp để tạo ra ảnh đã làm mịn
var smooth1 = img.convolve(boxcar);
// Tạo ảnh nhị phân từ ảnh đã làm mịn
var smooth1Binary = smooth1.gt(thresh1);
// Sử dụng một vòng lặp khác của bộ lọc thông thấp
var smooth2 = smooth1Binary.convolve(boxcar);
var smooth2Binary = smooth2.gt(thresh2);
Trong đoạn mã này, `smoothRadius` xác định bán kính của bộ lọc thông thấp (mét). `thresh1` và `thresh2` là các ngưỡng để chuyển đổi ảnh đã làm mịn thành ảnh nhị phân. Việc điều chỉnh các tham số này sẽ ảnh hưởng đến mức độ làm mờ và khả năng loại bỏ **pixel blobs**.
Lựa chọn phương pháp nào phụ thuộc vào kích thước tập dữ liệu, yêu cầu về độ chính xác, và tài nguyên tính toán có sẵn. Nếu bạn có một tập dữ liệu nhỏ và cần kết quả nhanh chóng, vector hóa có thể là lựa chọn tốt. Nếu bạn đang làm việc với một tập dữ liệu lớn và cần một giải pháp có khả năng mở rộng, convolution với bộ lọc thông thấp có thể phù hợp hơn.
Việc loại bỏ pixel blobs là một bước quan trọng trong quá trình xử lý ảnh trong Google Earth Engine. Bằng cách sử dụng các phương pháp được trình bày trong bài viết này, bạn có thể cải thiện đáng kể chất lượng dữ liệu ảnh của mình và có được kết quả phân tích chính xác hơn. Hãy thử nghiệm với các tham số khác nhau để tìm ra cấu hình phù hợp nhất cho dự án của bạn.
Bài viết liên quan