多云时无法配准
This commit is contained in:
@@ -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++ {
|
||||
|
||||
Reference in New Issue
Block a user