package imageproc import ( "fmt" "image" "gocv.io/x/gocv" ) const ( GDALPansharpenCommand = "gdal_pansharpen.py {{.PANGTiff}} {{.MSSGTiff}} {{.FUSGTiff}} -r cubic -of GTiff" ) // IHS 变换是一种将 RGB 空间转换为亮度、色调和饱和度的变换方法 func PansharpenIHS(panImage, mssImage gocv.Mat) gocv.Mat { pan32 := gocv.NewMat() defer pan32.Close() panImage.ConvertTo(&pan32, gocv.MatTypeCV32FC1) mss32 := gocv.NewMat() mssImage.ConvertTo(&mss32, gocv.MatTypeCV32FC4) // 调整 MSS 图像的大小到与 PAN 图像相同的大小 mssResized := gocv.NewMat() defer mssResized.Close() gocv.Resize(mss32, &mssResized, image.Point{X: panImage.Cols(), Y: panImage.Rows()}, 0, 0, gocv.InterpolationCubic) // 将 MSS 图像从 BGR 转换为 HLS mssHLS := gocv.NewMat() defer mssHLS.Close() gocv.CvtColor(mssResized, &mssHLS, gocv.ColorBGRToHLS) // 分离 HLS 通道 只有3个通道 hlsChannels := gocv.Split(mssHLS) fmt.Println("size of channels:", len(hlsChannels), mssImage.Channels(), mssResized.Channels(), mssHLS.Channels()) fmt.Println("size of pan32:", pan32.Size(), pan32.Channels()) fmt.Println("size of resized mss", mss32.Size(), mss32.Rows(), mss32.Cols()) // 使用 PAN 图像替换亮度分量(Intensity)- 通常替换的是 G 通道 hlsChannels[1] = pan32 // 合并通道 gocv.Merge(hlsChannels, &mssHLS) // 将图像从 HLS 转换回 BGR fusedImage := gocv.NewMat() defer fusedImage.Close() gocv.CvtColor(mssHLS, &fusedImage, gocv.ColorHLSToBGR) fused16 := gocv.NewMat() fusedImage.ConvertTo(&fused16, gocv.MatTypeCV16UC3) return fused16 }