From e9286e238b181f33092454c11b7b3bfb85e9ed62 Mon Sep 17 00:00:00 2001 From: nuknal Date: Sat, 25 May 2024 19:56:37 +0800 Subject: [PATCH] Gtiff --- gdal_pansharpen.go | 2 +- go.mod | 2 +- image_registration.go | 41 ++++++++++++++--------------------------- main.go | 32 -------------------------------- phase_correlation.go | 9 +++------ 5 files changed, 19 insertions(+), 67 deletions(-) delete mode 100644 main.go diff --git a/gdal_pansharpen.go b/gdal_pansharpen.go index 30ca70a..3d23846 100644 --- a/gdal_pansharpen.go +++ b/gdal_pansharpen.go @@ -1,4 +1,4 @@ -package main +package imageproc const ( ProductSuffix = "Pansharpened.tiff" diff --git a/go.mod b/go.mod index 603bb52..eeaaa20 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module xtemp +module starwiz.cn/sjy01/image-proc go 1.20 diff --git a/image_registration.go b/image_registration.go index 9f5d409..f653365 100644 --- a/image_registration.go +++ b/image_registration.go @@ -1,4 +1,4 @@ -package main +package imageproc import ( "bufio" @@ -127,18 +127,6 @@ func (r *Registrator) DoDownPhaseCorrelation() error { downsampledPanImage := gocv.NewMat() gocv.Resize(r.PanImage, &downsampledPanImage, image.Point{X: r.MssWidth, Y: r.MssHeight}, 0, 0, gocv.InterpolationLinear) - - // 对每个 MSS 波段图像进行上采样 - // upsampledMSSImages := make([]gocv.Mat, MssBands) - - for i := 0; i < MssBands; i++ { - // upsampledMSSImages[i] = gocv.NewMat() - // gocv.Resize(r.MssImages[i], &upsampledMSSImages[i], - // image.Point{X: r.PanWidth, Y: r.PanHeight}, 0, 0, gocv.InterpolationLinear) - - // r.msToRaw(upsampledMSSImages[i].ToBytes(), fmt.Sprintf("MSS%d.RAW", i+1)) - } - fmt.Println("down sampled PAN images size:", downsampledPanImage.Size()) // 分块高度 @@ -178,29 +166,28 @@ func (r *Registrator) DoDownPhaseCorrelation() error { } } - alignedMssData, err := r.DoMssPhaseShift() - if err != nil { + if err := r.DoMssPhaseShift(); err != nil { log.Error("Error calculating MSS phase shift: ", err) return err } - r.mssToRaw(alignedMssData) - // r.bytesToRaw(r.PanImage.ToBytes(), "data/PAN.RAW") - // r.SavePanToGDALGTiff("data/pan.tiff") - r.SaveRegisteredMssToGDALGTiff("data/registered_mss.tiff") - return nil } -func (r *Registrator) mssToRaw(mssData [][]byte) error { - f, err := os.OpenFile("data/downsampled_registered_mss.RAW", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0777) +func (r *Registrator) SaveRegisteredMssToRaw(raw string) error { + f, err := os.OpenFile(raw, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0777) if err != nil { return err } + var mssData [4][]byte + for i := 0; i < MssBands; i++ { + mssData[i] = r.registeredMssImages[i].ToBytes() + } + width := r.MssWidth * PixelBytes height := r.MssHeight - log.Println("Writing downsampled registered MSS to RAW file...", len(mssData[0])*4) + log.Println("Writing registered MSS to RAW file...", len(mssData[0])*4) log.Println("width:", width) log.Println("height:", height) w := bufio.NewWriter(f) @@ -226,7 +213,7 @@ func (r *Registrator) bytesToRaw(mssData []byte, filePath string) error { } func (r *Registrator) SaveRegisteredMssToGDALGTiff(tiffFile string) error { - log.Println("Saving registered MSS to TIFF file...") + log.Println("Saving registered MSS to TIFF file:", tiffFile) width := r.MssWidth height := r.MssHeight @@ -287,13 +274,13 @@ func (r *Registrator) SaveRegisteredMssToGDALGTiff(tiffFile string) error { } } - log.Info("saved registered mss to tiff file: ", tiffFile) + log.Info("Saved registered mss to ", tiffFile) return nil } func (r *Registrator) SavePanToGDALGTiff(tiffFile string) error { - log.Println("Saving PAN image to TIFF file...") + log.Println("Saving PAN image to TIFF file:", tiffFile) width := r.PanWidth height := r.PanHeight @@ -325,7 +312,7 @@ func (r *Registrator) SavePanToGDALGTiff(tiffFile string) error { return err } - log.Info("saved pan image to tiff file: ", tiffFile) + log.Info("Saved pan image to ", tiffFile) return nil } diff --git a/main.go b/main.go deleted file mode 100644 index 7f4a32c..0000000 --- a/main.go +++ /dev/null @@ -1,32 +0,0 @@ -package main - -import ( - "github.com/airbusgeo/godal" - "github.com/sirupsen/logrus" -) - -func init() { - logrus.SetFormatter(&logrus.TextFormatter{ - ForceColors: true, - DisableColors: false, - TimestampFormat: "2006-01-02 15:04:05", - FullTimestamp: true, - }) -} - -func main() { - reg := NewRegistrator() - - if err := reg.LoadMssRaw("/Users/lan/workspace/temp/ccv/ms_image.raw"); err != nil { - panic(err) - } - - if err := reg.LoadPanRaw("/Users/lan/workspace/temp/ccv/pan_image.raw"); err != nil { - panic(err) - } - - godal.RegisterAll() - if err := reg.DoDownPhaseCorrelation(); err != nil { - panic(err) - } -} diff --git a/phase_correlation.go b/phase_correlation.go index cc498be..9cf2a87 100644 --- a/phase_correlation.go +++ b/phase_correlation.go @@ -1,4 +1,4 @@ -package main +package imageproc import ( "image" @@ -41,8 +41,7 @@ func (r *Registrator) calculateBlockPhaseShift(panBlock, mssBlock gocv.Mat) gocv return shift } -func (r *Registrator) DoMssPhaseShift() ([][]byte, error) { - alignedMssData := make([][]byte, MssBands) +func (r *Registrator) DoMssPhaseShift() error { // 使用平均偏移量来做平移变换 for band := 0; band < MssBands; band++ { var efficientShiftM int @@ -103,9 +102,7 @@ func (r *Registrator) DoMssPhaseShift() ([][]byte, error) { alignedMss.ConvertTo(&r.registeredMssImages[band], gocv.MatTypeCV16U) log.Println("Band", band+1, "registeredMssImages size:", r.registeredMssImages[band].Size()) - - alignedMssData[band] = append(alignedMssData[band], r.registeredMssImages[band].ToBytes()...) } - return alignedMssData, nil + return nil }