parametres input
This commit is contained in:
@@ -1,9 +1,10 @@
|
|||||||
package imageproc
|
package imageproc
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
"image"
|
"image"
|
||||||
|
|
||||||
|
log "github.com/sirupsen/logrus"
|
||||||
|
|
||||||
"gocv.io/x/gocv"
|
"gocv.io/x/gocv"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -13,14 +14,12 @@ const (
|
|||||||
|
|
||||||
// IHS 变换是一种将 RGB 空间转换为亮度、色调和饱和度的变换方法
|
// IHS 变换是一种将 RGB 空间转换为亮度、色调和饱和度的变换方法
|
||||||
func PansharpenIHS(panImage, mssImage gocv.Mat) gocv.Mat {
|
func PansharpenIHS(panImage, mssImage gocv.Mat) gocv.Mat {
|
||||||
// pan32 := gocv.NewMat()
|
log.Println("start pansharpen IHS")
|
||||||
// defer pan32.Close()
|
|
||||||
// panImage.ConvertTo(&pan32, gocv.MatTypeCV32FC1)
|
|
||||||
|
|
||||||
mss32F := gocv.NewMat()
|
mss32F := gocv.NewMat()
|
||||||
mssImage.ConvertTo(&mss32F, gocv.MatTypeCV32FC4)
|
mssImage.ConvertTo(&mss32F, gocv.MatTypeCV32FC4)
|
||||||
|
|
||||||
// 调整 MSS 图像的大小到与 PAN 图像相同的大小
|
// 调整 MSS 图像的大小到与 PAN 图像相同的大小
|
||||||
|
log.Println("resize mss to pan size")
|
||||||
mssResized := gocv.NewMat()
|
mssResized := gocv.NewMat()
|
||||||
defer mssResized.Close()
|
defer mssResized.Close()
|
||||||
gocv.Resize(mss32F, &mssResized,
|
gocv.Resize(mss32F, &mssResized,
|
||||||
@@ -37,8 +36,6 @@ func PansharpenIHS(panImage, mssImage gocv.Mat) gocv.Mat {
|
|||||||
// Saturation
|
// Saturation
|
||||||
hlsChannels := gocv.Split(mssHLS)
|
hlsChannels := gocv.Split(mssHLS)
|
||||||
|
|
||||||
fmt.Println("size of channels:", len(hlsChannels), mssImage.Channels(), mssResized.Channels(), mssHLS.Channels())
|
|
||||||
|
|
||||||
// 使用 PAN 图像替换亮度分量(Intensity)
|
// 使用 PAN 图像替换亮度分量(Intensity)
|
||||||
// hlsChannels[1] = pan32
|
// hlsChannels[1] = pan32
|
||||||
|
|
||||||
@@ -46,6 +43,7 @@ func PansharpenIHS(panImage, mssImage gocv.Mat) gocv.Mat {
|
|||||||
panFloat := gocv.NewMat()
|
panFloat := gocv.NewMat()
|
||||||
defer panFloat.Close()
|
defer panFloat.Close()
|
||||||
panImage.ConvertTo(&panFloat, gocv.MatTypeCV32F)
|
panImage.ConvertTo(&panFloat, gocv.MatTypeCV32F)
|
||||||
|
log.Println("normalize pan to 0-255")
|
||||||
gocv.Normalize(panFloat, &panFloat, 0, 255, gocv.NormMinMax)
|
gocv.Normalize(panFloat, &panFloat, 0, 255, gocv.NormMinMax)
|
||||||
|
|
||||||
hlsFloat := gocv.NewMat()
|
hlsFloat := gocv.NewMat()
|
||||||
@@ -62,6 +60,7 @@ func PansharpenIHS(panImage, mssImage gocv.Mat) gocv.Mat {
|
|||||||
// 将图像从 HLS 转换回 BGR
|
// 将图像从 HLS 转换回 BGR
|
||||||
fusedImage := gocv.NewMat()
|
fusedImage := gocv.NewMat()
|
||||||
defer fusedImage.Close()
|
defer fusedImage.Close()
|
||||||
|
log.Println("cvt color from HLS to BGR")
|
||||||
gocv.CvtColor(mssHLS, &fusedImage, gocv.ColorHLSToBGR)
|
gocv.CvtColor(mssHLS, &fusedImage, gocv.ColorHLSToBGR)
|
||||||
|
|
||||||
// 交换 B 和 R 通道
|
// 交换 B 和 R 通道
|
||||||
|
|||||||
14
output.go
14
output.go
@@ -25,8 +25,8 @@ func (r *Registrator) SaveFilteredPanToGDALGTiff(tiffFile string) error {
|
|||||||
func savePanToGDALGTiff(pan gocv.Mat, tiffFile string) error {
|
func savePanToGDALGTiff(pan gocv.Mat, tiffFile string) error {
|
||||||
log.Println("Saving PAN image to TIFF file:", tiffFile)
|
log.Println("Saving PAN image to TIFF file:", tiffFile)
|
||||||
|
|
||||||
width := pan.Rows()
|
width := pan.Cols()
|
||||||
height := pan.Cols()
|
height := pan.Rows()
|
||||||
|
|
||||||
ds, err := godal.Create(godal.GTiff, tiffFile, 1, godal.UInt16, width, height)
|
ds, err := godal.Create(godal.GTiff, tiffFile, 1, godal.UInt16, width, height)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -166,8 +166,8 @@ func (r *Registrator) SaveRegisteredMssToRaw(raw string) error {
|
|||||||
mssData[i] = r.registeredMssImages[i].ToBytes()
|
mssData[i] = r.registeredMssImages[i].ToBytes()
|
||||||
}
|
}
|
||||||
|
|
||||||
width := r.MssWidth * PixelBytes
|
width := r.registeredMssImages[0].Cols() * PixelBytes
|
||||||
height := r.MssHeight
|
height := r.registeredMssImages[0].Rows()
|
||||||
log.Println("Writing 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("width:", width)
|
||||||
log.Println("height:", height)
|
log.Println("height:", height)
|
||||||
@@ -180,9 +180,9 @@ func (r *Registrator) SaveRegisteredMssToRaw(raw string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
hdr := EnviHdr{
|
hdr := EnviHdr{
|
||||||
Samples: r.MssWidth,
|
Samples: 4 * width / PixelBytes,
|
||||||
Lines: r.MssHeight,
|
Lines: height,
|
||||||
Bands: MssBands,
|
Bands: 1,
|
||||||
}
|
}
|
||||||
|
|
||||||
hdrFile := filepath.Join(filepath.Dir(raw),
|
hdrFile := filepath.Join(filepath.Dir(raw),
|
||||||
|
|||||||
Reference in New Issue
Block a user