多云时无法配准

This commit is contained in:
nuknal
2024-05-30 09:17:51 +08:00
parent 1b0ab9f347
commit 7d9ec46750
10 changed files with 73 additions and 31 deletions

View File

@@ -21,7 +21,7 @@ const (
PanWidth = 9344 // 像素宽度
MssWidth = 2336
BlockNH = 4
BlockNW = 16
BlockNW = 8
OverlappedBlockLines = 3000 // 重叠块的行数
DownSampled ResampleMethod = "down_sample_pan"
UpSampled ResampleMethod = "up_sample_mss"
@@ -221,7 +221,7 @@ func (r *Registrator) calcPhaseCorrelation(panImage gocv.Mat,
panBlock := panImage.Region(rect)
for band := 0; band < MssBands; band++ {
log.Debug("Band", band+1, ", processing block", bh, rect)
log.Debug("processing band:", band+1, ",block:", bh, rect)
mssBlock := mssImages[band].Region(rect)
// 处理每个分块
@@ -287,25 +287,35 @@ func (r *Registrator) calcDeltaCoeffs() error {
effectShift++
cx = append(cx, float64(shift.Block.coord.X+shift.Block.width/2)) // MSS 块在X方向没有分块
log.Debug("effective shift value:", effectShift, "cx:", shift.Block.coord.X, "dy:", shift.dy)
log.Debugf("effective shift value: %v, cx: %v, dx: %v, dy: %v",
effectShift, shift.Block.coord.X, shift.dx, shift.dy)
dx = append(dx, float64(shift.dx))
dy = append(dy, float64(shift.dy))
}
var err error
if r.deltaXCoeffs[i], err = PolynomialFit(cx, dx, 1); err != nil {
log.Error("Error fitting deltaX coeffs: ", err)
return err
}
if len(cx) < 3 {
log.Errorf("No effective shift value found for band %d, skip delta coefficients calculation", i+1)
continue
} else {
var err error
if r.deltaXCoeffs[i], err = PolynomialFit(cx, dx, 1); err != nil {
log.Error("Error fitting deltaX coeffs: ", err)
return err
}
if r.deltaYCoeffs[i], err = PolynomialFit(cx, dy, 2); err != nil {
log.Error("Error fitting deltaY coeffs: ", err)
return err
if r.deltaYCoeffs[i], err = PolynomialFit(cx, dy, 2); err != nil {
log.Error("Error fitting deltaY coeffs: ", err)
return err
}
}
}
for i := 0; i < MssBands; i++ {
if len(r.deltaXCoeffs[i]) < 2 || len(r.deltaYCoeffs[i]) < 3 {
continue
}
log.Printf("Band %d:\n delta_x = %.6f*x + %.6f, \n delta_y = %.6f*x^2 + %.6f*x + %.6f\n",
i+1,
r.deltaXCoeffs[i][1], r.deltaXCoeffs[i][0],
@@ -317,6 +327,12 @@ func (r *Registrator) calcDeltaCoeffs() error {
func (r *Registrator) DoCoRegestration() error {
for band := 0; band < MssBands; band++ {
if len(r.deltaXCoeffs[band]) < 2 || len(r.deltaYCoeffs[band]) < 3 {
log.Error("delta coefficients not calculated, skip co-registration")
r.registeredMssImages[band] = r.MssImages[band].Clone()
continue
}
mapX := gocv.NewMatWithSize(r.MssHeight, r.MssWidth, gocv.MatTypeCV32FC1)
mapY := gocv.NewMatWithSize(r.MssHeight, r.MssWidth, gocv.MatTypeCV32FC1)
for y := 0; y < r.MssHeight; y++ {