From 98f12606b696756a16068246fe0e57958b6580ba Mon Sep 17 00:00:00 2001 From: nuknal Date: Mon, 11 Nov 2024 17:55:57 +0800 Subject: [PATCH] cloud cover by kmeans --- pkg/cloud-cover/k_means.go | 17 ++++++++++++++++- pkg/producer/scenes.go | 7 +++++-- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/pkg/cloud-cover/k_means.go b/pkg/cloud-cover/k_means.go index 6102101..a31bff6 100644 --- a/pkg/cloud-cover/k_means.go +++ b/pkg/cloud-cover/k_means.go @@ -10,6 +10,7 @@ import ( "time" log "github.com/sirupsen/logrus" + "gocv.io/x/gocv" ) const ( @@ -36,6 +37,20 @@ func CloudPercentByKMeans(imagePath string) float64 { return 0.0 } + return computeCloudCoverByKMeans(img) +} + +func CloudPercentByKMeans2(imgMat gocv.Mat) float64 { + img, err := imgMat.ToImage() + if err != nil { + log.Errorf("无法将Mat转换为Image: %v", err) + return 0.0 + } + return computeCloudCoverByKMeans(img) +} + +func computeCloudCoverByKMeans(img image.Image) float64 { + log.Info("cloud cover computing...") bounds := img.Bounds() width, height := bounds.Max.X, bounds.Max.Y pixels := make([]Pixel, 0, width*height) @@ -62,7 +77,7 @@ func CloudPercentByKMeans(imagePath string) float64 { newCentroids := updateCentroids(pixels, assignments) if hasConverged(centroids, newCentroids) { - log.Printf("在第 %d 次迭代后收敛\n", iter+1) + log.Debugf("Convergence after the %d iteration", iter+1) break } centroids = newCentroids diff --git a/pkg/producer/scenes.go b/pkg/producer/scenes.go index de06212..eaacd56 100644 --- a/pkg/producer/scenes.go +++ b/pkg/producer/scenes.go @@ -14,6 +14,7 @@ import ( "github.com/paulmach/orb/geojson" log "github.com/sirupsen/logrus" "gocv.io/x/gocv" + cloudcover "starwiz.cn/sjy01/image-proc/pkg/cloud-cover" "starwiz.cn/sjy01/image-proc/pkg/config" "starwiz.cn/sjy01/image-proc/pkg/fusion" "starwiz.cn/sjy01/image-proc/pkg/payload" @@ -231,11 +232,13 @@ func (r *ImgProc) OutputL1A(panScenes []*Scene, mssScenes []*Scene) error { return err } + jpg := strings.Replace(scene.Tiff, ".tiff", ".jpg", 1) + GTiffToJPG(scene.Tiff, jpg, "MSS", false) + scene.Meta.CloudRate = cloudcover.CloudPercentByKMeans(jpg) scene.Meta.DataSize = sizeOfFile(scene.Tiff) metaFile := strings.Replace(scene.Tiff, ".tiff", ".meta.xml", 1) writeProductMeta(scene.Meta, metaFile) - jpg := strings.Replace(scene.Tiff, ".tiff", ".jpg", 1) - GTiffToJPG(scene.Tiff, jpg, "MSS", false) + r.report.Scenes = append(r.report.Scenes, ReportScene{ Name: scene.SceneId, TiffData: scene.Tiff,