diff --git a/pkg/rrc/hf_filter.go b/pkg/rrc/hf_filter.go index 5decf3a..9869852 100644 --- a/pkg/rrc/hf_filter.go +++ b/pkg/rrc/hf_filter.go @@ -1,6 +1,7 @@ package rrc import ( + "fmt" "image" "math" @@ -166,3 +167,32 @@ func visualizeDFT(DFT gocv.Mat, file string) { // 保存DFT结果 gocv.IMWrite(file, out) } + +func HFNoiseFilterSep(img gocv.Mat, radius float64) gocv.Mat { + const SepHeight = 4096 + IDFT := gocv.NewMat() + IDFTs := []gocv.Mat{} + for rows := 0; rows < img.Rows(); rows += SepHeight { + row0 := rows + row1 := rows + SepHeight + if row1 > img.Rows() { + row1 = img.Rows() + } + + fmt.Println("doing HF noise fileter rows range:", row0, row1) + + mat := img.Region(image.Rect(0, row0, img.Cols(), row1)) + matFiltered := HFNoiseFilter(mat, radius) + IDFTs = append(IDFTs, matFiltered) + } + + gocv.Vconcat(IDFTs[0], IDFTs[1], &IDFT) + IDFTs[0].Close() + IDFTs[0].Close() + for i := 2; i < len(IDFTs); i++ { + gocv.Vconcat(IDFT, IDFTs[i], &IDFT) + IDFTs[i].Close() + } + + return IDFT +}