save Tmat in binary format
This commit is contained in:
149
pkg/rrc/rrc.go
149
pkg/rrc/rrc.go
@@ -4,6 +4,7 @@ import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"os"
|
||||
"sync"
|
||||
|
||||
log "github.com/sirupsen/logrus"
|
||||
"gocv.io/x/gocv"
|
||||
@@ -52,30 +53,57 @@ func (rrc *RRC) StatisticalPAN(dsfile string) error {
|
||||
defer f.Close()
|
||||
|
||||
scanner := bufio.NewScanner(f)
|
||||
var files []string
|
||||
for scanner.Scan() {
|
||||
l0 := scanner.Text()
|
||||
log.Println("statistical PAN RAW: ", l0)
|
||||
data, err := os.ReadFile(l0)
|
||||
if err != nil {
|
||||
log.Error("Error reading file: ", err)
|
||||
continue
|
||||
}
|
||||
|
||||
height := len(data) / (PANCameraProbeNum * 2)
|
||||
img, err := gocv.NewMatFromBytes(height, PANCameraProbeNum, gocv.MatTypeCV16U, data)
|
||||
if err != nil {
|
||||
log.Error("Error creating Mat from bytes: ", err)
|
||||
return err
|
||||
}
|
||||
|
||||
rrc.Histograms[0].statistical(img)
|
||||
img.Close()
|
||||
files = append(files, scanner.Text())
|
||||
}
|
||||
|
||||
// 并发处理
|
||||
var wg sync.WaitGroup
|
||||
jobs := make(chan struct{}, 5)
|
||||
var hists []*ProbeHistogram
|
||||
var mutex sync.Mutex
|
||||
for _, file := range files {
|
||||
wg.Add(1)
|
||||
go func(l0 string) {
|
||||
defer wg.Done()
|
||||
|
||||
jobs <- struct{}{}
|
||||
defer func() { <-jobs }()
|
||||
|
||||
log.Println("statistical PAN RAW: ", l0)
|
||||
data, err := os.ReadFile(l0)
|
||||
if err != nil {
|
||||
log.Error("Error reading file: ", err)
|
||||
return
|
||||
}
|
||||
|
||||
height := len(data) / (PANCameraProbeNum * 2)
|
||||
img, err := gocv.NewMatFromBytes(height, PANCameraProbeNum, gocv.MatTypeCV16U, data)
|
||||
if err != nil {
|
||||
log.Error("Error creating Mat from bytes: ", err)
|
||||
return
|
||||
}
|
||||
|
||||
var hist ProbeHistogram
|
||||
hist.init(PANCameraProbeNum)
|
||||
hist.statistical(img)
|
||||
img.Close()
|
||||
|
||||
mutex.Lock()
|
||||
hists = append(hists, &hist)
|
||||
mutex.Unlock()
|
||||
|
||||
}(file)
|
||||
}
|
||||
|
||||
wg.Wait()
|
||||
log.Println("sum PAN histogram...")
|
||||
rrc.Histograms[0].sum(hists)
|
||||
log.Println("compute PAN histogram...")
|
||||
rrc.Histograms[0].compute()
|
||||
log.Println("save PAN gray table matrix.")
|
||||
rrc.Histograms[0].save("data/rrc/pan_gray_table.dat")
|
||||
rrc.Histograms[0].saveLUT("data/rrc/B0.LUT")
|
||||
|
||||
return nil
|
||||
}
|
||||
@@ -88,43 +116,68 @@ func (rrc *RRC) StatisticalMSS(dsfile string) error {
|
||||
defer f.Close()
|
||||
|
||||
scanner := bufio.NewScanner(f)
|
||||
|
||||
var files []string
|
||||
for scanner.Scan() {
|
||||
l0 := scanner.Text()
|
||||
log.Println("statistical MSS RAW: ", l0)
|
||||
data, err := os.ReadFile(l0)
|
||||
if err != nil {
|
||||
log.Error("Error reading file: ", err)
|
||||
continue
|
||||
}
|
||||
|
||||
width := MSSCameraProbeNum
|
||||
height := len(data) / (width * 2)
|
||||
mssData := make([][]byte, 4)
|
||||
for h := 0; h < height; h++ {
|
||||
row := data[h*width*4*2 : (h+1)*width*4*2]
|
||||
for i := 0; i < 4; i++ {
|
||||
mssData[i] = append(mssData[i], row[i*width*2:(i+1)*width*2]...)
|
||||
}
|
||||
}
|
||||
|
||||
var mssImages [4]gocv.Mat
|
||||
for i := 0; i < 4; i++ {
|
||||
mssImages[i], err = gocv.NewMatFromBytes(height, width, gocv.MatTypeCV16U, mssData[i])
|
||||
if err != nil {
|
||||
log.Error("Error creating Mat from bytes: ", err)
|
||||
return err
|
||||
}
|
||||
|
||||
rrc.Histograms[i+1].statistical(mssImages[i])
|
||||
mssImages[i].Close()
|
||||
}
|
||||
files = append(files, scanner.Text())
|
||||
}
|
||||
|
||||
var wg sync.WaitGroup
|
||||
jobs := make(chan struct{}, 5)
|
||||
var hists [4][]*ProbeHistogram
|
||||
var mutex sync.Mutex
|
||||
for _, file := range files {
|
||||
wg.Add(1)
|
||||
go func(l0 string) {
|
||||
defer wg.Done()
|
||||
jobs <- struct{}{}
|
||||
defer func() { <-jobs }()
|
||||
|
||||
log.Println("statistical MSS RAW: ", l0)
|
||||
data, err := os.ReadFile(l0)
|
||||
if err != nil {
|
||||
log.Error("Error reading file: ", err)
|
||||
return
|
||||
}
|
||||
|
||||
width := MSSCameraProbeNum
|
||||
height := len(data) / (width * 2)
|
||||
mssData := make([][]byte, 4)
|
||||
for h := 0; h < height; h++ {
|
||||
row := data[h*width*4*2 : (h+1)*width*4*2]
|
||||
for i := 0; i < 4; i++ {
|
||||
mssData[i] = append(mssData[i], row[i*width*2:(i+1)*width*2]...)
|
||||
}
|
||||
}
|
||||
|
||||
var mssImages [4]gocv.Mat
|
||||
for i := 0; i < 4; i++ {
|
||||
mssImages[i], err = gocv.NewMatFromBytes(height, width, gocv.MatTypeCV16U, mssData[i])
|
||||
if err != nil {
|
||||
log.Error("Error creating Mat from bytes: ", err)
|
||||
return
|
||||
}
|
||||
|
||||
var hist ProbeHistogram
|
||||
hist.init(PANCameraProbeNum)
|
||||
hist.statistical(mssImages[i])
|
||||
mssImages[i].Close()
|
||||
|
||||
mutex.Lock()
|
||||
hists[i] = append(hists[i], &hist)
|
||||
mutex.Unlock()
|
||||
}
|
||||
}(file)
|
||||
}
|
||||
|
||||
wg.Wait()
|
||||
for i := 1; i < 5; i++ {
|
||||
log.Println("sum MSS histogram...")
|
||||
rrc.Histograms[i].sum(hists[i-1])
|
||||
log.Println("compute MSS histogram...")
|
||||
rrc.Histograms[i].compute()
|
||||
log.Println("save MSS gray table matrix.")
|
||||
rrc.Histograms[i].save(fmt.Sprintf("data/rrc/mss%d_gray_table.dat", i))
|
||||
rrc.Histograms[i].saveLUT(fmt.Sprintf("data/rrc/B%d.LUT", i))
|
||||
}
|
||||
|
||||
return nil
|
||||
|
||||
Reference in New Issue
Block a user