Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
24
Task/Bitmap-Histogram/Go/bitmap-histogram-1.go
Normal file
24
Task/Bitmap-Histogram/Go/bitmap-histogram-1.go
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
package raster
|
||||
|
||||
import "math"
|
||||
|
||||
func (g *Grmap) Histogram(bins int) []int {
|
||||
if bins <= 0 {
|
||||
bins = g.cols
|
||||
}
|
||||
h := make([]int, bins)
|
||||
for _, p := range g.px {
|
||||
h[int(p)*(bins-1)/math.MaxUint16]++
|
||||
}
|
||||
return h
|
||||
}
|
||||
|
||||
func (g *Grmap) Threshold(t uint16) {
|
||||
for i, p := range g.px {
|
||||
if p < t {
|
||||
g.px[i] = 0
|
||||
} else {
|
||||
g.px[i] = math.MaxUint16
|
||||
}
|
||||
}
|
||||
}
|
||||
45
Task/Bitmap-Histogram/Go/bitmap-histogram-2.go
Normal file
45
Task/Bitmap-Histogram/Go/bitmap-histogram-2.go
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
package main
|
||||
|
||||
// Files required to build supporting package raster are found in:
|
||||
// * This task (immediately above)
|
||||
// * Bitmap
|
||||
// * Grayscale image
|
||||
// * Read a PPM file
|
||||
// * Write a PPM file
|
||||
|
||||
import (
|
||||
"raster"
|
||||
"fmt"
|
||||
"math"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// (A file with this name is output by the Go solution to the task
|
||||
// "Bitmap/Read an image through a pipe," but of course any 8-bit
|
||||
// P6 PPM file should work.)
|
||||
b, err := raster.ReadPpmFile("pipein.ppm")
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return
|
||||
}
|
||||
g := b.Grmap()
|
||||
h := g.Histogram(0)
|
||||
// compute median
|
||||
lb, ub := 0, len(h)-1
|
||||
var lSum, uSum int
|
||||
for lb <= ub {
|
||||
if lSum+h[lb] < uSum+h[ub] {
|
||||
lSum += h[lb]
|
||||
lb++
|
||||
} else {
|
||||
uSum += h[ub]
|
||||
ub--
|
||||
}
|
||||
}
|
||||
// apply threshold and write output file
|
||||
g.Threshold(uint16(ub * math.MaxUint16 / len(h)))
|
||||
err = g.Bitmap().WritePpmFile("threshold.ppm")
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue