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 PansharpenSimpleMean(pan, B, G, R, I gocv.Mat) error { return nil }
func PansharpenESRI(pan, B, G, R, I gocv.Mat) gocv.Mat { 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() defer bgrn_mean.Close()
ADJ := gocv.NewMat() ADJ := gocv.NewMat()
defer ADJ.Close() 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 y := 0; y < pan.Rows(); y++ {
for x := 0; x < pan.Cols(); x++ { 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) v := (R.GetFloatAt(y, x) + G.GetFloatAt(y, x) + B.GetFloatAt(y, x) + I.GetFloatAt(y, x)) / 4
bgrn_mean.SetShortAt(y, x, int16(v)) 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) gocv.Add(I, ADJ, &I)
mss := gocv.NewMat() mss := gocv.NewMat()
mt := gocv.MatTypeCV16UC3
switch config.GCONFIG.CoRegistration.FUSBandOrder { switch config.GCONFIG.CoRegistration.FUSBandOrder {
case "RGB": case "RGB":
gocv.Merge([]gocv.Mat{R, G, B}, &mss) 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) gocv.Merge([]gocv.Mat{B, G, R}, &mss)
case "RGBI": case "RGBI":
gocv.Merge([]gocv.Mat{R, G, B, I}, &mss) gocv.Merge([]gocv.Mat{R, G, B, I}, &mss)
mt = gocv.MatTypeCV16UC4
case "BGRI": case "BGRI":
gocv.Merge([]gocv.Mat{B, G, R, I}, &mss) gocv.Merge([]gocv.Mat{B, G, R, I}, &mss)
mt = gocv.MatTypeCV16UC4
default: default:
gocv.Merge([]gocv.Mat{R, G, B}, &mss) gocv.Merge([]gocv.Mat{R, G, B}, &mss)
} }
mss.ConvertTo(&mss, mt)
return mss return mss
} }