112 lines
2.6 KiB
Go
112 lines
2.6 KiB
Go
package producer
|
|
|
|
import (
|
|
"bufio"
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
|
|
"github.com/airbusgeo/godal"
|
|
log "github.com/sirupsen/logrus"
|
|
"gocv.io/x/gocv"
|
|
"starwiz.cn/sjy01/image-proc/pkg/utils"
|
|
)
|
|
|
|
func (r *ImgProc) SaveOriginalPanToGDALGTiff(tiffFile string) error {
|
|
err := utils.SavePanToGDALGTiff(r.PanImage, 0, 0, tiffFile, PanResolution)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (r *ImgProc) SaveRegisteredMssToGDALGTiff(tiffFile string) error {
|
|
r.rgbirImage = gocv.NewMat()
|
|
gocv.Merge(r.registeredMssImages[:], &r.rgbirImage)
|
|
|
|
err := utils.SaveBGRToGDALGTiff(r.rgbirImage,
|
|
4, 0, 0, MssResolution,
|
|
[]godal.ColorInterp{godal.CIBlue, godal.CIGreen, godal.CIRed, godal.CIUndefined},
|
|
tiffFile)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (r *ImgProc) BytesToRaw(mssData []byte, filePath string) error {
|
|
f, err := os.OpenFile(filePath, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0777)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
w := bufio.NewWriter(f)
|
|
w.Write(mssData)
|
|
|
|
return nil
|
|
}
|
|
|
|
func (r *ImgProc) SaveRegisteredMssToRaw(raw string) error {
|
|
return saveRegisteredMssToRaw(raw, r.registeredMssImages)
|
|
}
|
|
|
|
func (r *ImgProc) Report() error {
|
|
return WriteReport(&r.report, r.Params.ReportFile)
|
|
}
|
|
|
|
func (r *ImgProc) rpcKeywordInTif() {
|
|
// GDAL库对应的RPC关键词
|
|
// keys := []string{
|
|
// "ERR_BIAS", "ERR_RAND",
|
|
// "LINE_OFF", "SAMP_OFF",
|
|
// "LAT_OFF", "LONG_OFF", "HEIGHT_OFF",
|
|
// "LINE_SCALE", "SAMP_SCALE",
|
|
// "LAT_SCALE", "LONG_SCALE", "HEIGHT_SCALE",
|
|
// "LINE_NUM_COEFF", "LINE_DEN_COEFF",
|
|
// "SAMP_NUM_COEFF", "SAMP_DEN_COEFF",
|
|
// }
|
|
|
|
// values := map[string]string{}
|
|
|
|
}
|
|
|
|
func saveRegisteredMssToRaw(raw string, mssImages [4]gocv.Mat) 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] = mssImages[i].ToBytes()
|
|
}
|
|
|
|
width := mssImages[0].Cols() * PixelBytes
|
|
height := mssImages[0].Rows()
|
|
log.Println("Writing registered MSS to RAW file...", len(mssData[0])*4)
|
|
log.Println("width:", width)
|
|
log.Println("height:", height)
|
|
w := bufio.NewWriter(f)
|
|
for row := 0; row < height; row++ {
|
|
w.Write(mssData[0][row*width : (row+1)*width])
|
|
w.Write(mssData[1][row*width : (row+1)*width])
|
|
w.Write(mssData[2][row*width : (row+1)*width])
|
|
w.Write(mssData[3][row*width : (row+1)*width])
|
|
}
|
|
|
|
hdr := EnviHdr{
|
|
Samples: 4 * width / PixelBytes,
|
|
Lines: height,
|
|
Bands: 1,
|
|
}
|
|
|
|
hdrFile := filepath.Join(filepath.Dir(raw),
|
|
fmt.Sprintf("%s.HDR", strings.TrimSuffix(filepath.Base(raw), filepath.Ext(raw))),
|
|
)
|
|
hdr.Write(hdrFile)
|
|
|
|
return nil
|
|
}
|