Klasifikasi image bertujuan untuk mengkelaskan nilai masing-masing pixel suatu image menjadi suatu kelas diskrit tertentu. Image dapat dikelaskan menjadi dua kelas (binary classification) ataupun lebih. Contoh dalam binary classification adalah mengkelaskan image menjadi kelas badan air atau non badan air.
Klasifikasi image dapat dilakukan dengan menggunakan software pengolah image/GIS seperti ENVI, ArcGIS, QGIS, maupun Google Earth Engine. Software tersebut biasanya sudah memiliki classifier/model untuk kita dapat melakukan klasifikasi.
Lalu bagaimana jika kita ingin membuat model classifer kita sendiri yang kemudian akan kita gunakan untuk melakukan klasifikasi. Banyaknya library open source machine learning memungkinkan hal ini dapat dilakukan saat ini seperti contoh library scikit-learn.
Disini kita asumsikan bahwa kita sudah membuat classifier/modelnya yang siap untuk digunakan. Pertanyaanya adlah bagaimana caranya untuk mengaplikasikannya ke image kita? biasanya citra satelit memiliki extension file GeoTIFF dan jika ingin melakukan prediksi dengan model/classifier yang telah kita buat sendiri dengan memanfaatkan library machine learning seperti scikit-learn membutuhkan input dataframe bukan GeoTIFF.
[Baca juga: Membuat Landcover dengan Google Earth Engine]
[Baca juga: 10 Library Python untuk Pengolahan Data yang Efisien]
Jawabannya adalah dengan terlebih dahulu melakukan konversi image GeoTIFF menjadi Numpy Array. Proses ini dapat dilakukan dengan menggunakan libary GDAL yang dapat dijalankan pada Google Colab.
Berikut merupkan potongan python code merubah GeoTIFF menjadi Numpy Array.
# read raster to array
def read_raster_to_array(file_list):
raster_projection = None
new_shape = (1300*1300, 10)
img = np.empty(new_shape, dtype=np.int16)
for i, file_name in enumerate(file_list):
ds = gdal.Open(file_name)
img[:, i] = ds.GetRasterBand(1).ReadAsArray().astype(np.int16).ravel()
if i == 0:
raster_projection = ds.GetProjection()
ds = None
return img, raster_projection
Jika sudah memiliki numpy array, maka kemudian dapat kita jadikan pandas dataframe. Jika data sudah dalam bentuk pandas dataframe maka klasifikasi image dapat kita lakukan menggunakan model yang sudah kita bangun sebelumnya. Berikut potongan kode untuk merubah Numpy Array menjadi pandas dataframe.
raster_dataframe = pd.DataFrame(im, columns=list_columns, dtype=np.float32)
raster_dataframe
Untuk colabnya saya sertakan disini, mungkin kedepannya akan saya update dengan tambahan code untuk repository.