optimize ESRI

This commit is contained in:
nuknal
2024-09-14 11:12:13 +08:00
parent 78f451672a
commit c311c3dc3d

View File

@@ -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
}