From c311c3dc3db45c87eea786e850045d72bcffe884 Mon Sep 17 00:00:00 2001 From: nuknal Date: Sat, 14 Sep 2024 11:12:13 +0800 Subject: [PATCH] optimize ESRI --- pkg/fusion/fusion.go | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/pkg/fusion/fusion.go b/pkg/fusion/fusion.go index 18558c8..ee8a0d5 100644 --- a/pkg/fusion/fusion.go +++ b/pkg/fusion/fusion.go @@ -110,15 +110,21 @@ func PansharpenBrovey(pan, B, G, R, I gocv.Mat, w float32) gocv.Mat { func PansharpenSimpleMean(pan, B, G, R, I gocv.Mat) error { return nil } func PansharpenESRI(pan, B, G, R, I gocv.Mat) gocv.Mat { - bgrn_mean := gocv.NewMatWithSize(pan.Rows(), pan.Cols(), pan.Type()) + bgrn_mean := gocv.NewMatWithSize(pan.Rows(), pan.Cols(), gocv.MatTypeCV32F) defer bgrn_mean.Close() ADJ := gocv.NewMat() defer ADJ.Close() + pan.ConvertTo(&pan, gocv.MatTypeCV32F) + B.ConvertTo(&B, gocv.MatTypeCV32F) + G.ConvertTo(&G, gocv.MatTypeCV32F) + R.ConvertTo(&R, gocv.MatTypeCV32F) + I.ConvertTo(&I, gocv.MatTypeCV32F) + for y := 0; y < pan.Rows(); y++ { for x := 0; x < pan.Cols(); x++ { - v := uint16((R.GetFloatAt(y, x) + G.GetFloatAt(y, x) + B.GetFloatAt(y, x) + I.GetFloatAt(y, x)) / 4) - bgrn_mean.SetShortAt(y, x, int16(v)) + v := (R.GetFloatAt(y, x) + G.GetFloatAt(y, x) + B.GetFloatAt(y, x) + I.GetFloatAt(y, x)) / 4 + bgrn_mean.SetFloatAt(y, x, v) } } @@ -130,6 +136,7 @@ func PansharpenESRI(pan, B, G, R, I gocv.Mat) gocv.Mat { gocv.Add(I, ADJ, &I) mss := gocv.NewMat() + mt := gocv.MatTypeCV16UC3 switch config.GCONFIG.CoRegistration.FUSBandOrder { case "RGB": gocv.Merge([]gocv.Mat{R, G, B}, &mss) @@ -137,12 +144,16 @@ func PansharpenESRI(pan, B, G, R, I gocv.Mat) gocv.Mat { gocv.Merge([]gocv.Mat{B, G, R}, &mss) case "RGBI": gocv.Merge([]gocv.Mat{R, G, B, I}, &mss) + mt = gocv.MatTypeCV16UC4 case "BGRI": gocv.Merge([]gocv.Mat{B, G, R, I}, &mss) + mt = gocv.MatTypeCV16UC4 default: gocv.Merge([]gocv.Mat{R, G, B}, &mss) } + mss.ConvertTo(&mss, mt) + return mss }